From d1291f67551c58168af43698a359cb5ddfd266b0 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 3 Nov 2016 01:33:53 +0100 Subject: [PATCH] node_modules --- node_modules/.bin/babylon | 1 - node_modules/.bin/dateformat | 1 - node_modules/.bin/detect-indent | 1 - node_modules/.bin/jade | 1 - node_modules/.bin/jsesc | 1 - node_modules/.bin/loose-envify | 1 - node_modules/.bin/mkdirp | 1 - node_modules/.bin/rimraf | 1 - node_modules/.bin/strip-indent | 1 - node_modules/.bin/user-home | 1 - node_modules/.bin/which | 1 - node_modules/.yarn-integrity | 1 + .../adm-zip/.idea/scopes/scope_settings.xml | 5 + node_modules/adm-zip/MIT-LICENSE.txt | 21 + node_modules/adm-zip/README.md | 64 + node_modules/adm-zip/adm-zip.js | 404 + node_modules/adm-zip/headers/entryHeader.js | 261 + node_modules/adm-zip/headers/index.js | 2 + node_modules/adm-zip/headers/mainHeader.js | 80 + node_modules/adm-zip/methods/deflater.js | 1578 ++ node_modules/adm-zip/methods/index.js | 2 + node_modules/adm-zip/methods/inflater.js | 448 + node_modules/adm-zip/package.json | 31 + .../adm-zip/test/assets/attributes_test.zip | Bin 0 -> 4189 bytes .../attributes_test/New folder/hidden.txt | 17 + .../New folder/hidden_readonly.txt | 17 + .../attributes_test/New folder/readonly.txt | 17 + .../attributes_test/New folder/somefile.txt | 17 + .../attributes_test/asd/New Text Document.txt | 0 .../assets/attributes_test/blank file.txt | 0 node_modules/adm-zip/test/assets/fast.zip | Bin 0 -> 4194 bytes node_modules/adm-zip/test/assets/fastest.zip | Bin 0 -> 4194 bytes .../adm-zip/test/assets/linux_arc.zip | Bin 0 -> 415 bytes node_modules/adm-zip/test/assets/maximum.zip | Bin 0 -> 4086 bytes node_modules/adm-zip/test/assets/normal.zip | Bin 0 -> 4170 bytes node_modules/adm-zip/test/assets/store.zip | Bin 0 -> 5878 bytes node_modules/adm-zip/test/assets/ultra.zip | Bin 0 -> 4086 bytes node_modules/adm-zip/test/index.js | 5 + node_modules/adm-zip/util/constants.js | 84 + node_modules/adm-zip/util/errors.js | 35 + node_modules/adm-zip/util/fattr.js | 84 + node_modules/adm-zip/util/index.js | 4 + node_modules/adm-zip/util/utils.js | 145 + node_modules/adm-zip/zipEntry.js | 224 + node_modules/adm-zip/zipFile.js | 311 + node_modules/ansi-regex/package.json | 97 +- node_modules/ansi-styles/package.json | 94 +- .../node_modules/isarray/package.json | 104 - .../node_modules/lodash/LICENSE | 47 - .../node_modules/lodash/README.md | 39 - .../node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_MapCache.js | 32 - .../node_modules/lodash/_SetCache.js | 27 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseDifference.js | 67 - .../node_modules/lodash/_baseGetTag.js | 22 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../node_modules/lodash/_baseIsDate.js | 27 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_getTag.js | 68 - .../node_modules/lodash/_hasPath.js | 40 - .../node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/chunk.js | 50 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../node_modules/lodash/cloneWith.js | 38 - .../node_modules/lodash/compact.js | 31 - .../node_modules/lodash/cond.js | 60 - .../node_modules/lodash/core.js | 3831 ---- .../node_modules/lodash/core.min.js | 29 - .../node_modules/lodash/countBy.js | 41 - .../node_modules/lodash/create.js | 43 - .../node_modules/lodash/drop.js | 38 - .../node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropWhile.js | 46 - .../node_modules/lodash/every.js | 57 - .../node_modules/lodash/fill.js | 45 - .../node_modules/lodash/filter.js | 49 - .../node_modules/lodash/find.js | 43 - .../node_modules/lodash/findIndex.js | 56 - .../node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../node_modules/lodash/flatMap.js | 30 - .../node_modules/lodash/flatMapDeep.js | 32 - .../node_modules/lodash/flatMapDepth.js | 32 - .../node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fromPairs.js | 28 - .../node_modules/lodash/groupBy.js | 42 - .../node_modules/lodash/indexOf.js | 42 - .../node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersectionWith.js | 42 - .../node_modules/lodash/isBoolean.js | 38 - .../node_modules/lodash/isElement.js | 25 - .../node_modules/lodash/isEmpty.js | 74 - .../node_modules/lodash/isError.js | 42 - .../node_modules/lodash/isFunction.js | 42 - .../node_modules/lodash/isNumber.js | 47 - .../node_modules/lodash/isPlainObject.js | 68 - .../node_modules/lodash/isString.js | 39 - .../node_modules/lodash/isSymbol.js | 38 - .../node_modules/lodash/isWeakSet.js | 37 - .../node_modules/lodash/join.js | 26 - .../node_modules/lodash/keyBy.js | 37 - .../node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../node_modules/lodash/lodash.js | 16982 --------------- .../node_modules/lodash/lodash.min.js | 134 - .../node_modules/lodash/memoize.js | 73 - .../node_modules/lodash/package.json | 115 - .../node_modules/lodash/pullAllBy.js | 34 - .../node_modules/lodash/pullAt.js | 43 - .../node_modules/lodash/remove.js | 54 - .../node_modules/lodash/reverse.js | 34 - .../node_modules/lodash/slice.js | 37 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/tail.js | 22 - .../node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../node_modules/lodash/takeWhile.js | 46 - .../node_modules/lodash/times.js | 51 - .../node_modules/lodash/toArray.js | 58 - .../node_modules/lodash/unionBy.js | 40 - .../node_modules/lodash/unionWith.js | 36 - .../node_modules/lodash/uniq.js | 27 - .../node_modules/lodash/uniqBy.js | 34 - .../node_modules/lodash/uniqWith.js | 29 - .../node_modules/lodash/values.js | 34 - .../node_modules/lodash/wrap.js | 31 - .../node_modules/lodash/xorBy.js | 40 - .../node_modules/lodash/xorWith.js | 36 - .../node_modules/lodash/zipWith.js | 31 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../node_modules/readable-stream/package.json | 125 - .../node_modules/readable-stream/readable.js | 16 - node_modules/archiver-utils/package.json | 169 +- node_modules/archiver/CHANGELOG.md | 4 + node_modules/archiver/README.md | 2 +- node_modules/archiver/lib/core.js | 12 + .../archiver/node_modules/isarray/README.md | 60 - .../archiver/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../archiver/node_modules/lodash/LICENSE | 47 - .../archiver/node_modules/lodash/README.md | 39 - .../archiver/node_modules/lodash/_DataView.js | 7 - .../archiver/node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_LazyWrapper.js | 28 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../archiver/node_modules/lodash/_Map.js | 7 - .../archiver/node_modules/lodash/_MapCache.js | 32 - .../archiver/node_modules/lodash/_Promise.js | 7 - .../archiver/node_modules/lodash/_Set.js | 7 - .../archiver/node_modules/lodash/_SetCache.js | 27 - .../archiver/node_modules/lodash/_Stack.js | 27 - .../archiver/node_modules/lodash/_Symbol.js | 6 - .../node_modules/lodash/_Uint8Array.js | 6 - .../archiver/node_modules/lodash/_WeakMap.js | 7 - .../node_modules/lodash/_addMapEntry.js | 15 - .../node_modules/lodash/_addSetEntry.js | 15 - .../archiver/node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../archiver/node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayPush.js | 20 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../archiver/node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseClamp.js | 22 - .../node_modules/lodash/_baseClone.js | 133 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../node_modules/lodash/_baseCreate.js | 30 - .../node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../archiver/node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../archiver/node_modules/lodash/_baseFill.js | 32 - .../node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../node_modules/lodash/_baseFindKey.js | 23 - .../node_modules/lodash/_baseFlatten.js | 38 - .../archiver/node_modules/lodash/_baseFor.js | 16 - .../node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../archiver/node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../node_modules/lodash/_baseGetTag.js | 22 - .../archiver/node_modules/lodash/_baseGt.js | 14 - .../archiver/node_modules/lodash/_baseHas.js | 19 - .../node_modules/lodash/_baseHasIn.js | 13 - .../node_modules/lodash/_baseInRange.js | 18 - .../node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../node_modules/lodash/_baseInvoke.js | 28 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../node_modules/lodash/_baseIsDate.js | 27 - .../node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 89 - .../node_modules/lodash/_baseIsMap.js | 18 - .../node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseIteratee.js | 31 - .../archiver/node_modules/lodash/_baseKeys.js | 30 - .../node_modules/lodash/_baseKeysIn.js | 33 - .../node_modules/lodash/_baseLodash.js | 10 - .../archiver/node_modules/lodash/_baseLt.js | 14 - .../archiver/node_modules/lodash/_baseMap.js | 22 - .../node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../archiver/node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../archiver/node_modules/lodash/_baseNth.js | 20 - .../node_modules/lodash/_baseOrderBy.js | 34 - .../archiver/node_modules/lodash/_basePick.js | 19 - .../node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../node_modules/lodash/_basePullAll.js | 51 - .../node_modules/lodash/_basePullAt.js | 50 - .../node_modules/lodash/_baseRandom.js | 18 - .../node_modules/lodash/_baseRange.js | 28 - .../node_modules/lodash/_baseReduce.js | 23 - .../node_modules/lodash/_baseRepeat.js | 35 - .../archiver/node_modules/lodash/_baseRest.js | 17 - .../node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../archiver/node_modules/lodash/_baseSet.js | 48 - .../node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../node_modules/lodash/_baseShuffle.js | 15 - .../node_modules/lodash/_baseSlice.js | 31 - .../archiver/node_modules/lodash/_baseSome.js | 22 - .../node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../archiver/node_modules/lodash/_baseSum.js | 24 - .../node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../node_modules/lodash/_baseUnary.js | 14 - .../archiver/node_modules/lodash/_baseUniq.js | 72 - .../node_modules/lodash/_baseUnset.js | 29 - .../node_modules/lodash/_baseUpdate.js | 18 - .../node_modules/lodash/_baseValues.js | 19 - .../node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../archiver/node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../archiver/node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../archiver/node_modules/lodash/_castPath.js | 15 - .../archiver/node_modules/lodash/_castRest.js | 14 - .../node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../archiver/node_modules/lodash/_cloneMap.js | 19 - .../node_modules/lodash/_cloneRegExp.js | 17 - .../archiver/node_modules/lodash/_cloneSet.js | 19 - .../node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../node_modules/lodash/_copyArray.js | 20 - .../node_modules/lodash/_copyObject.js | 40 - .../node_modules/lodash/_copySymbols.js | 16 - .../node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtor.js | 37 - .../node_modules/lodash/_createCurry.js | 46 - .../node_modules/lodash/_createFind.js | 25 - .../node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../node_modules/lodash/_createRound.js | 33 - .../node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrap.js | 107 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../node_modules/lodash/_equalArrays.js | 84 - .../node_modules/lodash/_equalByTag.js | 113 - .../node_modules/lodash/_equalObjects.js | 90 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../archiver/node_modules/lodash/_flatRest.js | 16 - .../node_modules/lodash/_freeGlobal.js | 4 - .../node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../archiver/node_modules/lodash/_getData.js | 15 - .../node_modules/lodash/_getFuncName.js | 31 - .../node_modules/lodash/_getHolder.js | 13 - .../node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 26 - .../archiver/node_modules/lodash/_getTag.js | 68 - .../archiver/node_modules/lodash/_getValue.js | 13 - .../archiver/node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../archiver/node_modules/lodash/_hasPath.js | 40 - .../node_modules/lodash/_hasUnicode.js | 24 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../node_modules/lodash/_hashClear.js | 15 - .../node_modules/lodash/_hashDelete.js | 17 - .../archiver/node_modules/lodash/_hashGet.js | 30 - .../archiver/node_modules/lodash/_hashHas.js | 23 - .../archiver/node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../archiver/node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../archiver/node_modules/lodash/_isKey.js | 29 - .../node_modules/lodash/_isKeyable.js | 15 - .../node_modules/lodash/_isLaziable.js | 28 - .../node_modules/lodash/_isMaskable.js | 14 - .../archiver/node_modules/lodash/_isMasked.js | 20 - .../node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../node_modules/lodash/_lazyClone.js | 23 - .../node_modules/lodash/_lazyReverse.js | 23 - .../node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../node_modules/lodash/_mapCacheGet.js | 16 - .../node_modules/lodash/_mapCacheHas.js | 16 - .../node_modules/lodash/_mapCacheSet.js | 22 - .../node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../archiver/node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../archiver/node_modules/lodash/_nodeUtil.js | 22 - .../archiver/node_modules/lodash/_overArg.js | 15 - .../archiver/node_modules/lodash/_overRest.js | 36 - .../archiver/node_modules/lodash/_parent.js | 16 - .../archiver/node_modules/lodash/_reEscape.js | 4 - .../node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../node_modules/lodash/_realNames.js | 4 - .../archiver/node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../archiver/node_modules/lodash/_root.js | 9 - .../node_modules/lodash/_setCacheAdd.js | 19 - .../node_modules/lodash/_setCacheHas.js | 14 - .../archiver/node_modules/lodash/_setData.js | 20 - .../node_modules/lodash/_setToArray.js | 18 - .../node_modules/lodash/_setToPairs.js | 18 - .../node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../archiver/node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_shuffleSelf.js | 28 - .../node_modules/lodash/_stackClear.js | 15 - .../node_modules/lodash/_stackDelete.js | 18 - .../archiver/node_modules/lodash/_stackGet.js | 14 - .../archiver/node_modules/lodash/_stackHas.js | 14 - .../archiver/node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 31 - .../archiver/node_modules/lodash/_toKey.js | 21 - .../archiver/node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../node_modules/lodash/_unicodeSize.js | 42 - .../node_modules/lodash/_unicodeToArray.js | 38 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - .../archiver/node_modules/lodash/add.js | 22 - .../archiver/node_modules/lodash/after.js | 42 - .../archiver/node_modules/lodash/array.js | 67 - .../archiver/node_modules/lodash/ary.js | 29 - .../archiver/node_modules/lodash/assign.js | 58 - .../archiver/node_modules/lodash/assignIn.js | 40 - .../node_modules/lodash/assignInWith.js | 38 - .../node_modules/lodash/assignWith.js | 37 - .../archiver/node_modules/lodash/at.js | 23 - .../archiver/node_modules/lodash/attempt.js | 35 - .../archiver/node_modules/lodash/before.js | 40 - .../archiver/node_modules/lodash/bind.js | 57 - .../archiver/node_modules/lodash/bindAll.js | 41 - .../archiver/node_modules/lodash/bindKey.js | 68 - .../archiver/node_modules/lodash/camelCase.js | 29 - .../node_modules/lodash/capitalize.js | 23 - .../archiver/node_modules/lodash/castArray.js | 44 - .../archiver/node_modules/lodash/ceil.js | 26 - .../archiver/node_modules/lodash/chain.js | 38 - .../archiver/node_modules/lodash/chunk.js | 50 - .../archiver/node_modules/lodash/clamp.js | 39 - .../archiver/node_modules/lodash/clone.js | 33 - .../archiver/node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../archiver/node_modules/lodash/cloneWith.js | 38 - .../node_modules/lodash/collection.js | 30 - .../archiver/node_modules/lodash/commit.js | 33 - .../archiver/node_modules/lodash/compact.js | 31 - .../archiver/node_modules/lodash/concat.js | 43 - .../archiver/node_modules/lodash/cond.js | 60 - .../archiver/node_modules/lodash/conforms.js | 32 - .../node_modules/lodash/conformsTo.js | 32 - .../archiver/node_modules/lodash/constant.js | 26 - .../archiver/node_modules/lodash/core.js | 3831 ---- .../archiver/node_modules/lodash/core.min.js | 29 - .../archiver/node_modules/lodash/countBy.js | 41 - .../archiver/node_modules/lodash/create.js | 43 - .../archiver/node_modules/lodash/curry.js | 57 - .../node_modules/lodash/curryRight.js | 54 - .../archiver/node_modules/lodash/date.js | 3 - .../archiver/node_modules/lodash/debounce.js | 188 - .../archiver/node_modules/lodash/deburr.js | 43 - .../archiver/node_modules/lodash/defaultTo.js | 25 - .../archiver/node_modules/lodash/defaults.js | 32 - .../node_modules/lodash/defaultsDeep.js | 30 - .../archiver/node_modules/lodash/defer.js | 26 - .../archiver/node_modules/lodash/delay.js | 28 - .../node_modules/lodash/difference.js | 33 - .../node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../archiver/node_modules/lodash/divide.js | 22 - .../archiver/node_modules/lodash/drop.js | 38 - .../archiver/node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../archiver/node_modules/lodash/dropWhile.js | 46 - .../archiver/node_modules/lodash/each.js | 1 - .../archiver/node_modules/lodash/eachRight.js | 1 - .../archiver/node_modules/lodash/endsWith.js | 43 - .../archiver/node_modules/lodash/entries.js | 1 - .../archiver/node_modules/lodash/entriesIn.js | 1 - .../archiver/node_modules/lodash/eq.js | 37 - .../archiver/node_modules/lodash/escape.js | 43 - .../node_modules/lodash/escapeRegExp.js | 32 - .../archiver/node_modules/lodash/every.js | 57 - .../archiver/node_modules/lodash/extend.js | 1 - .../node_modules/lodash/extendWith.js | 1 - .../archiver/node_modules/lodash/fill.js | 45 - .../archiver/node_modules/lodash/filter.js | 49 - .../archiver/node_modules/lodash/find.js | 43 - .../archiver/node_modules/lodash/findIndex.js | 56 - .../archiver/node_modules/lodash/findKey.js | 44 - .../archiver/node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../node_modules/lodash/findLastKey.js | 44 - .../archiver/node_modules/lodash/first.js | 1 - .../archiver/node_modules/lodash/flatMap.js | 30 - .../node_modules/lodash/flatMapDeep.js | 32 - .../node_modules/lodash/flatMapDepth.js | 32 - .../archiver/node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../archiver/node_modules/lodash/flip.js | 28 - .../archiver/node_modules/lodash/floor.js | 26 - .../archiver/node_modules/lodash/flow.js | 27 - .../archiver/node_modules/lodash/flowRight.js | 26 - .../archiver/node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../archiver/node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../archiver/node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../archiver/node_modules/lodash/fp.js | 2 - .../archiver/node_modules/lodash/fp/F.js | 1 - .../archiver/node_modules/lodash/fp/T.js | 1 - .../archiver/node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../node_modules/lodash/fp/_mapping.js | 367 - .../archiver/node_modules/lodash/fp/_util.js | 15 - .../archiver/node_modules/lodash/fp/add.js | 5 - .../archiver/node_modules/lodash/fp/after.js | 5 - .../archiver/node_modules/lodash/fp/all.js | 1 - .../node_modules/lodash/fp/allPass.js | 1 - .../archiver/node_modules/lodash/fp/always.js | 1 - .../archiver/node_modules/lodash/fp/any.js | 1 - .../node_modules/lodash/fp/anyPass.js | 1 - .../archiver/node_modules/lodash/fp/apply.js | 1 - .../archiver/node_modules/lodash/fp/array.js | 2 - .../archiver/node_modules/lodash/fp/ary.js | 5 - .../archiver/node_modules/lodash/fp/assign.js | 5 - .../node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../archiver/node_modules/lodash/fp/assoc.js | 1 - .../node_modules/lodash/fp/assocPath.js | 1 - .../archiver/node_modules/lodash/fp/at.js | 5 - .../node_modules/lodash/fp/attempt.js | 5 - .../archiver/node_modules/lodash/fp/before.js | 5 - .../archiver/node_modules/lodash/fp/bind.js | 5 - .../node_modules/lodash/fp/bindAll.js | 5 - .../node_modules/lodash/fp/bindKey.js | 5 - .../node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../node_modules/lodash/fp/castArray.js | 5 - .../archiver/node_modules/lodash/fp/ceil.js | 5 - .../archiver/node_modules/lodash/fp/chain.js | 5 - .../archiver/node_modules/lodash/fp/chunk.js | 5 - .../archiver/node_modules/lodash/fp/clamp.js | 5 - .../archiver/node_modules/lodash/fp/clone.js | 5 - .../node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../archiver/node_modules/lodash/fp/commit.js | 5 - .../node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../node_modules/lodash/fp/compose.js | 1 - .../archiver/node_modules/lodash/fp/concat.js | 5 - .../archiver/node_modules/lodash/fp/cond.js | 5 - .../node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../node_modules/lodash/fp/constant.js | 5 - .../node_modules/lodash/fp/contains.js | 1 - .../node_modules/lodash/fp/convert.js | 18 - .../node_modules/lodash/fp/countBy.js | 5 - .../archiver/node_modules/lodash/fp/create.js | 5 - .../archiver/node_modules/lodash/fp/curry.js | 5 - .../archiver/node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../archiver/node_modules/lodash/fp/date.js | 2 - .../node_modules/lodash/fp/debounce.js | 5 - .../archiver/node_modules/lodash/fp/deburr.js | 5 - .../node_modules/lodash/fp/defaultTo.js | 5 - .../node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../archiver/node_modules/lodash/fp/defer.js | 5 - .../archiver/node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../archiver/node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../archiver/node_modules/lodash/fp/divide.js | 5 - .../archiver/node_modules/lodash/fp/drop.js | 5 - .../node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../node_modules/lodash/fp/dropWhile.js | 5 - .../archiver/node_modules/lodash/fp/each.js | 1 - .../node_modules/lodash/fp/eachRight.js | 1 - .../node_modules/lodash/fp/endsWith.js | 5 - .../node_modules/lodash/fp/entries.js | 1 - .../node_modules/lodash/fp/entriesIn.js | 1 - .../archiver/node_modules/lodash/fp/eq.js | 5 - .../archiver/node_modules/lodash/fp/equals.js | 1 - .../archiver/node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../archiver/node_modules/lodash/fp/every.js | 5 - .../archiver/node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../archiver/node_modules/lodash/fp/fill.js | 5 - .../archiver/node_modules/lodash/fp/filter.js | 5 - .../archiver/node_modules/lodash/fp/find.js | 5 - .../node_modules/lodash/fp/findFrom.js | 5 - .../node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../node_modules/lodash/fp/findKey.js | 5 - .../node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../archiver/node_modules/lodash/fp/first.js | 1 - .../node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../archiver/node_modules/lodash/fp/flip.js | 5 - .../archiver/node_modules/lodash/fp/floor.js | 5 - .../archiver/node_modules/lodash/fp/flow.js | 5 - .../node_modules/lodash/fp/flowRight.js | 5 - .../node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../archiver/node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../archiver/node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../node_modules/lodash/fp/fromPairs.js | 5 - .../node_modules/lodash/fp/function.js | 2 - .../node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../archiver/node_modules/lodash/fp/get.js | 5 - .../archiver/node_modules/lodash/fp/getOr.js | 5 - .../node_modules/lodash/fp/groupBy.js | 5 - .../archiver/node_modules/lodash/fp/gt.js | 5 - .../archiver/node_modules/lodash/fp/gte.js | 5 - .../archiver/node_modules/lodash/fp/has.js | 5 - .../archiver/node_modules/lodash/fp/hasIn.js | 5 - .../archiver/node_modules/lodash/fp/head.js | 5 - .../node_modules/lodash/fp/identical.js | 1 - .../node_modules/lodash/fp/identity.js | 5 - .../node_modules/lodash/fp/inRange.js | 5 - .../node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../node_modules/lodash/fp/indexBy.js | 1 - .../node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../archiver/node_modules/lodash/fp/init.js | 1 - .../node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../archiver/node_modules/lodash/fp/invert.js | 5 - .../node_modules/lodash/fp/invertBy.js | 5 - .../node_modules/lodash/fp/invertObj.js | 1 - .../archiver/node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../node_modules/lodash/fp/isBoolean.js | 5 - .../node_modules/lodash/fp/isBuffer.js | 5 - .../archiver/node_modules/lodash/fp/isDate.js | 5 - .../node_modules/lodash/fp/isElement.js | 5 - .../node_modules/lodash/fp/isEmpty.js | 5 - .../node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../node_modules/lodash/fp/isError.js | 5 - .../node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../node_modules/lodash/fp/isInteger.js | 5 - .../node_modules/lodash/fp/isLength.js | 5 - .../archiver/node_modules/lodash/fp/isMap.js | 5 - .../node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../archiver/node_modules/lodash/fp/isNaN.js | 5 - .../node_modules/lodash/fp/isNative.js | 5 - .../archiver/node_modules/lodash/fp/isNil.js | 5 - .../archiver/node_modules/lodash/fp/isNull.js | 5 - .../node_modules/lodash/fp/isNumber.js | 5 - .../node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../archiver/node_modules/lodash/fp/isSet.js | 5 - .../node_modules/lodash/fp/isString.js | 5 - .../node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../node_modules/lodash/fp/isWeakMap.js | 5 - .../node_modules/lodash/fp/isWeakSet.js | 5 - .../node_modules/lodash/fp/iteratee.js | 5 - .../archiver/node_modules/lodash/fp/join.js | 5 - .../archiver/node_modules/lodash/fp/juxt.js | 1 - .../node_modules/lodash/fp/kebabCase.js | 5 - .../archiver/node_modules/lodash/fp/keyBy.js | 5 - .../archiver/node_modules/lodash/fp/keys.js | 5 - .../archiver/node_modules/lodash/fp/keysIn.js | 5 - .../archiver/node_modules/lodash/fp/lang.js | 2 - .../archiver/node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../archiver/node_modules/lodash/fp/lt.js | 5 - .../archiver/node_modules/lodash/fp/lte.js | 5 - .../archiver/node_modules/lodash/fp/map.js | 5 - .../node_modules/lodash/fp/mapKeys.js | 5 - .../node_modules/lodash/fp/mapValues.js | 5 - .../node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../archiver/node_modules/lodash/fp/math.js | 2 - .../archiver/node_modules/lodash/fp/max.js | 5 - .../archiver/node_modules/lodash/fp/maxBy.js | 5 - .../archiver/node_modules/lodash/fp/mean.js | 5 - .../archiver/node_modules/lodash/fp/meanBy.js | 5 - .../node_modules/lodash/fp/memoize.js | 5 - .../archiver/node_modules/lodash/fp/merge.js | 5 - .../node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../node_modules/lodash/fp/mergeWith.js | 5 - .../archiver/node_modules/lodash/fp/method.js | 5 - .../node_modules/lodash/fp/methodOf.js | 5 - .../archiver/node_modules/lodash/fp/min.js | 5 - .../archiver/node_modules/lodash/fp/minBy.js | 5 - .../archiver/node_modules/lodash/fp/mixin.js | 5 - .../node_modules/lodash/fp/multiply.js | 5 - .../archiver/node_modules/lodash/fp/nAry.js | 1 - .../archiver/node_modules/lodash/fp/negate.js | 5 - .../archiver/node_modules/lodash/fp/next.js | 5 - .../archiver/node_modules/lodash/fp/noop.js | 5 - .../archiver/node_modules/lodash/fp/now.js | 5 - .../archiver/node_modules/lodash/fp/nth.js | 5 - .../archiver/node_modules/lodash/fp/nthArg.js | 5 - .../archiver/node_modules/lodash/fp/number.js | 2 - .../archiver/node_modules/lodash/fp/object.js | 2 - .../archiver/node_modules/lodash/fp/omit.js | 5 - .../node_modules/lodash/fp/omitAll.js | 1 - .../archiver/node_modules/lodash/fp/omitBy.js | 5 - .../archiver/node_modules/lodash/fp/once.js | 5 - .../node_modules/lodash/fp/orderBy.js | 5 - .../archiver/node_modules/lodash/fp/over.js | 5 - .../node_modules/lodash/fp/overArgs.js | 5 - .../node_modules/lodash/fp/overEvery.js | 5 - .../node_modules/lodash/fp/overSome.js | 5 - .../archiver/node_modules/lodash/fp/pad.js | 5 - .../node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../archiver/node_modules/lodash/fp/padEnd.js | 5 - .../node_modules/lodash/fp/padStart.js | 5 - .../node_modules/lodash/fp/parseInt.js | 5 - .../node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../node_modules/lodash/fp/partition.js | 5 - .../archiver/node_modules/lodash/fp/path.js | 1 - .../archiver/node_modules/lodash/fp/pathEq.js | 1 - .../archiver/node_modules/lodash/fp/pathOr.js | 1 - .../archiver/node_modules/lodash/fp/paths.js | 1 - .../archiver/node_modules/lodash/fp/pick.js | 5 - .../node_modules/lodash/fp/pickAll.js | 1 - .../archiver/node_modules/lodash/fp/pickBy.js | 5 - .../archiver/node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../archiver/node_modules/lodash/fp/plant.js | 5 - .../archiver/node_modules/lodash/fp/pluck.js | 1 - .../archiver/node_modules/lodash/fp/prop.js | 1 - .../archiver/node_modules/lodash/fp/propEq.js | 1 - .../archiver/node_modules/lodash/fp/propOr.js | 1 - .../node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../archiver/node_modules/lodash/fp/props.js | 1 - .../archiver/node_modules/lodash/fp/pull.js | 5 - .../node_modules/lodash/fp/pullAll.js | 5 - .../node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../archiver/node_modules/lodash/fp/pullAt.js | 5 - .../archiver/node_modules/lodash/fp/random.js | 5 - .../archiver/node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../archiver/node_modules/lodash/fp/rearg.js | 5 - .../archiver/node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../archiver/node_modules/lodash/fp/reject.js | 5 - .../archiver/node_modules/lodash/fp/remove.js | 5 - .../archiver/node_modules/lodash/fp/repeat.js | 5 - .../node_modules/lodash/fp/replace.js | 5 - .../archiver/node_modules/lodash/fp/rest.js | 5 - .../node_modules/lodash/fp/restFrom.js | 5 - .../archiver/node_modules/lodash/fp/result.js | 5 - .../node_modules/lodash/fp/reverse.js | 5 - .../archiver/node_modules/lodash/fp/round.js | 5 - .../archiver/node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../archiver/node_modules/lodash/fp/seq.js | 2 - .../archiver/node_modules/lodash/fp/set.js | 5 - .../node_modules/lodash/fp/setWith.js | 5 - .../node_modules/lodash/fp/shuffle.js | 5 - .../archiver/node_modules/lodash/fp/size.js | 5 - .../archiver/node_modules/lodash/fp/slice.js | 5 - .../node_modules/lodash/fp/snakeCase.js | 5 - .../archiver/node_modules/lodash/fp/some.js | 5 - .../archiver/node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../archiver/node_modules/lodash/fp/split.js | 5 - .../archiver/node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../archiver/node_modules/lodash/fp/string.js | 2 - .../node_modules/lodash/fp/stubArray.js | 5 - .../node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../node_modules/lodash/fp/stubTrue.js | 5 - .../node_modules/lodash/fp/subtract.js | 5 - .../archiver/node_modules/lodash/fp/sum.js | 5 - .../archiver/node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../archiver/node_modules/lodash/fp/tail.js | 5 - .../archiver/node_modules/lodash/fp/take.js | 5 - .../node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../node_modules/lodash/fp/takeWhile.js | 5 - .../archiver/node_modules/lodash/fp/tap.js | 5 - .../node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../node_modules/lodash/fp/throttle.js | 5 - .../archiver/node_modules/lodash/fp/thru.js | 5 - .../archiver/node_modules/lodash/fp/times.js | 5 - .../node_modules/lodash/fp/toArray.js | 5 - .../node_modules/lodash/fp/toFinite.js | 5 - .../node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../archiver/node_modules/lodash/fp/toJSON.js | 5 - .../node_modules/lodash/fp/toLength.js | 5 - .../node_modules/lodash/fp/toLower.js | 5 - .../node_modules/lodash/fp/toNumber.js | 5 - .../node_modules/lodash/fp/toPairs.js | 5 - .../node_modules/lodash/fp/toPairsIn.js | 5 - .../archiver/node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../node_modules/lodash/fp/toString.js | 5 - .../node_modules/lodash/fp/toUpper.js | 5 - .../node_modules/lodash/fp/transform.js | 5 - .../archiver/node_modules/lodash/fp/trim.js | 5 - .../node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../node_modules/lodash/fp/trimEnd.js | 5 - .../node_modules/lodash/fp/trimStart.js | 5 - .../node_modules/lodash/fp/truncate.js | 5 - .../node_modules/lodash/fp/unapply.js | 1 - .../archiver/node_modules/lodash/fp/unary.js | 5 - .../node_modules/lodash/fp/unescape.js | 5 - .../archiver/node_modules/lodash/fp/union.js | 5 - .../node_modules/lodash/fp/unionBy.js | 5 - .../node_modules/lodash/fp/unionWith.js | 5 - .../archiver/node_modules/lodash/fp/uniq.js | 5 - .../archiver/node_modules/lodash/fp/uniqBy.js | 5 - .../node_modules/lodash/fp/uniqWith.js | 5 - .../node_modules/lodash/fp/uniqueId.js | 5 - .../archiver/node_modules/lodash/fp/unnest.js | 1 - .../archiver/node_modules/lodash/fp/unset.js | 5 - .../archiver/node_modules/lodash/fp/unzip.js | 5 - .../node_modules/lodash/fp/unzipWith.js | 5 - .../archiver/node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../node_modules/lodash/fp/useWith.js | 1 - .../archiver/node_modules/lodash/fp/util.js | 2 - .../archiver/node_modules/lodash/fp/value.js | 5 - .../node_modules/lodash/fp/valueOf.js | 5 - .../archiver/node_modules/lodash/fp/values.js | 5 - .../node_modules/lodash/fp/valuesIn.js | 5 - .../archiver/node_modules/lodash/fp/where.js | 1 - .../node_modules/lodash/fp/whereEq.js | 1 - .../node_modules/lodash/fp/without.js | 5 - .../archiver/node_modules/lodash/fp/words.js | 5 - .../archiver/node_modules/lodash/fp/wrap.js | 5 - .../node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../archiver/node_modules/lodash/fp/xor.js | 5 - .../archiver/node_modules/lodash/fp/xorBy.js | 5 - .../node_modules/lodash/fp/xorWith.js | 5 - .../archiver/node_modules/lodash/fp/zip.js | 5 - .../archiver/node_modules/lodash/fp/zipAll.js | 5 - .../archiver/node_modules/lodash/fp/zipObj.js | 1 - .../node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../node_modules/lodash/fp/zipWith.js | 5 - .../archiver/node_modules/lodash/fromPairs.js | 28 - .../archiver/node_modules/lodash/function.js | 25 - .../archiver/node_modules/lodash/functions.js | 31 - .../node_modules/lodash/functionsIn.js | 31 - .../archiver/node_modules/lodash/get.js | 33 - .../archiver/node_modules/lodash/groupBy.js | 42 - .../archiver/node_modules/lodash/gt.js | 29 - .../archiver/node_modules/lodash/gte.js | 30 - .../archiver/node_modules/lodash/has.js | 35 - .../archiver/node_modules/lodash/hasIn.js | 34 - .../archiver/node_modules/lodash/head.js | 23 - .../archiver/node_modules/lodash/identity.js | 21 - .../archiver/node_modules/lodash/inRange.js | 55 - .../archiver/node_modules/lodash/includes.js | 53 - .../archiver/node_modules/lodash/index.js | 1 - .../archiver/node_modules/lodash/indexOf.js | 42 - .../archiver/node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../archiver/node_modules/lodash/invert.js | 27 - .../archiver/node_modules/lodash/invertBy.js | 44 - .../archiver/node_modules/lodash/invoke.js | 24 - .../archiver/node_modules/lodash/invokeMap.js | 44 - .../node_modules/lodash/isArguments.js | 36 - .../archiver/node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../archiver/node_modules/lodash/isBoolean.js | 38 - .../archiver/node_modules/lodash/isBuffer.js | 38 - .../archiver/node_modules/lodash/isDate.js | 27 - .../archiver/node_modules/lodash/isElement.js | 25 - .../archiver/node_modules/lodash/isEmpty.js | 74 - .../archiver/node_modules/lodash/isEqual.js | 35 - .../node_modules/lodash/isEqualWith.js | 41 - .../archiver/node_modules/lodash/isError.js | 42 - .../archiver/node_modules/lodash/isFinite.js | 36 - .../node_modules/lodash/isFunction.js | 42 - .../archiver/node_modules/lodash/isInteger.js | 33 - .../archiver/node_modules/lodash/isLength.js | 35 - .../archiver/node_modules/lodash/isMap.js | 27 - .../archiver/node_modules/lodash/isMatch.js | 36 - .../node_modules/lodash/isMatchWith.js | 41 - .../archiver/node_modules/lodash/isNaN.js | 38 - .../archiver/node_modules/lodash/isNative.js | 40 - .../archiver/node_modules/lodash/isNil.js | 25 - .../archiver/node_modules/lodash/isNull.js | 22 - .../archiver/node_modules/lodash/isNumber.js | 47 - .../archiver/node_modules/lodash/isObject.js | 31 - .../node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 68 - .../archiver/node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../archiver/node_modules/lodash/isSet.js | 27 - .../archiver/node_modules/lodash/isString.js | 39 - .../archiver/node_modules/lodash/isSymbol.js | 38 - .../node_modules/lodash/isTypedArray.js | 27 - .../node_modules/lodash/isUndefined.js | 22 - .../archiver/node_modules/lodash/isWeakMap.js | 28 - .../archiver/node_modules/lodash/isWeakSet.js | 37 - .../archiver/node_modules/lodash/iteratee.js | 50 - .../archiver/node_modules/lodash/join.js | 26 - .../archiver/node_modules/lodash/kebabCase.js | 28 - .../archiver/node_modules/lodash/keyBy.js | 37 - .../archiver/node_modules/lodash/keys.js | 37 - .../archiver/node_modules/lodash/keysIn.js | 32 - .../archiver/node_modules/lodash/lang.js | 58 - .../archiver/node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../archiver/node_modules/lodash/lodash.js | 16982 --------------- .../node_modules/lodash/lodash.min.js | 134 - .../archiver/node_modules/lodash/lowerCase.js | 27 - .../node_modules/lodash/lowerFirst.js | 22 - .../archiver/node_modules/lodash/lt.js | 29 - .../archiver/node_modules/lodash/lte.js | 30 - .../archiver/node_modules/lodash/map.js | 53 - .../archiver/node_modules/lodash/mapKeys.js | 36 - .../archiver/node_modules/lodash/mapValues.js | 43 - .../archiver/node_modules/lodash/matches.js | 36 - .../node_modules/lodash/matchesProperty.js | 34 - .../archiver/node_modules/lodash/math.js | 17 - .../archiver/node_modules/lodash/max.js | 29 - .../archiver/node_modules/lodash/maxBy.js | 34 - .../archiver/node_modules/lodash/mean.js | 22 - .../archiver/node_modules/lodash/meanBy.js | 31 - .../archiver/node_modules/lodash/memoize.js | 73 - .../archiver/node_modules/lodash/merge.js | 39 - .../archiver/node_modules/lodash/mergeWith.js | 39 - .../archiver/node_modules/lodash/method.js | 34 - .../archiver/node_modules/lodash/methodOf.js | 33 - .../archiver/node_modules/lodash/min.js | 29 - .../archiver/node_modules/lodash/minBy.js | 34 - .../archiver/node_modules/lodash/mixin.js | 74 - .../archiver/node_modules/lodash/multiply.js | 22 - .../archiver/node_modules/lodash/negate.js | 40 - .../archiver/node_modules/lodash/next.js | 35 - .../archiver/node_modules/lodash/noop.js | 17 - .../archiver/node_modules/lodash/now.js | 23 - .../archiver/node_modules/lodash/nth.js | 29 - .../archiver/node_modules/lodash/nthArg.js | 32 - .../archiver/node_modules/lodash/number.js | 5 - .../archiver/node_modules/lodash/object.js | 49 - .../archiver/node_modules/lodash/omit.js | 35 - .../archiver/node_modules/lodash/omitBy.js | 29 - .../archiver/node_modules/lodash/once.js | 25 - .../archiver/node_modules/lodash/orderBy.js | 47 - .../archiver/node_modules/lodash/over.js | 24 - .../archiver/node_modules/lodash/overArgs.js | 61 - .../archiver/node_modules/lodash/overEvery.js | 30 - .../archiver/node_modules/lodash/overSome.js | 30 - .../archiver/node_modules/lodash/package.json | 115 - .../archiver/node_modules/lodash/pad.js | 49 - .../archiver/node_modules/lodash/padEnd.js | 39 - .../archiver/node_modules/lodash/padStart.js | 39 - .../archiver/node_modules/lodash/parseInt.js | 43 - .../archiver/node_modules/lodash/partial.js | 50 - .../node_modules/lodash/partialRight.js | 49 - .../archiver/node_modules/lodash/partition.js | 43 - .../archiver/node_modules/lodash/pick.js | 27 - .../archiver/node_modules/lodash/pickBy.js | 27 - .../archiver/node_modules/lodash/plant.js | 48 - .../archiver/node_modules/lodash/property.js | 32 - .../node_modules/lodash/propertyOf.js | 30 - .../archiver/node_modules/lodash/pull.js | 29 - .../archiver/node_modules/lodash/pullAll.js | 29 - .../archiver/node_modules/lodash/pullAllBy.js | 34 - .../node_modules/lodash/pullAllWith.js | 32 - .../archiver/node_modules/lodash/pullAt.js | 43 - .../archiver/node_modules/lodash/random.js | 82 - .../archiver/node_modules/lodash/range.js | 46 - .../node_modules/lodash/rangeRight.js | 41 - .../archiver/node_modules/lodash/rearg.js | 33 - .../archiver/node_modules/lodash/reduce.js | 51 - .../node_modules/lodash/reduceRight.js | 36 - .../archiver/node_modules/lodash/reject.js | 46 - .../archiver/node_modules/lodash/remove.js | 54 - .../archiver/node_modules/lodash/repeat.js | 37 - .../archiver/node_modules/lodash/replace.js | 29 - .../archiver/node_modules/lodash/rest.js | 40 - .../archiver/node_modules/lodash/result.js | 57 - .../archiver/node_modules/lodash/reverse.js | 34 - .../archiver/node_modules/lodash/round.js | 26 - .../archiver/node_modules/lodash/sample.js | 24 - .../node_modules/lodash/sampleSize.js | 37 - .../archiver/node_modules/lodash/seq.js | 16 - .../archiver/node_modules/lodash/set.js | 35 - .../archiver/node_modules/lodash/setWith.js | 32 - .../archiver/node_modules/lodash/shuffle.js | 25 - .../archiver/node_modules/lodash/size.js | 46 - .../archiver/node_modules/lodash/slice.js | 37 - .../archiver/node_modules/lodash/snakeCase.js | 28 - .../archiver/node_modules/lodash/some.js | 51 - .../archiver/node_modules/lodash/sortBy.js | 48 - .../node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/sortedUniq.js | 24 - .../node_modules/lodash/sortedUniqBy.js | 26 - .../archiver/node_modules/lodash/split.js | 52 - .../archiver/node_modules/lodash/spread.js | 63 - .../archiver/node_modules/lodash/startCase.js | 29 - .../node_modules/lodash/startsWith.js | 36 - .../archiver/node_modules/lodash/string.js | 33 - .../archiver/node_modules/lodash/stubArray.js | 23 - .../archiver/node_modules/lodash/stubFalse.js | 18 - .../node_modules/lodash/stubObject.js | 23 - .../node_modules/lodash/stubString.js | 18 - .../archiver/node_modules/lodash/stubTrue.js | 18 - .../archiver/node_modules/lodash/subtract.js | 22 - .../archiver/node_modules/lodash/sum.js | 24 - .../archiver/node_modules/lodash/sumBy.js | 33 - .../archiver/node_modules/lodash/tail.js | 22 - .../archiver/node_modules/lodash/take.js | 37 - .../archiver/node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../archiver/node_modules/lodash/takeWhile.js | 46 - .../archiver/node_modules/lodash/tap.js | 29 - .../archiver/node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../archiver/node_modules/lodash/throttle.js | 69 - .../archiver/node_modules/lodash/thru.js | 28 - .../archiver/node_modules/lodash/times.js | 51 - .../archiver/node_modules/lodash/toArray.js | 58 - .../archiver/node_modules/lodash/toFinite.js | 42 - .../archiver/node_modules/lodash/toInteger.js | 36 - .../node_modules/lodash/toIterator.js | 23 - .../archiver/node_modules/lodash/toJSON.js | 1 - .../archiver/node_modules/lodash/toLength.js | 38 - .../archiver/node_modules/lodash/toLower.js | 28 - .../archiver/node_modules/lodash/toNumber.js | 66 - .../archiver/node_modules/lodash/toPairs.js | 30 - .../archiver/node_modules/lodash/toPairsIn.js | 30 - .../archiver/node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../archiver/node_modules/lodash/toString.js | 28 - .../archiver/node_modules/lodash/toUpper.js | 28 - .../archiver/node_modules/lodash/transform.js | 65 - .../archiver/node_modules/lodash/trim.js | 49 - .../archiver/node_modules/lodash/trimEnd.js | 43 - .../archiver/node_modules/lodash/trimStart.js | 43 - .../archiver/node_modules/lodash/truncate.js | 111 - .../archiver/node_modules/lodash/unary.js | 22 - .../archiver/node_modules/lodash/unescape.js | 34 - .../archiver/node_modules/lodash/union.js | 26 - .../archiver/node_modules/lodash/unionBy.js | 40 - .../archiver/node_modules/lodash/unionWith.js | 36 - .../archiver/node_modules/lodash/uniq.js | 27 - .../archiver/node_modules/lodash/uniqBy.js | 34 - .../archiver/node_modules/lodash/uniqWith.js | 29 - .../archiver/node_modules/lodash/uniqueId.js | 28 - .../archiver/node_modules/lodash/unset.js | 34 - .../archiver/node_modules/lodash/unzip.js | 45 - .../archiver/node_modules/lodash/unzipWith.js | 39 - .../archiver/node_modules/lodash/update.js | 35 - .../node_modules/lodash/updateWith.js | 33 - .../archiver/node_modules/lodash/upperCase.js | 27 - .../node_modules/lodash/upperFirst.js | 22 - .../archiver/node_modules/lodash/util.js | 34 - .../archiver/node_modules/lodash/value.js | 1 - .../archiver/node_modules/lodash/valueOf.js | 1 - .../archiver/node_modules/lodash/values.js | 34 - .../archiver/node_modules/lodash/valuesIn.js | 32 - .../archiver/node_modules/lodash/without.js | 31 - .../archiver/node_modules/lodash/words.js | 35 - .../archiver/node_modules/lodash/wrap.js | 31 - .../archiver/node_modules/lodash/wrapperAt.js | 48 - .../node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../node_modules/lodash/wrapperValue.js | 21 - .../archiver/node_modules/lodash/xor.js | 28 - .../archiver/node_modules/lodash/xorBy.js | 40 - .../archiver/node_modules/lodash/xorWith.js | 36 - .../archiver/node_modules/lodash/zip.js | 22 - .../archiver/node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../archiver/node_modules/lodash/zipWith.js | 31 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../node_modules/readable-stream/readable.js | 16 - node_modules/archiver/package.json | 191 +- node_modules/archy/package.json | 150 +- node_modules/arr-diff/package.json | 108 +- node_modules/arr-flatten/package.json | 105 +- node_modules/array-differ/package.json | 85 +- node_modules/array-find-index/package.json | 92 +- node_modules/array-union/package.json | 95 +- node_modules/array-uniq/package.json | 97 +- node_modules/array-unique/package.json | 103 +- node_modules/arrify/package.json | 88 +- node_modules/asap/package.json | 135 +- node_modules/async/CHANGELOG.md | 11 + node_modules/async/apply.js | 8 +- node_modules/async/applyEach.js | 16 +- node_modules/async/auto.js | 6 +- node_modules/async/compose.js | 6 +- node_modules/async/constant.js | 6 +- node_modules/async/dist/async.js | 10446 +++++----- node_modules/async/dist/async.min.js | 2 +- node_modules/async/doDuring.js | 6 +- node_modules/async/doWhilst.js | 10 +- node_modules/async/eachLimit.js | 2 +- node_modules/async/eachOf.js | 2 +- .../async/internal/DoublyLinkedList.js | 2 +- node_modules/async/internal/applyEach.js | 6 +- node_modules/async/internal/breakLoop.js | 9 + node_modules/async/internal/concat.js | 2 +- node_modules/async/internal/consoleFunc.js | 8 +- node_modules/async/internal/createTester.js | 29 +- node_modules/async/internal/doLimit.js | 2 +- node_modules/async/internal/eachOfLimit.js | 9 +- node_modules/async/internal/findGetResult.js | 2 +- node_modules/async/internal/initialParams.js | 6 +- node_modules/async/internal/notId.js | 2 +- node_modules/async/internal/once.js | 2 +- node_modules/async/internal/onlyOnce.js | 2 +- node_modules/async/internal/parallel.js | 6 +- node_modules/async/internal/queue.js | 32 +- node_modules/async/internal/setImmediate.js | 6 +- node_modules/async/internal/withoutIndex.js | 2 +- node_modules/async/mapValues.js | 7 +- node_modules/async/mapValuesLimit.js | 5 +- node_modules/async/mapValuesSeries.js | 5 +- node_modules/async/memoize.js | 6 +- .../async/node_modules/lodash/LICENSE | 47 - .../async/node_modules/lodash/README.md | 39 - .../async/node_modules/lodash/_DataView.js | 7 - .../async/node_modules/lodash/_Hash.js | 32 - .../async/node_modules/lodash/_LazyWrapper.js | 28 - .../async/node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../async/node_modules/lodash/_Map.js | 7 - .../async/node_modules/lodash/_MapCache.js | 32 - .../async/node_modules/lodash/_Promise.js | 7 - .../async/node_modules/lodash/_Set.js | 7 - .../async/node_modules/lodash/_SetCache.js | 27 - .../async/node_modules/lodash/_Stack.js | 27 - .../async/node_modules/lodash/_Symbol.js | 6 - .../async/node_modules/lodash/_Uint8Array.js | 6 - .../async/node_modules/lodash/_WeakMap.js | 7 - .../async/node_modules/lodash/_addMapEntry.js | 15 - .../async/node_modules/lodash/_addSetEntry.js | 15 - .../async/node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../async/node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../async/node_modules/lodash/_arrayEvery.js | 23 - .../async/node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../async/node_modules/lodash/_arrayMap.js | 21 - .../async/node_modules/lodash/_arrayPush.js | 20 - .../async/node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../async/node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../async/node_modules/lodash/_arraySome.js | 23 - .../async/node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../async/node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../async/node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../async/node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../async/node_modules/lodash/_baseAt.js | 23 - .../async/node_modules/lodash/_baseClamp.js | 22 - .../async/node_modules/lodash/_baseClone.js | 133 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../async/node_modules/lodash/_baseCreate.js | 30 - .../async/node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../async/node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../async/node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../async/node_modules/lodash/_baseFill.js | 32 - .../async/node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../async/node_modules/lodash/_baseFindKey.js | 23 - .../async/node_modules/lodash/_baseFlatten.js | 38 - .../async/node_modules/lodash/_baseFor.js | 16 - .../async/node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../async/node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../async/node_modules/lodash/_baseGetTag.js | 22 - .../async/node_modules/lodash/_baseGt.js | 14 - .../async/node_modules/lodash/_baseHas.js | 19 - .../async/node_modules/lodash/_baseHasIn.js | 13 - .../async/node_modules/lodash/_baseInRange.js | 18 - .../async/node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../async/node_modules/lodash/_baseInvoke.js | 28 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../async/node_modules/lodash/_baseIsDate.js | 27 - .../async/node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 89 - .../async/node_modules/lodash/_baseIsMap.js | 18 - .../async/node_modules/lodash/_baseIsMatch.js | 62 - .../async/node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../async/node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseIteratee.js | 31 - .../async/node_modules/lodash/_baseKeys.js | 30 - .../async/node_modules/lodash/_baseKeysIn.js | 33 - .../async/node_modules/lodash/_baseLodash.js | 10 - .../async/node_modules/lodash/_baseLt.js | 14 - .../async/node_modules/lodash/_baseMap.js | 22 - .../async/node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../async/node_modules/lodash/_baseMean.js | 20 - .../async/node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../async/node_modules/lodash/_baseNth.js | 20 - .../async/node_modules/lodash/_baseOrderBy.js | 34 - .../async/node_modules/lodash/_basePick.js | 19 - .../async/node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../async/node_modules/lodash/_basePullAll.js | 51 - .../async/node_modules/lodash/_basePullAt.js | 50 - .../async/node_modules/lodash/_baseRandom.js | 18 - .../async/node_modules/lodash/_baseRange.js | 28 - .../async/node_modules/lodash/_baseReduce.js | 23 - .../async/node_modules/lodash/_baseRepeat.js | 35 - .../async/node_modules/lodash/_baseRest.js | 17 - .../async/node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../async/node_modules/lodash/_baseSet.js | 48 - .../async/node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../async/node_modules/lodash/_baseShuffle.js | 15 - .../async/node_modules/lodash/_baseSlice.js | 31 - .../async/node_modules/lodash/_baseSome.js | 22 - .../async/node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../async/node_modules/lodash/_baseSum.js | 24 - .../async/node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../async/node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../async/node_modules/lodash/_baseUnary.js | 14 - .../async/node_modules/lodash/_baseUniq.js | 72 - .../async/node_modules/lodash/_baseUnset.js | 29 - .../async/node_modules/lodash/_baseUpdate.js | 18 - .../async/node_modules/lodash/_baseValues.js | 19 - .../async/node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../async/node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../async/node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../async/node_modules/lodash/_castPath.js | 15 - .../async/node_modules/lodash/_castRest.js | 14 - .../async/node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../async/node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../async/node_modules/lodash/_cloneMap.js | 19 - .../async/node_modules/lodash/_cloneRegExp.js | 17 - .../async/node_modules/lodash/_cloneSet.js | 19 - .../async/node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../async/node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../async/node_modules/lodash/_copyArray.js | 20 - .../async/node_modules/lodash/_copyObject.js | 40 - .../async/node_modules/lodash/_copySymbols.js | 16 - .../async/node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../async/node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../async/node_modules/lodash/_createCtor.js | 37 - .../async/node_modules/lodash/_createCurry.js | 46 - .../async/node_modules/lodash/_createFind.js | 25 - .../async/node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../async/node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../async/node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../async/node_modules/lodash/_createRound.js | 33 - .../async/node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../async/node_modules/lodash/_createWrap.js | 107 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../async/node_modules/lodash/_equalArrays.js | 84 - .../async/node_modules/lodash/_equalByTag.js | 113 - .../node_modules/lodash/_equalObjects.js | 90 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../async/node_modules/lodash/_flatRest.js | 16 - .../async/node_modules/lodash/_freeGlobal.js | 4 - .../async/node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../async/node_modules/lodash/_getData.js | 15 - .../async/node_modules/lodash/_getFuncName.js | 31 - .../async/node_modules/lodash/_getHolder.js | 13 - .../async/node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../async/node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../async/node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 26 - .../async/node_modules/lodash/_getTag.js | 68 - .../async/node_modules/lodash/_getValue.js | 13 - .../async/node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../async/node_modules/lodash/_hasPath.js | 40 - .../async/node_modules/lodash/_hasUnicode.js | 24 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../async/node_modules/lodash/_hashClear.js | 15 - .../async/node_modules/lodash/_hashDelete.js | 17 - .../async/node_modules/lodash/_hashGet.js | 30 - .../async/node_modules/lodash/_hashHas.js | 23 - .../async/node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../async/node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../async/node_modules/lodash/_isKey.js | 29 - .../async/node_modules/lodash/_isKeyable.js | 15 - .../async/node_modules/lodash/_isLaziable.js | 28 - .../async/node_modules/lodash/_isMaskable.js | 14 - .../async/node_modules/lodash/_isMasked.js | 20 - .../async/node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../async/node_modules/lodash/_lazyClone.js | 23 - .../async/node_modules/lodash/_lazyReverse.js | 23 - .../async/node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../async/node_modules/lodash/_mapCacheGet.js | 16 - .../async/node_modules/lodash/_mapCacheHas.js | 16 - .../async/node_modules/lodash/_mapCacheSet.js | 22 - .../async/node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../async/node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../async/node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../async/node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../async/node_modules/lodash/_nodeUtil.js | 22 - .../async/node_modules/lodash/_overArg.js | 15 - .../async/node_modules/lodash/_overRest.js | 36 - .../async/node_modules/lodash/_parent.js | 16 - .../async/node_modules/lodash/_reEscape.js | 4 - .../async/node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../async/node_modules/lodash/_realNames.js | 4 - .../async/node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../async/node_modules/lodash/_root.js | 9 - .../async/node_modules/lodash/_setCacheAdd.js | 19 - .../async/node_modules/lodash/_setCacheHas.js | 14 - .../async/node_modules/lodash/_setData.js | 20 - .../async/node_modules/lodash/_setToArray.js | 18 - .../async/node_modules/lodash/_setToPairs.js | 18 - .../async/node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../async/node_modules/lodash/_shortOut.js | 37 - .../async/node_modules/lodash/_shuffleSelf.js | 28 - .../async/node_modules/lodash/_stackClear.js | 15 - .../async/node_modules/lodash/_stackDelete.js | 18 - .../async/node_modules/lodash/_stackGet.js | 14 - .../async/node_modules/lodash/_stackHas.js | 14 - .../async/node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../async/node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 31 - .../async/node_modules/lodash/_toKey.js | 21 - .../async/node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../async/node_modules/lodash/_unicodeSize.js | 42 - .../node_modules/lodash/_unicodeToArray.js | 38 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - node_modules/async/node_modules/lodash/add.js | 22 - .../async/node_modules/lodash/after.js | 42 - .../async/node_modules/lodash/array.js | 67 - node_modules/async/node_modules/lodash/ary.js | 29 - .../async/node_modules/lodash/assign.js | 58 - .../async/node_modules/lodash/assignIn.js | 40 - .../async/node_modules/lodash/assignInWith.js | 38 - .../async/node_modules/lodash/assignWith.js | 37 - node_modules/async/node_modules/lodash/at.js | 23 - .../async/node_modules/lodash/attempt.js | 35 - .../async/node_modules/lodash/before.js | 40 - .../async/node_modules/lodash/bind.js | 57 - .../async/node_modules/lodash/bindAll.js | 41 - .../async/node_modules/lodash/bindKey.js | 68 - .../async/node_modules/lodash/camelCase.js | 29 - .../async/node_modules/lodash/capitalize.js | 23 - .../async/node_modules/lodash/castArray.js | 44 - .../async/node_modules/lodash/ceil.js | 26 - .../async/node_modules/lodash/chain.js | 38 - .../async/node_modules/lodash/chunk.js | 50 - .../async/node_modules/lodash/clamp.js | 39 - .../async/node_modules/lodash/clone.js | 33 - .../async/node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../async/node_modules/lodash/cloneWith.js | 38 - .../async/node_modules/lodash/collection.js | 30 - .../async/node_modules/lodash/commit.js | 33 - .../async/node_modules/lodash/compact.js | 31 - .../async/node_modules/lodash/concat.js | 43 - .../async/node_modules/lodash/cond.js | 60 - .../async/node_modules/lodash/conforms.js | 32 - .../async/node_modules/lodash/conformsTo.js | 32 - .../async/node_modules/lodash/constant.js | 26 - .../async/node_modules/lodash/core.js | 3831 ---- .../async/node_modules/lodash/core.min.js | 29 - .../async/node_modules/lodash/countBy.js | 41 - .../async/node_modules/lodash/create.js | 43 - .../async/node_modules/lodash/curry.js | 57 - .../async/node_modules/lodash/curryRight.js | 54 - .../async/node_modules/lodash/date.js | 3 - .../async/node_modules/lodash/debounce.js | 188 - .../async/node_modules/lodash/deburr.js | 43 - .../async/node_modules/lodash/defaultTo.js | 25 - .../async/node_modules/lodash/defaults.js | 32 - .../async/node_modules/lodash/defaultsDeep.js | 30 - .../async/node_modules/lodash/defer.js | 26 - .../async/node_modules/lodash/delay.js | 28 - .../async/node_modules/lodash/difference.js | 33 - .../async/node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../async/node_modules/lodash/divide.js | 22 - .../async/node_modules/lodash/drop.js | 38 - .../async/node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../async/node_modules/lodash/dropWhile.js | 46 - .../async/node_modules/lodash/each.js | 1 - .../async/node_modules/lodash/eachRight.js | 1 - .../async/node_modules/lodash/endsWith.js | 43 - .../async/node_modules/lodash/entries.js | 1 - .../async/node_modules/lodash/entriesIn.js | 1 - node_modules/async/node_modules/lodash/eq.js | 37 - .../async/node_modules/lodash/escape.js | 43 - .../async/node_modules/lodash/escapeRegExp.js | 32 - .../async/node_modules/lodash/every.js | 57 - .../async/node_modules/lodash/extend.js | 1 - .../async/node_modules/lodash/extendWith.js | 1 - .../async/node_modules/lodash/fill.js | 45 - .../async/node_modules/lodash/filter.js | 49 - .../async/node_modules/lodash/find.js | 43 - .../async/node_modules/lodash/findIndex.js | 56 - .../async/node_modules/lodash/findKey.js | 44 - .../async/node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../async/node_modules/lodash/findLastKey.js | 44 - .../async/node_modules/lodash/first.js | 1 - .../async/node_modules/lodash/flatMap.js | 30 - .../async/node_modules/lodash/flatMapDeep.js | 32 - .../async/node_modules/lodash/flatMapDepth.js | 32 - .../async/node_modules/lodash/flatten.js | 22 - .../async/node_modules/lodash/flattenDeep.js | 25 - .../async/node_modules/lodash/flattenDepth.js | 33 - .../async/node_modules/lodash/flip.js | 28 - .../async/node_modules/lodash/floor.js | 26 - .../async/node_modules/lodash/flow.js | 27 - .../async/node_modules/lodash/flowRight.js | 26 - .../async/node_modules/lodash/forEach.js | 41 - .../async/node_modules/lodash/forEachRight.js | 31 - .../async/node_modules/lodash/forIn.js | 39 - .../async/node_modules/lodash/forInRight.js | 37 - .../async/node_modules/lodash/forOwn.js | 36 - .../async/node_modules/lodash/forOwnRight.js | 34 - node_modules/async/node_modules/lodash/fp.js | 2 - .../async/node_modules/lodash/fp/F.js | 1 - .../async/node_modules/lodash/fp/T.js | 1 - .../async/node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../async/node_modules/lodash/fp/_mapping.js | 367 - .../async/node_modules/lodash/fp/_util.js | 15 - .../async/node_modules/lodash/fp/add.js | 5 - .../async/node_modules/lodash/fp/after.js | 5 - .../async/node_modules/lodash/fp/all.js | 1 - .../async/node_modules/lodash/fp/allPass.js | 1 - .../async/node_modules/lodash/fp/always.js | 1 - .../async/node_modules/lodash/fp/any.js | 1 - .../async/node_modules/lodash/fp/anyPass.js | 1 - .../async/node_modules/lodash/fp/apply.js | 1 - .../async/node_modules/lodash/fp/array.js | 2 - .../async/node_modules/lodash/fp/ary.js | 5 - .../async/node_modules/lodash/fp/assign.js | 5 - .../async/node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../async/node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../async/node_modules/lodash/fp/assoc.js | 1 - .../async/node_modules/lodash/fp/assocPath.js | 1 - .../async/node_modules/lodash/fp/at.js | 5 - .../async/node_modules/lodash/fp/attempt.js | 5 - .../async/node_modules/lodash/fp/before.js | 5 - .../async/node_modules/lodash/fp/bind.js | 5 - .../async/node_modules/lodash/fp/bindAll.js | 5 - .../async/node_modules/lodash/fp/bindKey.js | 5 - .../async/node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../async/node_modules/lodash/fp/castArray.js | 5 - .../async/node_modules/lodash/fp/ceil.js | 5 - .../async/node_modules/lodash/fp/chain.js | 5 - .../async/node_modules/lodash/fp/chunk.js | 5 - .../async/node_modules/lodash/fp/clamp.js | 5 - .../async/node_modules/lodash/fp/clone.js | 5 - .../async/node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../async/node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../async/node_modules/lodash/fp/commit.js | 5 - .../async/node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../async/node_modules/lodash/fp/compose.js | 1 - .../async/node_modules/lodash/fp/concat.js | 5 - .../async/node_modules/lodash/fp/cond.js | 5 - .../async/node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../async/node_modules/lodash/fp/constant.js | 5 - .../async/node_modules/lodash/fp/contains.js | 1 - .../async/node_modules/lodash/fp/convert.js | 18 - .../async/node_modules/lodash/fp/countBy.js | 5 - .../async/node_modules/lodash/fp/create.js | 5 - .../async/node_modules/lodash/fp/curry.js | 5 - .../async/node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../async/node_modules/lodash/fp/date.js | 2 - .../async/node_modules/lodash/fp/debounce.js | 5 - .../async/node_modules/lodash/fp/deburr.js | 5 - .../async/node_modules/lodash/fp/defaultTo.js | 5 - .../async/node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../async/node_modules/lodash/fp/defer.js | 5 - .../async/node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../async/node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../async/node_modules/lodash/fp/divide.js | 5 - .../async/node_modules/lodash/fp/drop.js | 5 - .../async/node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../async/node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../async/node_modules/lodash/fp/dropWhile.js | 5 - .../async/node_modules/lodash/fp/each.js | 1 - .../async/node_modules/lodash/fp/eachRight.js | 1 - .../async/node_modules/lodash/fp/endsWith.js | 5 - .../async/node_modules/lodash/fp/entries.js | 1 - .../async/node_modules/lodash/fp/entriesIn.js | 1 - .../async/node_modules/lodash/fp/eq.js | 5 - .../async/node_modules/lodash/fp/equals.js | 1 - .../async/node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../async/node_modules/lodash/fp/every.js | 5 - .../async/node_modules/lodash/fp/extend.js | 1 - .../async/node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../async/node_modules/lodash/fp/fill.js | 5 - .../async/node_modules/lodash/fp/filter.js | 5 - .../async/node_modules/lodash/fp/find.js | 5 - .../async/node_modules/lodash/fp/findFrom.js | 5 - .../async/node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../async/node_modules/lodash/fp/findKey.js | 5 - .../async/node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../async/node_modules/lodash/fp/first.js | 1 - .../async/node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../async/node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../async/node_modules/lodash/fp/flip.js | 5 - .../async/node_modules/lodash/fp/floor.js | 5 - .../async/node_modules/lodash/fp/flow.js | 5 - .../async/node_modules/lodash/fp/flowRight.js | 5 - .../async/node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../async/node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../async/node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../async/node_modules/lodash/fp/fromPairs.js | 5 - .../async/node_modules/lodash/fp/function.js | 2 - .../async/node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../async/node_modules/lodash/fp/get.js | 5 - .../async/node_modules/lodash/fp/getOr.js | 5 - .../async/node_modules/lodash/fp/groupBy.js | 5 - .../async/node_modules/lodash/fp/gt.js | 5 - .../async/node_modules/lodash/fp/gte.js | 5 - .../async/node_modules/lodash/fp/has.js | 5 - .../async/node_modules/lodash/fp/hasIn.js | 5 - .../async/node_modules/lodash/fp/head.js | 5 - .../async/node_modules/lodash/fp/identical.js | 1 - .../async/node_modules/lodash/fp/identity.js | 5 - .../async/node_modules/lodash/fp/inRange.js | 5 - .../async/node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../async/node_modules/lodash/fp/indexBy.js | 1 - .../async/node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../async/node_modules/lodash/fp/init.js | 1 - .../async/node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../async/node_modules/lodash/fp/invert.js | 5 - .../async/node_modules/lodash/fp/invertBy.js | 5 - .../async/node_modules/lodash/fp/invertObj.js | 1 - .../async/node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../async/node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../async/node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../async/node_modules/lodash/fp/isBoolean.js | 5 - .../async/node_modules/lodash/fp/isBuffer.js | 5 - .../async/node_modules/lodash/fp/isDate.js | 5 - .../async/node_modules/lodash/fp/isElement.js | 5 - .../async/node_modules/lodash/fp/isEmpty.js | 5 - .../async/node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../async/node_modules/lodash/fp/isError.js | 5 - .../async/node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../async/node_modules/lodash/fp/isInteger.js | 5 - .../async/node_modules/lodash/fp/isLength.js | 5 - .../async/node_modules/lodash/fp/isMap.js | 5 - .../async/node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../async/node_modules/lodash/fp/isNaN.js | 5 - .../async/node_modules/lodash/fp/isNative.js | 5 - .../async/node_modules/lodash/fp/isNil.js | 5 - .../async/node_modules/lodash/fp/isNull.js | 5 - .../async/node_modules/lodash/fp/isNumber.js | 5 - .../async/node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../async/node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../async/node_modules/lodash/fp/isSet.js | 5 - .../async/node_modules/lodash/fp/isString.js | 5 - .../async/node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../async/node_modules/lodash/fp/isWeakMap.js | 5 - .../async/node_modules/lodash/fp/isWeakSet.js | 5 - .../async/node_modules/lodash/fp/iteratee.js | 5 - .../async/node_modules/lodash/fp/join.js | 5 - .../async/node_modules/lodash/fp/juxt.js | 1 - .../async/node_modules/lodash/fp/kebabCase.js | 5 - .../async/node_modules/lodash/fp/keyBy.js | 5 - .../async/node_modules/lodash/fp/keys.js | 5 - .../async/node_modules/lodash/fp/keysIn.js | 5 - .../async/node_modules/lodash/fp/lang.js | 2 - .../async/node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../async/node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../async/node_modules/lodash/fp/lt.js | 5 - .../async/node_modules/lodash/fp/lte.js | 5 - .../async/node_modules/lodash/fp/map.js | 5 - .../async/node_modules/lodash/fp/mapKeys.js | 5 - .../async/node_modules/lodash/fp/mapValues.js | 5 - .../async/node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../async/node_modules/lodash/fp/math.js | 2 - .../async/node_modules/lodash/fp/max.js | 5 - .../async/node_modules/lodash/fp/maxBy.js | 5 - .../async/node_modules/lodash/fp/mean.js | 5 - .../async/node_modules/lodash/fp/meanBy.js | 5 - .../async/node_modules/lodash/fp/memoize.js | 5 - .../async/node_modules/lodash/fp/merge.js | 5 - .../async/node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../async/node_modules/lodash/fp/mergeWith.js | 5 - .../async/node_modules/lodash/fp/method.js | 5 - .../async/node_modules/lodash/fp/methodOf.js | 5 - .../async/node_modules/lodash/fp/min.js | 5 - .../async/node_modules/lodash/fp/minBy.js | 5 - .../async/node_modules/lodash/fp/mixin.js | 5 - .../async/node_modules/lodash/fp/multiply.js | 5 - .../async/node_modules/lodash/fp/nAry.js | 1 - .../async/node_modules/lodash/fp/negate.js | 5 - .../async/node_modules/lodash/fp/next.js | 5 - .../async/node_modules/lodash/fp/noop.js | 5 - .../async/node_modules/lodash/fp/now.js | 5 - .../async/node_modules/lodash/fp/nth.js | 5 - .../async/node_modules/lodash/fp/nthArg.js | 5 - .../async/node_modules/lodash/fp/number.js | 2 - .../async/node_modules/lodash/fp/object.js | 2 - .../async/node_modules/lodash/fp/omit.js | 5 - .../async/node_modules/lodash/fp/omitAll.js | 1 - .../async/node_modules/lodash/fp/omitBy.js | 5 - .../async/node_modules/lodash/fp/once.js | 5 - .../async/node_modules/lodash/fp/orderBy.js | 5 - .../async/node_modules/lodash/fp/over.js | 5 - .../async/node_modules/lodash/fp/overArgs.js | 5 - .../async/node_modules/lodash/fp/overEvery.js | 5 - .../async/node_modules/lodash/fp/overSome.js | 5 - .../async/node_modules/lodash/fp/pad.js | 5 - .../async/node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../async/node_modules/lodash/fp/padEnd.js | 5 - .../async/node_modules/lodash/fp/padStart.js | 5 - .../async/node_modules/lodash/fp/parseInt.js | 5 - .../async/node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../async/node_modules/lodash/fp/partition.js | 5 - .../async/node_modules/lodash/fp/path.js | 1 - .../async/node_modules/lodash/fp/pathEq.js | 1 - .../async/node_modules/lodash/fp/pathOr.js | 1 - .../async/node_modules/lodash/fp/paths.js | 1 - .../async/node_modules/lodash/fp/pick.js | 5 - .../async/node_modules/lodash/fp/pickAll.js | 1 - .../async/node_modules/lodash/fp/pickBy.js | 5 - .../async/node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../async/node_modules/lodash/fp/plant.js | 5 - .../async/node_modules/lodash/fp/pluck.js | 1 - .../async/node_modules/lodash/fp/prop.js | 1 - .../async/node_modules/lodash/fp/propEq.js | 1 - .../async/node_modules/lodash/fp/propOr.js | 1 - .../async/node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../async/node_modules/lodash/fp/props.js | 1 - .../async/node_modules/lodash/fp/pull.js | 5 - .../async/node_modules/lodash/fp/pullAll.js | 5 - .../async/node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../async/node_modules/lodash/fp/pullAt.js | 5 - .../async/node_modules/lodash/fp/random.js | 5 - .../async/node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../async/node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../async/node_modules/lodash/fp/rearg.js | 5 - .../async/node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../async/node_modules/lodash/fp/reject.js | 5 - .../async/node_modules/lodash/fp/remove.js | 5 - .../async/node_modules/lodash/fp/repeat.js | 5 - .../async/node_modules/lodash/fp/replace.js | 5 - .../async/node_modules/lodash/fp/rest.js | 5 - .../async/node_modules/lodash/fp/restFrom.js | 5 - .../async/node_modules/lodash/fp/result.js | 5 - .../async/node_modules/lodash/fp/reverse.js | 5 - .../async/node_modules/lodash/fp/round.js | 5 - .../async/node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../async/node_modules/lodash/fp/seq.js | 2 - .../async/node_modules/lodash/fp/set.js | 5 - .../async/node_modules/lodash/fp/setWith.js | 5 - .../async/node_modules/lodash/fp/shuffle.js | 5 - .../async/node_modules/lodash/fp/size.js | 5 - .../async/node_modules/lodash/fp/slice.js | 5 - .../async/node_modules/lodash/fp/snakeCase.js | 5 - .../async/node_modules/lodash/fp/some.js | 5 - .../async/node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../async/node_modules/lodash/fp/split.js | 5 - .../async/node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../async/node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../async/node_modules/lodash/fp/string.js | 2 - .../async/node_modules/lodash/fp/stubArray.js | 5 - .../async/node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../async/node_modules/lodash/fp/stubTrue.js | 5 - .../async/node_modules/lodash/fp/subtract.js | 5 - .../async/node_modules/lodash/fp/sum.js | 5 - .../async/node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../async/node_modules/lodash/fp/tail.js | 5 - .../async/node_modules/lodash/fp/take.js | 5 - .../async/node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../async/node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../async/node_modules/lodash/fp/takeWhile.js | 5 - .../async/node_modules/lodash/fp/tap.js | 5 - .../async/node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../async/node_modules/lodash/fp/throttle.js | 5 - .../async/node_modules/lodash/fp/thru.js | 5 - .../async/node_modules/lodash/fp/times.js | 5 - .../async/node_modules/lodash/fp/toArray.js | 5 - .../async/node_modules/lodash/fp/toFinite.js | 5 - .../async/node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../async/node_modules/lodash/fp/toJSON.js | 5 - .../async/node_modules/lodash/fp/toLength.js | 5 - .../async/node_modules/lodash/fp/toLower.js | 5 - .../async/node_modules/lodash/fp/toNumber.js | 5 - .../async/node_modules/lodash/fp/toPairs.js | 5 - .../async/node_modules/lodash/fp/toPairsIn.js | 5 - .../async/node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../async/node_modules/lodash/fp/toString.js | 5 - .../async/node_modules/lodash/fp/toUpper.js | 5 - .../async/node_modules/lodash/fp/transform.js | 5 - .../async/node_modules/lodash/fp/trim.js | 5 - .../async/node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../async/node_modules/lodash/fp/trimEnd.js | 5 - .../async/node_modules/lodash/fp/trimStart.js | 5 - .../async/node_modules/lodash/fp/truncate.js | 5 - .../async/node_modules/lodash/fp/unapply.js | 1 - .../async/node_modules/lodash/fp/unary.js | 5 - .../async/node_modules/lodash/fp/unescape.js | 5 - .../async/node_modules/lodash/fp/union.js | 5 - .../async/node_modules/lodash/fp/unionBy.js | 5 - .../async/node_modules/lodash/fp/unionWith.js | 5 - .../async/node_modules/lodash/fp/uniq.js | 5 - .../async/node_modules/lodash/fp/uniqBy.js | 5 - .../async/node_modules/lodash/fp/uniqWith.js | 5 - .../async/node_modules/lodash/fp/uniqueId.js | 5 - .../async/node_modules/lodash/fp/unnest.js | 1 - .../async/node_modules/lodash/fp/unset.js | 5 - .../async/node_modules/lodash/fp/unzip.js | 5 - .../async/node_modules/lodash/fp/unzipWith.js | 5 - .../async/node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../async/node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../async/node_modules/lodash/fp/useWith.js | 1 - .../async/node_modules/lodash/fp/util.js | 2 - .../async/node_modules/lodash/fp/value.js | 5 - .../async/node_modules/lodash/fp/valueOf.js | 5 - .../async/node_modules/lodash/fp/values.js | 5 - .../async/node_modules/lodash/fp/valuesIn.js | 5 - .../async/node_modules/lodash/fp/where.js | 1 - .../async/node_modules/lodash/fp/whereEq.js | 1 - .../async/node_modules/lodash/fp/without.js | 5 - .../async/node_modules/lodash/fp/words.js | 5 - .../async/node_modules/lodash/fp/wrap.js | 5 - .../async/node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../async/node_modules/lodash/fp/xor.js | 5 - .../async/node_modules/lodash/fp/xorBy.js | 5 - .../async/node_modules/lodash/fp/xorWith.js | 5 - .../async/node_modules/lodash/fp/zip.js | 5 - .../async/node_modules/lodash/fp/zipAll.js | 5 - .../async/node_modules/lodash/fp/zipObj.js | 1 - .../async/node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../async/node_modules/lodash/fp/zipWith.js | 5 - .../async/node_modules/lodash/fromPairs.js | 28 - .../async/node_modules/lodash/function.js | 25 - .../async/node_modules/lodash/functions.js | 31 - .../async/node_modules/lodash/functionsIn.js | 31 - node_modules/async/node_modules/lodash/get.js | 33 - .../async/node_modules/lodash/groupBy.js | 42 - node_modules/async/node_modules/lodash/gt.js | 29 - node_modules/async/node_modules/lodash/gte.js | 30 - node_modules/async/node_modules/lodash/has.js | 35 - .../async/node_modules/lodash/hasIn.js | 34 - .../async/node_modules/lodash/head.js | 23 - .../async/node_modules/lodash/identity.js | 21 - .../async/node_modules/lodash/inRange.js | 55 - .../async/node_modules/lodash/includes.js | 53 - .../async/node_modules/lodash/index.js | 1 - .../async/node_modules/lodash/indexOf.js | 42 - .../async/node_modules/lodash/initial.js | 22 - .../async/node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../async/node_modules/lodash/invert.js | 27 - .../async/node_modules/lodash/invertBy.js | 44 - .../async/node_modules/lodash/invoke.js | 24 - .../async/node_modules/lodash/invokeMap.js | 44 - .../async/node_modules/lodash/isArguments.js | 36 - .../async/node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../async/node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../async/node_modules/lodash/isBoolean.js | 38 - .../async/node_modules/lodash/isBuffer.js | 38 - .../async/node_modules/lodash/isDate.js | 27 - .../async/node_modules/lodash/isElement.js | 25 - .../async/node_modules/lodash/isEmpty.js | 74 - .../async/node_modules/lodash/isEqual.js | 35 - .../async/node_modules/lodash/isEqualWith.js | 41 - .../async/node_modules/lodash/isError.js | 42 - .../async/node_modules/lodash/isFinite.js | 36 - .../async/node_modules/lodash/isFunction.js | 42 - .../async/node_modules/lodash/isInteger.js | 33 - .../async/node_modules/lodash/isLength.js | 35 - .../async/node_modules/lodash/isMap.js | 27 - .../async/node_modules/lodash/isMatch.js | 36 - .../async/node_modules/lodash/isMatchWith.js | 41 - .../async/node_modules/lodash/isNaN.js | 38 - .../async/node_modules/lodash/isNative.js | 40 - .../async/node_modules/lodash/isNil.js | 25 - .../async/node_modules/lodash/isNull.js | 22 - .../async/node_modules/lodash/isNumber.js | 47 - .../async/node_modules/lodash/isObject.js | 31 - .../async/node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 68 - .../async/node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../async/node_modules/lodash/isSet.js | 27 - .../async/node_modules/lodash/isString.js | 39 - .../async/node_modules/lodash/isSymbol.js | 38 - .../async/node_modules/lodash/isTypedArray.js | 27 - .../async/node_modules/lodash/isUndefined.js | 22 - .../async/node_modules/lodash/isWeakMap.js | 28 - .../async/node_modules/lodash/isWeakSet.js | 37 - .../async/node_modules/lodash/iteratee.js | 50 - .../async/node_modules/lodash/join.js | 26 - .../async/node_modules/lodash/kebabCase.js | 28 - .../async/node_modules/lodash/keyBy.js | 37 - .../async/node_modules/lodash/keys.js | 37 - .../async/node_modules/lodash/keysIn.js | 32 - .../async/node_modules/lodash/lang.js | 58 - .../async/node_modules/lodash/last.js | 20 - .../async/node_modules/lodash/lastIndexOf.js | 46 - .../async/node_modules/lodash/lodash.js | 16982 --------------- .../async/node_modules/lodash/lodash.min.js | 134 - .../async/node_modules/lodash/lowerCase.js | 27 - .../async/node_modules/lodash/lowerFirst.js | 22 - node_modules/async/node_modules/lodash/lt.js | 29 - node_modules/async/node_modules/lodash/lte.js | 30 - node_modules/async/node_modules/lodash/map.js | 53 - .../async/node_modules/lodash/mapKeys.js | 36 - .../async/node_modules/lodash/mapValues.js | 43 - .../async/node_modules/lodash/matches.js | 36 - .../node_modules/lodash/matchesProperty.js | 34 - .../async/node_modules/lodash/math.js | 17 - node_modules/async/node_modules/lodash/max.js | 29 - .../async/node_modules/lodash/maxBy.js | 34 - .../async/node_modules/lodash/mean.js | 22 - .../async/node_modules/lodash/meanBy.js | 31 - .../async/node_modules/lodash/memoize.js | 73 - .../async/node_modules/lodash/merge.js | 39 - .../async/node_modules/lodash/mergeWith.js | 39 - .../async/node_modules/lodash/method.js | 34 - .../async/node_modules/lodash/methodOf.js | 33 - node_modules/async/node_modules/lodash/min.js | 29 - .../async/node_modules/lodash/minBy.js | 34 - .../async/node_modules/lodash/mixin.js | 74 - .../async/node_modules/lodash/multiply.js | 22 - .../async/node_modules/lodash/negate.js | 40 - .../async/node_modules/lodash/next.js | 35 - .../async/node_modules/lodash/noop.js | 17 - node_modules/async/node_modules/lodash/now.js | 23 - node_modules/async/node_modules/lodash/nth.js | 29 - .../async/node_modules/lodash/nthArg.js | 32 - .../async/node_modules/lodash/number.js | 5 - .../async/node_modules/lodash/object.js | 49 - .../async/node_modules/lodash/omit.js | 35 - .../async/node_modules/lodash/omitBy.js | 29 - .../async/node_modules/lodash/once.js | 25 - .../async/node_modules/lodash/orderBy.js | 47 - .../async/node_modules/lodash/over.js | 24 - .../async/node_modules/lodash/overArgs.js | 61 - .../async/node_modules/lodash/overEvery.js | 30 - .../async/node_modules/lodash/overSome.js | 30 - .../async/node_modules/lodash/package.json | 115 - node_modules/async/node_modules/lodash/pad.js | 49 - .../async/node_modules/lodash/padEnd.js | 39 - .../async/node_modules/lodash/padStart.js | 39 - .../async/node_modules/lodash/parseInt.js | 43 - .../async/node_modules/lodash/partial.js | 50 - .../async/node_modules/lodash/partialRight.js | 49 - .../async/node_modules/lodash/partition.js | 43 - .../async/node_modules/lodash/pick.js | 27 - .../async/node_modules/lodash/pickBy.js | 27 - .../async/node_modules/lodash/plant.js | 48 - .../async/node_modules/lodash/property.js | 32 - .../async/node_modules/lodash/propertyOf.js | 30 - .../async/node_modules/lodash/pull.js | 29 - .../async/node_modules/lodash/pullAll.js | 29 - .../async/node_modules/lodash/pullAllBy.js | 34 - .../async/node_modules/lodash/pullAllWith.js | 32 - .../async/node_modules/lodash/pullAt.js | 43 - .../async/node_modules/lodash/random.js | 82 - .../async/node_modules/lodash/range.js | 46 - .../async/node_modules/lodash/rangeRight.js | 41 - .../async/node_modules/lodash/rearg.js | 33 - .../async/node_modules/lodash/reduce.js | 51 - .../async/node_modules/lodash/reduceRight.js | 36 - .../async/node_modules/lodash/reject.js | 46 - .../async/node_modules/lodash/remove.js | 54 - .../async/node_modules/lodash/repeat.js | 37 - .../async/node_modules/lodash/replace.js | 29 - .../async/node_modules/lodash/rest.js | 40 - .../async/node_modules/lodash/result.js | 57 - .../async/node_modules/lodash/reverse.js | 34 - .../async/node_modules/lodash/round.js | 26 - .../async/node_modules/lodash/sample.js | 24 - .../async/node_modules/lodash/sampleSize.js | 37 - node_modules/async/node_modules/lodash/seq.js | 16 - node_modules/async/node_modules/lodash/set.js | 35 - .../async/node_modules/lodash/setWith.js | 32 - .../async/node_modules/lodash/shuffle.js | 25 - .../async/node_modules/lodash/size.js | 46 - .../async/node_modules/lodash/slice.js | 37 - .../async/node_modules/lodash/snakeCase.js | 28 - .../async/node_modules/lodash/some.js | 51 - .../async/node_modules/lodash/sortBy.js | 48 - .../async/node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../async/node_modules/lodash/sortedUniq.js | 24 - .../async/node_modules/lodash/sortedUniqBy.js | 26 - .../async/node_modules/lodash/split.js | 52 - .../async/node_modules/lodash/spread.js | 63 - .../async/node_modules/lodash/startCase.js | 29 - .../async/node_modules/lodash/startsWith.js | 36 - .../async/node_modules/lodash/string.js | 33 - .../async/node_modules/lodash/stubArray.js | 23 - .../async/node_modules/lodash/stubFalse.js | 18 - .../async/node_modules/lodash/stubObject.js | 23 - .../async/node_modules/lodash/stubString.js | 18 - .../async/node_modules/lodash/stubTrue.js | 18 - .../async/node_modules/lodash/subtract.js | 22 - node_modules/async/node_modules/lodash/sum.js | 24 - .../async/node_modules/lodash/sumBy.js | 33 - .../async/node_modules/lodash/tail.js | 22 - .../async/node_modules/lodash/take.js | 37 - .../async/node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../async/node_modules/lodash/takeWhile.js | 46 - node_modules/async/node_modules/lodash/tap.js | 29 - .../async/node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../async/node_modules/lodash/throttle.js | 69 - .../async/node_modules/lodash/thru.js | 28 - .../async/node_modules/lodash/times.js | 51 - .../async/node_modules/lodash/toArray.js | 58 - .../async/node_modules/lodash/toFinite.js | 42 - .../async/node_modules/lodash/toInteger.js | 36 - .../async/node_modules/lodash/toIterator.js | 23 - .../async/node_modules/lodash/toJSON.js | 1 - .../async/node_modules/lodash/toLength.js | 38 - .../async/node_modules/lodash/toLower.js | 28 - .../async/node_modules/lodash/toNumber.js | 66 - .../async/node_modules/lodash/toPairs.js | 30 - .../async/node_modules/lodash/toPairsIn.js | 30 - .../async/node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../async/node_modules/lodash/toString.js | 28 - .../async/node_modules/lodash/toUpper.js | 28 - .../async/node_modules/lodash/transform.js | 65 - .../async/node_modules/lodash/trim.js | 49 - .../async/node_modules/lodash/trimEnd.js | 43 - .../async/node_modules/lodash/trimStart.js | 43 - .../async/node_modules/lodash/truncate.js | 111 - .../async/node_modules/lodash/unary.js | 22 - .../async/node_modules/lodash/unescape.js | 34 - .../async/node_modules/lodash/union.js | 26 - .../async/node_modules/lodash/unionBy.js | 40 - .../async/node_modules/lodash/unionWith.js | 36 - .../async/node_modules/lodash/uniq.js | 27 - .../async/node_modules/lodash/uniqBy.js | 34 - .../async/node_modules/lodash/uniqWith.js | 29 - .../async/node_modules/lodash/uniqueId.js | 28 - .../async/node_modules/lodash/unset.js | 34 - .../async/node_modules/lodash/unzip.js | 45 - .../async/node_modules/lodash/unzipWith.js | 39 - .../async/node_modules/lodash/update.js | 35 - .../async/node_modules/lodash/updateWith.js | 33 - .../async/node_modules/lodash/upperCase.js | 27 - .../async/node_modules/lodash/upperFirst.js | 22 - .../async/node_modules/lodash/util.js | 34 - .../async/node_modules/lodash/value.js | 1 - .../async/node_modules/lodash/valueOf.js | 1 - .../async/node_modules/lodash/values.js | 34 - .../async/node_modules/lodash/valuesIn.js | 32 - .../async/node_modules/lodash/without.js | 31 - .../async/node_modules/lodash/words.js | 35 - .../async/node_modules/lodash/wrap.js | 31 - .../async/node_modules/lodash/wrapperAt.js | 48 - .../async/node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../async/node_modules/lodash/wrapperValue.js | 21 - node_modules/async/node_modules/lodash/xor.js | 28 - .../async/node_modules/lodash/xorBy.js | 40 - .../async/node_modules/lodash/xorWith.js | 36 - node_modules/async/node_modules/lodash/zip.js | 22 - .../async/node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../async/node_modules/lodash/zipWith.js | 31 - node_modules/async/package.json | 190 +- node_modules/async/priorityQueue.js | 10 +- node_modules/async/race.js | 12 +- node_modules/async/reflect.js | 6 +- node_modules/async/retry.js | 20 +- node_modules/async/seq.js | 10 +- node_modules/async/timeout.js | 27 +- node_modules/async/unmemoize.js | 2 +- node_modules/async/waterfall.js | 6 +- node_modules/async/whilst.js | 14 +- node_modules/babel-code-frame/package.json | 105 +- .../babel-generator/lib/generators/classes.js | 1 + .../babel-generator/lib/generators/flow.js | 24 +- .../lib/generators/statements.js | 2 +- .../babel-generator/lib/node/parentheses.js | 2 +- .../babel-generator/lib/node/whitespace.js | 2 +- node_modules/babel-generator/lib/printer.js | 14 +- .../babel-generator/node_modules/.bin/jsesc | 1 + .../node_modules/lodash/LICENSE | 47 - .../node_modules/lodash/README.md | 39 - .../node_modules/lodash/_DataView.js | 7 - .../node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_LazyWrapper.js | 28 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../node_modules/lodash/_Map.js | 7 - .../node_modules/lodash/_MapCache.js | 32 - .../node_modules/lodash/_Promise.js | 7 - .../node_modules/lodash/_Set.js | 7 - .../node_modules/lodash/_SetCache.js | 27 - .../node_modules/lodash/_Stack.js | 27 - .../node_modules/lodash/_Symbol.js | 6 - .../node_modules/lodash/_Uint8Array.js | 6 - .../node_modules/lodash/_WeakMap.js | 7 - .../node_modules/lodash/_addMapEntry.js | 15 - .../node_modules/lodash/_addSetEntry.js | 15 - .../node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayPush.js | 20 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseClamp.js | 22 - .../node_modules/lodash/_baseClone.js | 133 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../node_modules/lodash/_baseCreate.js | 30 - .../node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../node_modules/lodash/_baseFill.js | 32 - .../node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../node_modules/lodash/_baseFindKey.js | 23 - .../node_modules/lodash/_baseFlatten.js | 38 - .../node_modules/lodash/_baseFor.js | 16 - .../node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../node_modules/lodash/_baseGetTag.js | 22 - .../node_modules/lodash/_baseGt.js | 14 - .../node_modules/lodash/_baseHas.js | 19 - .../node_modules/lodash/_baseHasIn.js | 13 - .../node_modules/lodash/_baseInRange.js | 18 - .../node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../node_modules/lodash/_baseInvoke.js | 28 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../node_modules/lodash/_baseIsDate.js | 27 - .../node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 89 - .../node_modules/lodash/_baseIsMap.js | 18 - .../node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseIteratee.js | 31 - .../node_modules/lodash/_baseKeys.js | 30 - .../node_modules/lodash/_baseKeysIn.js | 33 - .../node_modules/lodash/_baseLodash.js | 10 - .../node_modules/lodash/_baseLt.js | 14 - .../node_modules/lodash/_baseMap.js | 22 - .../node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../node_modules/lodash/_baseNth.js | 20 - .../node_modules/lodash/_baseOrderBy.js | 34 - .../node_modules/lodash/_basePick.js | 19 - .../node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../node_modules/lodash/_basePullAll.js | 51 - .../node_modules/lodash/_basePullAt.js | 50 - .../node_modules/lodash/_baseRandom.js | 18 - .../node_modules/lodash/_baseRange.js | 28 - .../node_modules/lodash/_baseReduce.js | 23 - .../node_modules/lodash/_baseRepeat.js | 35 - .../node_modules/lodash/_baseRest.js | 17 - .../node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../node_modules/lodash/_baseSet.js | 48 - .../node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../node_modules/lodash/_baseShuffle.js | 15 - .../node_modules/lodash/_baseSlice.js | 31 - .../node_modules/lodash/_baseSome.js | 22 - .../node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../node_modules/lodash/_baseSum.js | 24 - .../node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../node_modules/lodash/_baseUnary.js | 14 - .../node_modules/lodash/_baseUniq.js | 72 - .../node_modules/lodash/_baseUnset.js | 29 - .../node_modules/lodash/_baseUpdate.js | 18 - .../node_modules/lodash/_baseValues.js | 19 - .../node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../node_modules/lodash/_castPath.js | 15 - .../node_modules/lodash/_castRest.js | 14 - .../node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../node_modules/lodash/_cloneMap.js | 19 - .../node_modules/lodash/_cloneRegExp.js | 17 - .../node_modules/lodash/_cloneSet.js | 19 - .../node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../node_modules/lodash/_copyArray.js | 20 - .../node_modules/lodash/_copyObject.js | 40 - .../node_modules/lodash/_copySymbols.js | 16 - .../node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtor.js | 37 - .../node_modules/lodash/_createCurry.js | 46 - .../node_modules/lodash/_createFind.js | 25 - .../node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../node_modules/lodash/_createRound.js | 33 - .../node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrap.js | 107 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../node_modules/lodash/_equalArrays.js | 84 - .../node_modules/lodash/_equalByTag.js | 113 - .../node_modules/lodash/_equalObjects.js | 90 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../node_modules/lodash/_flatRest.js | 16 - .../node_modules/lodash/_freeGlobal.js | 4 - .../node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../node_modules/lodash/_getData.js | 15 - .../node_modules/lodash/_getFuncName.js | 31 - .../node_modules/lodash/_getHolder.js | 13 - .../node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 26 - .../node_modules/lodash/_getTag.js | 68 - .../node_modules/lodash/_getValue.js | 13 - .../node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../node_modules/lodash/_hasPath.js | 40 - .../node_modules/lodash/_hasUnicode.js | 24 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../node_modules/lodash/_hashClear.js | 15 - .../node_modules/lodash/_hashDelete.js | 17 - .../node_modules/lodash/_hashGet.js | 30 - .../node_modules/lodash/_hashHas.js | 23 - .../node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../node_modules/lodash/_isKey.js | 29 - .../node_modules/lodash/_isKeyable.js | 15 - .../node_modules/lodash/_isLaziable.js | 28 - .../node_modules/lodash/_isMaskable.js | 14 - .../node_modules/lodash/_isMasked.js | 20 - .../node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../node_modules/lodash/_lazyClone.js | 23 - .../node_modules/lodash/_lazyReverse.js | 23 - .../node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../node_modules/lodash/_mapCacheGet.js | 16 - .../node_modules/lodash/_mapCacheHas.js | 16 - .../node_modules/lodash/_mapCacheSet.js | 22 - .../node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../node_modules/lodash/_nodeUtil.js | 22 - .../node_modules/lodash/_overArg.js | 15 - .../node_modules/lodash/_overRest.js | 36 - .../node_modules/lodash/_parent.js | 16 - .../node_modules/lodash/_reEscape.js | 4 - .../node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../node_modules/lodash/_realNames.js | 4 - .../node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../node_modules/lodash/_root.js | 9 - .../node_modules/lodash/_setCacheAdd.js | 19 - .../node_modules/lodash/_setCacheHas.js | 14 - .../node_modules/lodash/_setData.js | 20 - .../node_modules/lodash/_setToArray.js | 18 - .../node_modules/lodash/_setToPairs.js | 18 - .../node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_shuffleSelf.js | 28 - .../node_modules/lodash/_stackClear.js | 15 - .../node_modules/lodash/_stackDelete.js | 18 - .../node_modules/lodash/_stackGet.js | 14 - .../node_modules/lodash/_stackHas.js | 14 - .../node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 31 - .../node_modules/lodash/_toKey.js | 21 - .../node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../node_modules/lodash/_unicodeSize.js | 42 - .../node_modules/lodash/_unicodeToArray.js | 38 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - .../node_modules/lodash/add.js | 22 - .../node_modules/lodash/after.js | 42 - .../node_modules/lodash/array.js | 67 - .../node_modules/lodash/ary.js | 29 - .../node_modules/lodash/assign.js | 58 - .../node_modules/lodash/assignIn.js | 40 - .../node_modules/lodash/assignInWith.js | 38 - .../node_modules/lodash/assignWith.js | 37 - .../babel-generator/node_modules/lodash/at.js | 23 - .../node_modules/lodash/attempt.js | 35 - .../node_modules/lodash/before.js | 40 - .../node_modules/lodash/bind.js | 57 - .../node_modules/lodash/bindAll.js | 41 - .../node_modules/lodash/bindKey.js | 68 - .../node_modules/lodash/camelCase.js | 29 - .../node_modules/lodash/capitalize.js | 23 - .../node_modules/lodash/castArray.js | 44 - .../node_modules/lodash/ceil.js | 26 - .../node_modules/lodash/chain.js | 38 - .../node_modules/lodash/chunk.js | 50 - .../node_modules/lodash/clamp.js | 39 - .../node_modules/lodash/clone.js | 33 - .../node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../node_modules/lodash/cloneWith.js | 38 - .../node_modules/lodash/collection.js | 30 - .../node_modules/lodash/commit.js | 33 - .../node_modules/lodash/compact.js | 31 - .../node_modules/lodash/concat.js | 43 - .../node_modules/lodash/cond.js | 60 - .../node_modules/lodash/conforms.js | 32 - .../node_modules/lodash/conformsTo.js | 32 - .../node_modules/lodash/constant.js | 26 - .../node_modules/lodash/core.js | 3831 ---- .../node_modules/lodash/core.min.js | 29 - .../node_modules/lodash/countBy.js | 41 - .../node_modules/lodash/create.js | 43 - .../node_modules/lodash/curry.js | 57 - .../node_modules/lodash/curryRight.js | 54 - .../node_modules/lodash/date.js | 3 - .../node_modules/lodash/debounce.js | 188 - .../node_modules/lodash/deburr.js | 43 - .../node_modules/lodash/defaultTo.js | 25 - .../node_modules/lodash/defaults.js | 32 - .../node_modules/lodash/defaultsDeep.js | 30 - .../node_modules/lodash/defer.js | 26 - .../node_modules/lodash/delay.js | 28 - .../node_modules/lodash/difference.js | 33 - .../node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../node_modules/lodash/divide.js | 22 - .../node_modules/lodash/drop.js | 38 - .../node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../node_modules/lodash/dropWhile.js | 46 - .../node_modules/lodash/each.js | 1 - .../node_modules/lodash/eachRight.js | 1 - .../node_modules/lodash/endsWith.js | 43 - .../node_modules/lodash/entries.js | 1 - .../node_modules/lodash/entriesIn.js | 1 - .../babel-generator/node_modules/lodash/eq.js | 37 - .../node_modules/lodash/escape.js | 43 - .../node_modules/lodash/escapeRegExp.js | 32 - .../node_modules/lodash/every.js | 57 - .../node_modules/lodash/extend.js | 1 - .../node_modules/lodash/extendWith.js | 1 - .../node_modules/lodash/fill.js | 45 - .../node_modules/lodash/filter.js | 49 - .../node_modules/lodash/find.js | 43 - .../node_modules/lodash/findIndex.js | 56 - .../node_modules/lodash/findKey.js | 44 - .../node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../node_modules/lodash/findLastKey.js | 44 - .../node_modules/lodash/first.js | 1 - .../node_modules/lodash/flatMap.js | 30 - .../node_modules/lodash/flatMapDeep.js | 32 - .../node_modules/lodash/flatMapDepth.js | 32 - .../node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../node_modules/lodash/flip.js | 28 - .../node_modules/lodash/floor.js | 26 - .../node_modules/lodash/flow.js | 27 - .../node_modules/lodash/flowRight.js | 26 - .../node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../babel-generator/node_modules/lodash/fp.js | 2 - .../node_modules/lodash/fp/F.js | 1 - .../node_modules/lodash/fp/T.js | 1 - .../node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../node_modules/lodash/fp/_mapping.js | 367 - .../node_modules/lodash/fp/_util.js | 15 - .../node_modules/lodash/fp/add.js | 5 - .../node_modules/lodash/fp/after.js | 5 - .../node_modules/lodash/fp/all.js | 1 - .../node_modules/lodash/fp/allPass.js | 1 - .../node_modules/lodash/fp/always.js | 1 - .../node_modules/lodash/fp/any.js | 1 - .../node_modules/lodash/fp/anyPass.js | 1 - .../node_modules/lodash/fp/apply.js | 1 - .../node_modules/lodash/fp/array.js | 2 - .../node_modules/lodash/fp/ary.js | 5 - .../node_modules/lodash/fp/assign.js | 5 - .../node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../node_modules/lodash/fp/assoc.js | 1 - .../node_modules/lodash/fp/assocPath.js | 1 - .../node_modules/lodash/fp/at.js | 5 - .../node_modules/lodash/fp/attempt.js | 5 - .../node_modules/lodash/fp/before.js | 5 - .../node_modules/lodash/fp/bind.js | 5 - .../node_modules/lodash/fp/bindAll.js | 5 - .../node_modules/lodash/fp/bindKey.js | 5 - .../node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../node_modules/lodash/fp/castArray.js | 5 - .../node_modules/lodash/fp/ceil.js | 5 - .../node_modules/lodash/fp/chain.js | 5 - .../node_modules/lodash/fp/chunk.js | 5 - .../node_modules/lodash/fp/clamp.js | 5 - .../node_modules/lodash/fp/clone.js | 5 - .../node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../node_modules/lodash/fp/commit.js | 5 - .../node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../node_modules/lodash/fp/compose.js | 1 - .../node_modules/lodash/fp/concat.js | 5 - .../node_modules/lodash/fp/cond.js | 5 - .../node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../node_modules/lodash/fp/constant.js | 5 - .../node_modules/lodash/fp/contains.js | 1 - .../node_modules/lodash/fp/convert.js | 18 - .../node_modules/lodash/fp/countBy.js | 5 - .../node_modules/lodash/fp/create.js | 5 - .../node_modules/lodash/fp/curry.js | 5 - .../node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../node_modules/lodash/fp/date.js | 2 - .../node_modules/lodash/fp/debounce.js | 5 - .../node_modules/lodash/fp/deburr.js | 5 - .../node_modules/lodash/fp/defaultTo.js | 5 - .../node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../node_modules/lodash/fp/defer.js | 5 - .../node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../node_modules/lodash/fp/divide.js | 5 - .../node_modules/lodash/fp/drop.js | 5 - .../node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../node_modules/lodash/fp/dropWhile.js | 5 - .../node_modules/lodash/fp/each.js | 1 - .../node_modules/lodash/fp/eachRight.js | 1 - .../node_modules/lodash/fp/endsWith.js | 5 - .../node_modules/lodash/fp/entries.js | 1 - .../node_modules/lodash/fp/entriesIn.js | 1 - .../node_modules/lodash/fp/eq.js | 5 - .../node_modules/lodash/fp/equals.js | 1 - .../node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../node_modules/lodash/fp/every.js | 5 - .../node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../node_modules/lodash/fp/fill.js | 5 - .../node_modules/lodash/fp/filter.js | 5 - .../node_modules/lodash/fp/find.js | 5 - .../node_modules/lodash/fp/findFrom.js | 5 - .../node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../node_modules/lodash/fp/findKey.js | 5 - .../node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../node_modules/lodash/fp/first.js | 1 - .../node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../node_modules/lodash/fp/flip.js | 5 - .../node_modules/lodash/fp/floor.js | 5 - .../node_modules/lodash/fp/flow.js | 5 - .../node_modules/lodash/fp/flowRight.js | 5 - .../node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../node_modules/lodash/fp/fromPairs.js | 5 - .../node_modules/lodash/fp/function.js | 2 - .../node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../node_modules/lodash/fp/get.js | 5 - .../node_modules/lodash/fp/getOr.js | 5 - .../node_modules/lodash/fp/groupBy.js | 5 - .../node_modules/lodash/fp/gt.js | 5 - .../node_modules/lodash/fp/gte.js | 5 - .../node_modules/lodash/fp/has.js | 5 - .../node_modules/lodash/fp/hasIn.js | 5 - .../node_modules/lodash/fp/head.js | 5 - .../node_modules/lodash/fp/identical.js | 1 - .../node_modules/lodash/fp/identity.js | 5 - .../node_modules/lodash/fp/inRange.js | 5 - .../node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../node_modules/lodash/fp/indexBy.js | 1 - .../node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../node_modules/lodash/fp/init.js | 1 - .../node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../node_modules/lodash/fp/invert.js | 5 - .../node_modules/lodash/fp/invertBy.js | 5 - .../node_modules/lodash/fp/invertObj.js | 1 - .../node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../node_modules/lodash/fp/isBoolean.js | 5 - .../node_modules/lodash/fp/isBuffer.js | 5 - .../node_modules/lodash/fp/isDate.js | 5 - .../node_modules/lodash/fp/isElement.js | 5 - .../node_modules/lodash/fp/isEmpty.js | 5 - .../node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../node_modules/lodash/fp/isError.js | 5 - .../node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../node_modules/lodash/fp/isInteger.js | 5 - .../node_modules/lodash/fp/isLength.js | 5 - .../node_modules/lodash/fp/isMap.js | 5 - .../node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../node_modules/lodash/fp/isNaN.js | 5 - .../node_modules/lodash/fp/isNative.js | 5 - .../node_modules/lodash/fp/isNil.js | 5 - .../node_modules/lodash/fp/isNull.js | 5 - .../node_modules/lodash/fp/isNumber.js | 5 - .../node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../node_modules/lodash/fp/isSet.js | 5 - .../node_modules/lodash/fp/isString.js | 5 - .../node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../node_modules/lodash/fp/isWeakMap.js | 5 - .../node_modules/lodash/fp/isWeakSet.js | 5 - .../node_modules/lodash/fp/iteratee.js | 5 - .../node_modules/lodash/fp/join.js | 5 - .../node_modules/lodash/fp/juxt.js | 1 - .../node_modules/lodash/fp/kebabCase.js | 5 - .../node_modules/lodash/fp/keyBy.js | 5 - .../node_modules/lodash/fp/keys.js | 5 - .../node_modules/lodash/fp/keysIn.js | 5 - .../node_modules/lodash/fp/lang.js | 2 - .../node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../node_modules/lodash/fp/lt.js | 5 - .../node_modules/lodash/fp/lte.js | 5 - .../node_modules/lodash/fp/map.js | 5 - .../node_modules/lodash/fp/mapKeys.js | 5 - .../node_modules/lodash/fp/mapValues.js | 5 - .../node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../node_modules/lodash/fp/math.js | 2 - .../node_modules/lodash/fp/max.js | 5 - .../node_modules/lodash/fp/maxBy.js | 5 - .../node_modules/lodash/fp/mean.js | 5 - .../node_modules/lodash/fp/meanBy.js | 5 - .../node_modules/lodash/fp/memoize.js | 5 - .../node_modules/lodash/fp/merge.js | 5 - .../node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../node_modules/lodash/fp/mergeWith.js | 5 - .../node_modules/lodash/fp/method.js | 5 - .../node_modules/lodash/fp/methodOf.js | 5 - .../node_modules/lodash/fp/min.js | 5 - .../node_modules/lodash/fp/minBy.js | 5 - .../node_modules/lodash/fp/mixin.js | 5 - .../node_modules/lodash/fp/multiply.js | 5 - .../node_modules/lodash/fp/nAry.js | 1 - .../node_modules/lodash/fp/negate.js | 5 - .../node_modules/lodash/fp/next.js | 5 - .../node_modules/lodash/fp/noop.js | 5 - .../node_modules/lodash/fp/now.js | 5 - .../node_modules/lodash/fp/nth.js | 5 - .../node_modules/lodash/fp/nthArg.js | 5 - .../node_modules/lodash/fp/number.js | 2 - .../node_modules/lodash/fp/object.js | 2 - .../node_modules/lodash/fp/omit.js | 5 - .../node_modules/lodash/fp/omitAll.js | 1 - .../node_modules/lodash/fp/omitBy.js | 5 - .../node_modules/lodash/fp/once.js | 5 - .../node_modules/lodash/fp/orderBy.js | 5 - .../node_modules/lodash/fp/over.js | 5 - .../node_modules/lodash/fp/overArgs.js | 5 - .../node_modules/lodash/fp/overEvery.js | 5 - .../node_modules/lodash/fp/overSome.js | 5 - .../node_modules/lodash/fp/pad.js | 5 - .../node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../node_modules/lodash/fp/padEnd.js | 5 - .../node_modules/lodash/fp/padStart.js | 5 - .../node_modules/lodash/fp/parseInt.js | 5 - .../node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../node_modules/lodash/fp/partition.js | 5 - .../node_modules/lodash/fp/path.js | 1 - .../node_modules/lodash/fp/pathEq.js | 1 - .../node_modules/lodash/fp/pathOr.js | 1 - .../node_modules/lodash/fp/paths.js | 1 - .../node_modules/lodash/fp/pick.js | 5 - .../node_modules/lodash/fp/pickAll.js | 1 - .../node_modules/lodash/fp/pickBy.js | 5 - .../node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../node_modules/lodash/fp/plant.js | 5 - .../node_modules/lodash/fp/pluck.js | 1 - .../node_modules/lodash/fp/prop.js | 1 - .../node_modules/lodash/fp/propEq.js | 1 - .../node_modules/lodash/fp/propOr.js | 1 - .../node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../node_modules/lodash/fp/props.js | 1 - .../node_modules/lodash/fp/pull.js | 5 - .../node_modules/lodash/fp/pullAll.js | 5 - .../node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../node_modules/lodash/fp/pullAt.js | 5 - .../node_modules/lodash/fp/random.js | 5 - .../node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../node_modules/lodash/fp/rearg.js | 5 - .../node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../node_modules/lodash/fp/reject.js | 5 - .../node_modules/lodash/fp/remove.js | 5 - .../node_modules/lodash/fp/repeat.js | 5 - .../node_modules/lodash/fp/replace.js | 5 - .../node_modules/lodash/fp/rest.js | 5 - .../node_modules/lodash/fp/restFrom.js | 5 - .../node_modules/lodash/fp/result.js | 5 - .../node_modules/lodash/fp/reverse.js | 5 - .../node_modules/lodash/fp/round.js | 5 - .../node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../node_modules/lodash/fp/seq.js | 2 - .../node_modules/lodash/fp/set.js | 5 - .../node_modules/lodash/fp/setWith.js | 5 - .../node_modules/lodash/fp/shuffle.js | 5 - .../node_modules/lodash/fp/size.js | 5 - .../node_modules/lodash/fp/slice.js | 5 - .../node_modules/lodash/fp/snakeCase.js | 5 - .../node_modules/lodash/fp/some.js | 5 - .../node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../node_modules/lodash/fp/split.js | 5 - .../node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../node_modules/lodash/fp/string.js | 2 - .../node_modules/lodash/fp/stubArray.js | 5 - .../node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../node_modules/lodash/fp/stubTrue.js | 5 - .../node_modules/lodash/fp/subtract.js | 5 - .../node_modules/lodash/fp/sum.js | 5 - .../node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../node_modules/lodash/fp/tail.js | 5 - .../node_modules/lodash/fp/take.js | 5 - .../node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../node_modules/lodash/fp/takeWhile.js | 5 - .../node_modules/lodash/fp/tap.js | 5 - .../node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../node_modules/lodash/fp/throttle.js | 5 - .../node_modules/lodash/fp/thru.js | 5 - .../node_modules/lodash/fp/times.js | 5 - .../node_modules/lodash/fp/toArray.js | 5 - .../node_modules/lodash/fp/toFinite.js | 5 - .../node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../node_modules/lodash/fp/toJSON.js | 5 - .../node_modules/lodash/fp/toLength.js | 5 - .../node_modules/lodash/fp/toLower.js | 5 - .../node_modules/lodash/fp/toNumber.js | 5 - .../node_modules/lodash/fp/toPairs.js | 5 - .../node_modules/lodash/fp/toPairsIn.js | 5 - .../node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../node_modules/lodash/fp/toString.js | 5 - .../node_modules/lodash/fp/toUpper.js | 5 - .../node_modules/lodash/fp/transform.js | 5 - .../node_modules/lodash/fp/trim.js | 5 - .../node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../node_modules/lodash/fp/trimEnd.js | 5 - .../node_modules/lodash/fp/trimStart.js | 5 - .../node_modules/lodash/fp/truncate.js | 5 - .../node_modules/lodash/fp/unapply.js | 1 - .../node_modules/lodash/fp/unary.js | 5 - .../node_modules/lodash/fp/unescape.js | 5 - .../node_modules/lodash/fp/union.js | 5 - .../node_modules/lodash/fp/unionBy.js | 5 - .../node_modules/lodash/fp/unionWith.js | 5 - .../node_modules/lodash/fp/uniq.js | 5 - .../node_modules/lodash/fp/uniqBy.js | 5 - .../node_modules/lodash/fp/uniqWith.js | 5 - .../node_modules/lodash/fp/uniqueId.js | 5 - .../node_modules/lodash/fp/unnest.js | 1 - .../node_modules/lodash/fp/unset.js | 5 - .../node_modules/lodash/fp/unzip.js | 5 - .../node_modules/lodash/fp/unzipWith.js | 5 - .../node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../node_modules/lodash/fp/useWith.js | 1 - .../node_modules/lodash/fp/util.js | 2 - .../node_modules/lodash/fp/value.js | 5 - .../node_modules/lodash/fp/valueOf.js | 5 - .../node_modules/lodash/fp/values.js | 5 - .../node_modules/lodash/fp/valuesIn.js | 5 - .../node_modules/lodash/fp/where.js | 1 - .../node_modules/lodash/fp/whereEq.js | 1 - .../node_modules/lodash/fp/without.js | 5 - .../node_modules/lodash/fp/words.js | 5 - .../node_modules/lodash/fp/wrap.js | 5 - .../node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../node_modules/lodash/fp/xor.js | 5 - .../node_modules/lodash/fp/xorBy.js | 5 - .../node_modules/lodash/fp/xorWith.js | 5 - .../node_modules/lodash/fp/zip.js | 5 - .../node_modules/lodash/fp/zipAll.js | 5 - .../node_modules/lodash/fp/zipObj.js | 1 - .../node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../node_modules/lodash/fp/zipWith.js | 5 - .../node_modules/lodash/fromPairs.js | 28 - .../node_modules/lodash/function.js | 25 - .../node_modules/lodash/functions.js | 31 - .../node_modules/lodash/functionsIn.js | 31 - .../node_modules/lodash/get.js | 33 - .../node_modules/lodash/groupBy.js | 42 - .../babel-generator/node_modules/lodash/gt.js | 29 - .../node_modules/lodash/gte.js | 30 - .../node_modules/lodash/has.js | 35 - .../node_modules/lodash/hasIn.js | 34 - .../node_modules/lodash/head.js | 23 - .../node_modules/lodash/identity.js | 21 - .../node_modules/lodash/inRange.js | 55 - .../node_modules/lodash/includes.js | 53 - .../node_modules/lodash/index.js | 1 - .../node_modules/lodash/indexOf.js | 42 - .../node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../node_modules/lodash/invert.js | 27 - .../node_modules/lodash/invertBy.js | 44 - .../node_modules/lodash/invoke.js | 24 - .../node_modules/lodash/invokeMap.js | 44 - .../node_modules/lodash/isArguments.js | 36 - .../node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../node_modules/lodash/isBoolean.js | 38 - .../node_modules/lodash/isBuffer.js | 38 - .../node_modules/lodash/isDate.js | 27 - .../node_modules/lodash/isElement.js | 25 - .../node_modules/lodash/isEmpty.js | 74 - .../node_modules/lodash/isEqual.js | 35 - .../node_modules/lodash/isEqualWith.js | 41 - .../node_modules/lodash/isError.js | 42 - .../node_modules/lodash/isFinite.js | 36 - .../node_modules/lodash/isFunction.js | 42 - .../node_modules/lodash/isInteger.js | 33 - .../node_modules/lodash/isLength.js | 35 - .../node_modules/lodash/isMap.js | 27 - .../node_modules/lodash/isMatch.js | 36 - .../node_modules/lodash/isMatchWith.js | 41 - .../node_modules/lodash/isNaN.js | 38 - .../node_modules/lodash/isNative.js | 40 - .../node_modules/lodash/isNil.js | 25 - .../node_modules/lodash/isNull.js | 22 - .../node_modules/lodash/isNumber.js | 47 - .../node_modules/lodash/isObject.js | 31 - .../node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 68 - .../node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../node_modules/lodash/isSet.js | 27 - .../node_modules/lodash/isString.js | 39 - .../node_modules/lodash/isSymbol.js | 38 - .../node_modules/lodash/isTypedArray.js | 27 - .../node_modules/lodash/isUndefined.js | 22 - .../node_modules/lodash/isWeakMap.js | 28 - .../node_modules/lodash/isWeakSet.js | 37 - .../node_modules/lodash/iteratee.js | 50 - .../node_modules/lodash/join.js | 26 - .../node_modules/lodash/kebabCase.js | 28 - .../node_modules/lodash/keyBy.js | 37 - .../node_modules/lodash/keys.js | 37 - .../node_modules/lodash/keysIn.js | 32 - .../node_modules/lodash/lang.js | 58 - .../node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../node_modules/lodash/lodash.js | 16982 --------------- .../node_modules/lodash/lodash.min.js | 134 - .../node_modules/lodash/lowerCase.js | 27 - .../node_modules/lodash/lowerFirst.js | 22 - .../babel-generator/node_modules/lodash/lt.js | 29 - .../node_modules/lodash/lte.js | 30 - .../node_modules/lodash/map.js | 53 - .../node_modules/lodash/mapKeys.js | 36 - .../node_modules/lodash/mapValues.js | 43 - .../node_modules/lodash/matches.js | 36 - .../node_modules/lodash/matchesProperty.js | 34 - .../node_modules/lodash/math.js | 17 - .../node_modules/lodash/max.js | 29 - .../node_modules/lodash/maxBy.js | 34 - .../node_modules/lodash/mean.js | 22 - .../node_modules/lodash/meanBy.js | 31 - .../node_modules/lodash/memoize.js | 73 - .../node_modules/lodash/merge.js | 39 - .../node_modules/lodash/mergeWith.js | 39 - .../node_modules/lodash/method.js | 34 - .../node_modules/lodash/methodOf.js | 33 - .../node_modules/lodash/min.js | 29 - .../node_modules/lodash/minBy.js | 34 - .../node_modules/lodash/mixin.js | 74 - .../node_modules/lodash/multiply.js | 22 - .../node_modules/lodash/negate.js | 40 - .../node_modules/lodash/next.js | 35 - .../node_modules/lodash/noop.js | 17 - .../node_modules/lodash/now.js | 23 - .../node_modules/lodash/nth.js | 29 - .../node_modules/lodash/nthArg.js | 32 - .../node_modules/lodash/number.js | 5 - .../node_modules/lodash/object.js | 49 - .../node_modules/lodash/omit.js | 35 - .../node_modules/lodash/omitBy.js | 29 - .../node_modules/lodash/once.js | 25 - .../node_modules/lodash/orderBy.js | 47 - .../node_modules/lodash/over.js | 24 - .../node_modules/lodash/overArgs.js | 61 - .../node_modules/lodash/overEvery.js | 30 - .../node_modules/lodash/overSome.js | 30 - .../node_modules/lodash/package.json | 115 - .../node_modules/lodash/pad.js | 49 - .../node_modules/lodash/padEnd.js | 39 - .../node_modules/lodash/padStart.js | 39 - .../node_modules/lodash/parseInt.js | 43 - .../node_modules/lodash/partial.js | 50 - .../node_modules/lodash/partialRight.js | 49 - .../node_modules/lodash/partition.js | 43 - .../node_modules/lodash/pick.js | 27 - .../node_modules/lodash/pickBy.js | 27 - .../node_modules/lodash/plant.js | 48 - .../node_modules/lodash/property.js | 32 - .../node_modules/lodash/propertyOf.js | 30 - .../node_modules/lodash/pull.js | 29 - .../node_modules/lodash/pullAll.js | 29 - .../node_modules/lodash/pullAllBy.js | 34 - .../node_modules/lodash/pullAllWith.js | 32 - .../node_modules/lodash/pullAt.js | 43 - .../node_modules/lodash/random.js | 82 - .../node_modules/lodash/range.js | 46 - .../node_modules/lodash/rangeRight.js | 41 - .../node_modules/lodash/rearg.js | 33 - .../node_modules/lodash/reduce.js | 51 - .../node_modules/lodash/reduceRight.js | 36 - .../node_modules/lodash/reject.js | 46 - .../node_modules/lodash/remove.js | 54 - .../node_modules/lodash/repeat.js | 37 - .../node_modules/lodash/replace.js | 29 - .../node_modules/lodash/rest.js | 40 - .../node_modules/lodash/result.js | 57 - .../node_modules/lodash/reverse.js | 34 - .../node_modules/lodash/round.js | 26 - .../node_modules/lodash/sample.js | 24 - .../node_modules/lodash/sampleSize.js | 37 - .../node_modules/lodash/seq.js | 16 - .../node_modules/lodash/set.js | 35 - .../node_modules/lodash/setWith.js | 32 - .../node_modules/lodash/shuffle.js | 25 - .../node_modules/lodash/size.js | 46 - .../node_modules/lodash/slice.js | 37 - .../node_modules/lodash/snakeCase.js | 28 - .../node_modules/lodash/some.js | 51 - .../node_modules/lodash/sortBy.js | 48 - .../node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/sortedUniq.js | 24 - .../node_modules/lodash/sortedUniqBy.js | 26 - .../node_modules/lodash/split.js | 52 - .../node_modules/lodash/spread.js | 63 - .../node_modules/lodash/startCase.js | 29 - .../node_modules/lodash/startsWith.js | 36 - .../node_modules/lodash/string.js | 33 - .../node_modules/lodash/stubArray.js | 23 - .../node_modules/lodash/stubFalse.js | 18 - .../node_modules/lodash/stubObject.js | 23 - .../node_modules/lodash/stubString.js | 18 - .../node_modules/lodash/stubTrue.js | 18 - .../node_modules/lodash/subtract.js | 22 - .../node_modules/lodash/sum.js | 24 - .../node_modules/lodash/sumBy.js | 33 - .../node_modules/lodash/tail.js | 22 - .../node_modules/lodash/take.js | 37 - .../node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../node_modules/lodash/takeWhile.js | 46 - .../node_modules/lodash/tap.js | 29 - .../node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../node_modules/lodash/throttle.js | 69 - .../node_modules/lodash/thru.js | 28 - .../node_modules/lodash/times.js | 51 - .../node_modules/lodash/toArray.js | 58 - .../node_modules/lodash/toFinite.js | 42 - .../node_modules/lodash/toInteger.js | 36 - .../node_modules/lodash/toIterator.js | 23 - .../node_modules/lodash/toJSON.js | 1 - .../node_modules/lodash/toLength.js | 38 - .../node_modules/lodash/toLower.js | 28 - .../node_modules/lodash/toNumber.js | 66 - .../node_modules/lodash/toPairs.js | 30 - .../node_modules/lodash/toPairsIn.js | 30 - .../node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../node_modules/lodash/toString.js | 28 - .../node_modules/lodash/toUpper.js | 28 - .../node_modules/lodash/transform.js | 65 - .../node_modules/lodash/trim.js | 49 - .../node_modules/lodash/trimEnd.js | 43 - .../node_modules/lodash/trimStart.js | 43 - .../node_modules/lodash/truncate.js | 111 - .../node_modules/lodash/unary.js | 22 - .../node_modules/lodash/unescape.js | 34 - .../node_modules/lodash/union.js | 26 - .../node_modules/lodash/unionBy.js | 40 - .../node_modules/lodash/unionWith.js | 36 - .../node_modules/lodash/uniq.js | 27 - .../node_modules/lodash/uniqBy.js | 34 - .../node_modules/lodash/uniqWith.js | 29 - .../node_modules/lodash/uniqueId.js | 28 - .../node_modules/lodash/unset.js | 34 - .../node_modules/lodash/unzip.js | 45 - .../node_modules/lodash/unzipWith.js | 39 - .../node_modules/lodash/update.js | 35 - .../node_modules/lodash/updateWith.js | 33 - .../node_modules/lodash/upperCase.js | 27 - .../node_modules/lodash/upperFirst.js | 22 - .../node_modules/lodash/util.js | 34 - .../node_modules/lodash/value.js | 1 - .../node_modules/lodash/valueOf.js | 1 - .../node_modules/lodash/values.js | 34 - .../node_modules/lodash/valuesIn.js | 32 - .../node_modules/lodash/without.js | 31 - .../node_modules/lodash/words.js | 35 - .../node_modules/lodash/wrap.js | 31 - .../node_modules/lodash/wrapperAt.js | 48 - .../node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../node_modules/lodash/wrapperValue.js | 21 - .../node_modules/lodash/xor.js | 28 - .../node_modules/lodash/xorBy.js | 40 - .../node_modules/lodash/xorWith.js | 36 - .../node_modules/lodash/zip.js | 22 - .../node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../node_modules/lodash/zipWith.js | 31 - node_modules/babel-generator/package.json | 114 +- node_modules/babel-messages/package.json | 102 +- .../helpers/_async-generator-delegate.js | 1 + .../babel-runtime/helpers/_async-generator.js | 1 + .../babel-runtime/helpers/_async-iterator.js | 1 + .../helpers/async-generator-delegate.js | 1 + .../babel-runtime/helpers/async-generator.js | 1 + .../babel-runtime/helpers/async-iterator.js | 1 + .../babel-runtime/helpers/asyncGenerator.js | 130 + .../helpers/asyncGeneratorDelegate.js | 69 + .../babel-runtime/helpers/asyncIterator.js | 36 + .../babel-runtime/helpers/asyncToGenerator.js | 4 +- node_modules/babel-runtime/helpers/typeof.js | 4 +- node_modules/babel-runtime/package.json | 100 +- .../babel-template/node_modules/.bin/babylon | 1 + .../node_modules/lodash/LICENSE | 47 - .../node_modules/lodash/README.md | 39 - .../node_modules/lodash/_DataView.js | 7 - .../node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_LazyWrapper.js | 28 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../node_modules/lodash/_Map.js | 7 - .../node_modules/lodash/_MapCache.js | 32 - .../node_modules/lodash/_Promise.js | 7 - .../node_modules/lodash/_Set.js | 7 - .../node_modules/lodash/_SetCache.js | 27 - .../node_modules/lodash/_Stack.js | 27 - .../node_modules/lodash/_Symbol.js | 6 - .../node_modules/lodash/_Uint8Array.js | 6 - .../node_modules/lodash/_WeakMap.js | 7 - .../node_modules/lodash/_addMapEntry.js | 15 - .../node_modules/lodash/_addSetEntry.js | 15 - .../node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayPush.js | 20 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseClamp.js | 22 - .../node_modules/lodash/_baseClone.js | 133 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../node_modules/lodash/_baseCreate.js | 30 - .../node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../node_modules/lodash/_baseFill.js | 32 - .../node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../node_modules/lodash/_baseFindKey.js | 23 - .../node_modules/lodash/_baseFlatten.js | 38 - .../node_modules/lodash/_baseFor.js | 16 - .../node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../node_modules/lodash/_baseGetTag.js | 22 - .../node_modules/lodash/_baseGt.js | 14 - .../node_modules/lodash/_baseHas.js | 19 - .../node_modules/lodash/_baseHasIn.js | 13 - .../node_modules/lodash/_baseInRange.js | 18 - .../node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../node_modules/lodash/_baseInvoke.js | 28 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../node_modules/lodash/_baseIsDate.js | 27 - .../node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 89 - .../node_modules/lodash/_baseIsMap.js | 18 - .../node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseIteratee.js | 31 - .../node_modules/lodash/_baseKeys.js | 30 - .../node_modules/lodash/_baseKeysIn.js | 33 - .../node_modules/lodash/_baseLodash.js | 10 - .../node_modules/lodash/_baseLt.js | 14 - .../node_modules/lodash/_baseMap.js | 22 - .../node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../node_modules/lodash/_baseNth.js | 20 - .../node_modules/lodash/_baseOrderBy.js | 34 - .../node_modules/lodash/_basePick.js | 19 - .../node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../node_modules/lodash/_basePullAll.js | 51 - .../node_modules/lodash/_basePullAt.js | 50 - .../node_modules/lodash/_baseRandom.js | 18 - .../node_modules/lodash/_baseRange.js | 28 - .../node_modules/lodash/_baseReduce.js | 23 - .../node_modules/lodash/_baseRepeat.js | 35 - .../node_modules/lodash/_baseRest.js | 17 - .../node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../node_modules/lodash/_baseSet.js | 48 - .../node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../node_modules/lodash/_baseShuffle.js | 15 - .../node_modules/lodash/_baseSlice.js | 31 - .../node_modules/lodash/_baseSome.js | 22 - .../node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../node_modules/lodash/_baseSum.js | 24 - .../node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../node_modules/lodash/_baseUnary.js | 14 - .../node_modules/lodash/_baseUniq.js | 72 - .../node_modules/lodash/_baseUnset.js | 29 - .../node_modules/lodash/_baseUpdate.js | 18 - .../node_modules/lodash/_baseValues.js | 19 - .../node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../node_modules/lodash/_castPath.js | 15 - .../node_modules/lodash/_castRest.js | 14 - .../node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../node_modules/lodash/_cloneMap.js | 19 - .../node_modules/lodash/_cloneRegExp.js | 17 - .../node_modules/lodash/_cloneSet.js | 19 - .../node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../node_modules/lodash/_copyArray.js | 20 - .../node_modules/lodash/_copyObject.js | 40 - .../node_modules/lodash/_copySymbols.js | 16 - .../node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtor.js | 37 - .../node_modules/lodash/_createCurry.js | 46 - .../node_modules/lodash/_createFind.js | 25 - .../node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../node_modules/lodash/_createRound.js | 33 - .../node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrap.js | 107 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../node_modules/lodash/_equalArrays.js | 84 - .../node_modules/lodash/_equalByTag.js | 113 - .../node_modules/lodash/_equalObjects.js | 90 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../node_modules/lodash/_flatRest.js | 16 - .../node_modules/lodash/_freeGlobal.js | 4 - .../node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../node_modules/lodash/_getData.js | 15 - .../node_modules/lodash/_getFuncName.js | 31 - .../node_modules/lodash/_getHolder.js | 13 - .../node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 26 - .../node_modules/lodash/_getTag.js | 68 - .../node_modules/lodash/_getValue.js | 13 - .../node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../node_modules/lodash/_hasPath.js | 40 - .../node_modules/lodash/_hasUnicode.js | 24 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../node_modules/lodash/_hashClear.js | 15 - .../node_modules/lodash/_hashDelete.js | 17 - .../node_modules/lodash/_hashGet.js | 30 - .../node_modules/lodash/_hashHas.js | 23 - .../node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../node_modules/lodash/_isKey.js | 29 - .../node_modules/lodash/_isKeyable.js | 15 - .../node_modules/lodash/_isLaziable.js | 28 - .../node_modules/lodash/_isMaskable.js | 14 - .../node_modules/lodash/_isMasked.js | 20 - .../node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../node_modules/lodash/_lazyClone.js | 23 - .../node_modules/lodash/_lazyReverse.js | 23 - .../node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../node_modules/lodash/_mapCacheGet.js | 16 - .../node_modules/lodash/_mapCacheHas.js | 16 - .../node_modules/lodash/_mapCacheSet.js | 22 - .../node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../node_modules/lodash/_nodeUtil.js | 22 - .../node_modules/lodash/_overArg.js | 15 - .../node_modules/lodash/_overRest.js | 36 - .../node_modules/lodash/_parent.js | 16 - .../node_modules/lodash/_reEscape.js | 4 - .../node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../node_modules/lodash/_realNames.js | 4 - .../node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../node_modules/lodash/_root.js | 9 - .../node_modules/lodash/_setCacheAdd.js | 19 - .../node_modules/lodash/_setCacheHas.js | 14 - .../node_modules/lodash/_setData.js | 20 - .../node_modules/lodash/_setToArray.js | 18 - .../node_modules/lodash/_setToPairs.js | 18 - .../node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_shuffleSelf.js | 28 - .../node_modules/lodash/_stackClear.js | 15 - .../node_modules/lodash/_stackDelete.js | 18 - .../node_modules/lodash/_stackGet.js | 14 - .../node_modules/lodash/_stackHas.js | 14 - .../node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 31 - .../node_modules/lodash/_toKey.js | 21 - .../node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../node_modules/lodash/_unicodeSize.js | 42 - .../node_modules/lodash/_unicodeToArray.js | 38 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - .../babel-template/node_modules/lodash/add.js | 22 - .../node_modules/lodash/after.js | 42 - .../node_modules/lodash/array.js | 67 - .../babel-template/node_modules/lodash/ary.js | 29 - .../node_modules/lodash/assign.js | 58 - .../node_modules/lodash/assignIn.js | 40 - .../node_modules/lodash/assignInWith.js | 38 - .../node_modules/lodash/assignWith.js | 37 - .../babel-template/node_modules/lodash/at.js | 23 - .../node_modules/lodash/attempt.js | 35 - .../node_modules/lodash/before.js | 40 - .../node_modules/lodash/bind.js | 57 - .../node_modules/lodash/bindAll.js | 41 - .../node_modules/lodash/bindKey.js | 68 - .../node_modules/lodash/camelCase.js | 29 - .../node_modules/lodash/capitalize.js | 23 - .../node_modules/lodash/castArray.js | 44 - .../node_modules/lodash/ceil.js | 26 - .../node_modules/lodash/chain.js | 38 - .../node_modules/lodash/chunk.js | 50 - .../node_modules/lodash/clamp.js | 39 - .../node_modules/lodash/clone.js | 33 - .../node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../node_modules/lodash/cloneWith.js | 38 - .../node_modules/lodash/collection.js | 30 - .../node_modules/lodash/commit.js | 33 - .../node_modules/lodash/compact.js | 31 - .../node_modules/lodash/concat.js | 43 - .../node_modules/lodash/cond.js | 60 - .../node_modules/lodash/conforms.js | 32 - .../node_modules/lodash/conformsTo.js | 32 - .../node_modules/lodash/constant.js | 26 - .../node_modules/lodash/core.js | 3831 ---- .../node_modules/lodash/core.min.js | 29 - .../node_modules/lodash/countBy.js | 41 - .../node_modules/lodash/create.js | 43 - .../node_modules/lodash/curry.js | 57 - .../node_modules/lodash/curryRight.js | 54 - .../node_modules/lodash/date.js | 3 - .../node_modules/lodash/debounce.js | 188 - .../node_modules/lodash/deburr.js | 43 - .../node_modules/lodash/defaultTo.js | 25 - .../node_modules/lodash/defaults.js | 32 - .../node_modules/lodash/defaultsDeep.js | 30 - .../node_modules/lodash/defer.js | 26 - .../node_modules/lodash/delay.js | 28 - .../node_modules/lodash/difference.js | 33 - .../node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../node_modules/lodash/divide.js | 22 - .../node_modules/lodash/drop.js | 38 - .../node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../node_modules/lodash/dropWhile.js | 46 - .../node_modules/lodash/each.js | 1 - .../node_modules/lodash/eachRight.js | 1 - .../node_modules/lodash/endsWith.js | 43 - .../node_modules/lodash/entries.js | 1 - .../node_modules/lodash/entriesIn.js | 1 - .../babel-template/node_modules/lodash/eq.js | 37 - .../node_modules/lodash/escape.js | 43 - .../node_modules/lodash/escapeRegExp.js | 32 - .../node_modules/lodash/every.js | 57 - .../node_modules/lodash/extend.js | 1 - .../node_modules/lodash/extendWith.js | 1 - .../node_modules/lodash/fill.js | 45 - .../node_modules/lodash/filter.js | 49 - .../node_modules/lodash/find.js | 43 - .../node_modules/lodash/findIndex.js | 56 - .../node_modules/lodash/findKey.js | 44 - .../node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../node_modules/lodash/findLastKey.js | 44 - .../node_modules/lodash/first.js | 1 - .../node_modules/lodash/flatMap.js | 30 - .../node_modules/lodash/flatMapDeep.js | 32 - .../node_modules/lodash/flatMapDepth.js | 32 - .../node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../node_modules/lodash/flip.js | 28 - .../node_modules/lodash/floor.js | 26 - .../node_modules/lodash/flow.js | 27 - .../node_modules/lodash/flowRight.js | 26 - .../node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../babel-template/node_modules/lodash/fp.js | 2 - .../node_modules/lodash/fp/F.js | 1 - .../node_modules/lodash/fp/T.js | 1 - .../node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../node_modules/lodash/fp/_mapping.js | 367 - .../node_modules/lodash/fp/_util.js | 15 - .../node_modules/lodash/fp/add.js | 5 - .../node_modules/lodash/fp/after.js | 5 - .../node_modules/lodash/fp/all.js | 1 - .../node_modules/lodash/fp/allPass.js | 1 - .../node_modules/lodash/fp/always.js | 1 - .../node_modules/lodash/fp/any.js | 1 - .../node_modules/lodash/fp/anyPass.js | 1 - .../node_modules/lodash/fp/apply.js | 1 - .../node_modules/lodash/fp/array.js | 2 - .../node_modules/lodash/fp/ary.js | 5 - .../node_modules/lodash/fp/assign.js | 5 - .../node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../node_modules/lodash/fp/assoc.js | 1 - .../node_modules/lodash/fp/assocPath.js | 1 - .../node_modules/lodash/fp/at.js | 5 - .../node_modules/lodash/fp/attempt.js | 5 - .../node_modules/lodash/fp/before.js | 5 - .../node_modules/lodash/fp/bind.js | 5 - .../node_modules/lodash/fp/bindAll.js | 5 - .../node_modules/lodash/fp/bindKey.js | 5 - .../node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../node_modules/lodash/fp/castArray.js | 5 - .../node_modules/lodash/fp/ceil.js | 5 - .../node_modules/lodash/fp/chain.js | 5 - .../node_modules/lodash/fp/chunk.js | 5 - .../node_modules/lodash/fp/clamp.js | 5 - .../node_modules/lodash/fp/clone.js | 5 - .../node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../node_modules/lodash/fp/commit.js | 5 - .../node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../node_modules/lodash/fp/compose.js | 1 - .../node_modules/lodash/fp/concat.js | 5 - .../node_modules/lodash/fp/cond.js | 5 - .../node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../node_modules/lodash/fp/constant.js | 5 - .../node_modules/lodash/fp/contains.js | 1 - .../node_modules/lodash/fp/convert.js | 18 - .../node_modules/lodash/fp/countBy.js | 5 - .../node_modules/lodash/fp/create.js | 5 - .../node_modules/lodash/fp/curry.js | 5 - .../node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../node_modules/lodash/fp/date.js | 2 - .../node_modules/lodash/fp/debounce.js | 5 - .../node_modules/lodash/fp/deburr.js | 5 - .../node_modules/lodash/fp/defaultTo.js | 5 - .../node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../node_modules/lodash/fp/defer.js | 5 - .../node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../node_modules/lodash/fp/divide.js | 5 - .../node_modules/lodash/fp/drop.js | 5 - .../node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../node_modules/lodash/fp/dropWhile.js | 5 - .../node_modules/lodash/fp/each.js | 1 - .../node_modules/lodash/fp/eachRight.js | 1 - .../node_modules/lodash/fp/endsWith.js | 5 - .../node_modules/lodash/fp/entries.js | 1 - .../node_modules/lodash/fp/entriesIn.js | 1 - .../node_modules/lodash/fp/eq.js | 5 - .../node_modules/lodash/fp/equals.js | 1 - .../node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../node_modules/lodash/fp/every.js | 5 - .../node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../node_modules/lodash/fp/fill.js | 5 - .../node_modules/lodash/fp/filter.js | 5 - .../node_modules/lodash/fp/find.js | 5 - .../node_modules/lodash/fp/findFrom.js | 5 - .../node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../node_modules/lodash/fp/findKey.js | 5 - .../node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../node_modules/lodash/fp/first.js | 1 - .../node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../node_modules/lodash/fp/flip.js | 5 - .../node_modules/lodash/fp/floor.js | 5 - .../node_modules/lodash/fp/flow.js | 5 - .../node_modules/lodash/fp/flowRight.js | 5 - .../node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../node_modules/lodash/fp/fromPairs.js | 5 - .../node_modules/lodash/fp/function.js | 2 - .../node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../node_modules/lodash/fp/get.js | 5 - .../node_modules/lodash/fp/getOr.js | 5 - .../node_modules/lodash/fp/groupBy.js | 5 - .../node_modules/lodash/fp/gt.js | 5 - .../node_modules/lodash/fp/gte.js | 5 - .../node_modules/lodash/fp/has.js | 5 - .../node_modules/lodash/fp/hasIn.js | 5 - .../node_modules/lodash/fp/head.js | 5 - .../node_modules/lodash/fp/identical.js | 1 - .../node_modules/lodash/fp/identity.js | 5 - .../node_modules/lodash/fp/inRange.js | 5 - .../node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../node_modules/lodash/fp/indexBy.js | 1 - .../node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../node_modules/lodash/fp/init.js | 1 - .../node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../node_modules/lodash/fp/invert.js | 5 - .../node_modules/lodash/fp/invertBy.js | 5 - .../node_modules/lodash/fp/invertObj.js | 1 - .../node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../node_modules/lodash/fp/isBoolean.js | 5 - .../node_modules/lodash/fp/isBuffer.js | 5 - .../node_modules/lodash/fp/isDate.js | 5 - .../node_modules/lodash/fp/isElement.js | 5 - .../node_modules/lodash/fp/isEmpty.js | 5 - .../node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../node_modules/lodash/fp/isError.js | 5 - .../node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../node_modules/lodash/fp/isInteger.js | 5 - .../node_modules/lodash/fp/isLength.js | 5 - .../node_modules/lodash/fp/isMap.js | 5 - .../node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../node_modules/lodash/fp/isNaN.js | 5 - .../node_modules/lodash/fp/isNative.js | 5 - .../node_modules/lodash/fp/isNil.js | 5 - .../node_modules/lodash/fp/isNull.js | 5 - .../node_modules/lodash/fp/isNumber.js | 5 - .../node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../node_modules/lodash/fp/isSet.js | 5 - .../node_modules/lodash/fp/isString.js | 5 - .../node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../node_modules/lodash/fp/isWeakMap.js | 5 - .../node_modules/lodash/fp/isWeakSet.js | 5 - .../node_modules/lodash/fp/iteratee.js | 5 - .../node_modules/lodash/fp/join.js | 5 - .../node_modules/lodash/fp/juxt.js | 1 - .../node_modules/lodash/fp/kebabCase.js | 5 - .../node_modules/lodash/fp/keyBy.js | 5 - .../node_modules/lodash/fp/keys.js | 5 - .../node_modules/lodash/fp/keysIn.js | 5 - .../node_modules/lodash/fp/lang.js | 2 - .../node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../node_modules/lodash/fp/lt.js | 5 - .../node_modules/lodash/fp/lte.js | 5 - .../node_modules/lodash/fp/map.js | 5 - .../node_modules/lodash/fp/mapKeys.js | 5 - .../node_modules/lodash/fp/mapValues.js | 5 - .../node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../node_modules/lodash/fp/math.js | 2 - .../node_modules/lodash/fp/max.js | 5 - .../node_modules/lodash/fp/maxBy.js | 5 - .../node_modules/lodash/fp/mean.js | 5 - .../node_modules/lodash/fp/meanBy.js | 5 - .../node_modules/lodash/fp/memoize.js | 5 - .../node_modules/lodash/fp/merge.js | 5 - .../node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../node_modules/lodash/fp/mergeWith.js | 5 - .../node_modules/lodash/fp/method.js | 5 - .../node_modules/lodash/fp/methodOf.js | 5 - .../node_modules/lodash/fp/min.js | 5 - .../node_modules/lodash/fp/minBy.js | 5 - .../node_modules/lodash/fp/mixin.js | 5 - .../node_modules/lodash/fp/multiply.js | 5 - .../node_modules/lodash/fp/nAry.js | 1 - .../node_modules/lodash/fp/negate.js | 5 - .../node_modules/lodash/fp/next.js | 5 - .../node_modules/lodash/fp/noop.js | 5 - .../node_modules/lodash/fp/now.js | 5 - .../node_modules/lodash/fp/nth.js | 5 - .../node_modules/lodash/fp/nthArg.js | 5 - .../node_modules/lodash/fp/number.js | 2 - .../node_modules/lodash/fp/object.js | 2 - .../node_modules/lodash/fp/omit.js | 5 - .../node_modules/lodash/fp/omitAll.js | 1 - .../node_modules/lodash/fp/omitBy.js | 5 - .../node_modules/lodash/fp/once.js | 5 - .../node_modules/lodash/fp/orderBy.js | 5 - .../node_modules/lodash/fp/over.js | 5 - .../node_modules/lodash/fp/overArgs.js | 5 - .../node_modules/lodash/fp/overEvery.js | 5 - .../node_modules/lodash/fp/overSome.js | 5 - .../node_modules/lodash/fp/pad.js | 5 - .../node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../node_modules/lodash/fp/padEnd.js | 5 - .../node_modules/lodash/fp/padStart.js | 5 - .../node_modules/lodash/fp/parseInt.js | 5 - .../node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../node_modules/lodash/fp/partition.js | 5 - .../node_modules/lodash/fp/path.js | 1 - .../node_modules/lodash/fp/pathEq.js | 1 - .../node_modules/lodash/fp/pathOr.js | 1 - .../node_modules/lodash/fp/paths.js | 1 - .../node_modules/lodash/fp/pick.js | 5 - .../node_modules/lodash/fp/pickAll.js | 1 - .../node_modules/lodash/fp/pickBy.js | 5 - .../node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../node_modules/lodash/fp/plant.js | 5 - .../node_modules/lodash/fp/pluck.js | 1 - .../node_modules/lodash/fp/prop.js | 1 - .../node_modules/lodash/fp/propEq.js | 1 - .../node_modules/lodash/fp/propOr.js | 1 - .../node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../node_modules/lodash/fp/props.js | 1 - .../node_modules/lodash/fp/pull.js | 5 - .../node_modules/lodash/fp/pullAll.js | 5 - .../node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../node_modules/lodash/fp/pullAt.js | 5 - .../node_modules/lodash/fp/random.js | 5 - .../node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../node_modules/lodash/fp/rearg.js | 5 - .../node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../node_modules/lodash/fp/reject.js | 5 - .../node_modules/lodash/fp/remove.js | 5 - .../node_modules/lodash/fp/repeat.js | 5 - .../node_modules/lodash/fp/replace.js | 5 - .../node_modules/lodash/fp/rest.js | 5 - .../node_modules/lodash/fp/restFrom.js | 5 - .../node_modules/lodash/fp/result.js | 5 - .../node_modules/lodash/fp/reverse.js | 5 - .../node_modules/lodash/fp/round.js | 5 - .../node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../node_modules/lodash/fp/seq.js | 2 - .../node_modules/lodash/fp/set.js | 5 - .../node_modules/lodash/fp/setWith.js | 5 - .../node_modules/lodash/fp/shuffle.js | 5 - .../node_modules/lodash/fp/size.js | 5 - .../node_modules/lodash/fp/slice.js | 5 - .../node_modules/lodash/fp/snakeCase.js | 5 - .../node_modules/lodash/fp/some.js | 5 - .../node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../node_modules/lodash/fp/split.js | 5 - .../node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../node_modules/lodash/fp/string.js | 2 - .../node_modules/lodash/fp/stubArray.js | 5 - .../node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../node_modules/lodash/fp/stubTrue.js | 5 - .../node_modules/lodash/fp/subtract.js | 5 - .../node_modules/lodash/fp/sum.js | 5 - .../node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../node_modules/lodash/fp/tail.js | 5 - .../node_modules/lodash/fp/take.js | 5 - .../node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../node_modules/lodash/fp/takeWhile.js | 5 - .../node_modules/lodash/fp/tap.js | 5 - .../node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../node_modules/lodash/fp/throttle.js | 5 - .../node_modules/lodash/fp/thru.js | 5 - .../node_modules/lodash/fp/times.js | 5 - .../node_modules/lodash/fp/toArray.js | 5 - .../node_modules/lodash/fp/toFinite.js | 5 - .../node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../node_modules/lodash/fp/toJSON.js | 5 - .../node_modules/lodash/fp/toLength.js | 5 - .../node_modules/lodash/fp/toLower.js | 5 - .../node_modules/lodash/fp/toNumber.js | 5 - .../node_modules/lodash/fp/toPairs.js | 5 - .../node_modules/lodash/fp/toPairsIn.js | 5 - .../node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../node_modules/lodash/fp/toString.js | 5 - .../node_modules/lodash/fp/toUpper.js | 5 - .../node_modules/lodash/fp/transform.js | 5 - .../node_modules/lodash/fp/trim.js | 5 - .../node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../node_modules/lodash/fp/trimEnd.js | 5 - .../node_modules/lodash/fp/trimStart.js | 5 - .../node_modules/lodash/fp/truncate.js | 5 - .../node_modules/lodash/fp/unapply.js | 1 - .../node_modules/lodash/fp/unary.js | 5 - .../node_modules/lodash/fp/unescape.js | 5 - .../node_modules/lodash/fp/union.js | 5 - .../node_modules/lodash/fp/unionBy.js | 5 - .../node_modules/lodash/fp/unionWith.js | 5 - .../node_modules/lodash/fp/uniq.js | 5 - .../node_modules/lodash/fp/uniqBy.js | 5 - .../node_modules/lodash/fp/uniqWith.js | 5 - .../node_modules/lodash/fp/uniqueId.js | 5 - .../node_modules/lodash/fp/unnest.js | 1 - .../node_modules/lodash/fp/unset.js | 5 - .../node_modules/lodash/fp/unzip.js | 5 - .../node_modules/lodash/fp/unzipWith.js | 5 - .../node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../node_modules/lodash/fp/useWith.js | 1 - .../node_modules/lodash/fp/util.js | 2 - .../node_modules/lodash/fp/value.js | 5 - .../node_modules/lodash/fp/valueOf.js | 5 - .../node_modules/lodash/fp/values.js | 5 - .../node_modules/lodash/fp/valuesIn.js | 5 - .../node_modules/lodash/fp/where.js | 1 - .../node_modules/lodash/fp/whereEq.js | 1 - .../node_modules/lodash/fp/without.js | 5 - .../node_modules/lodash/fp/words.js | 5 - .../node_modules/lodash/fp/wrap.js | 5 - .../node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../node_modules/lodash/fp/xor.js | 5 - .../node_modules/lodash/fp/xorBy.js | 5 - .../node_modules/lodash/fp/xorWith.js | 5 - .../node_modules/lodash/fp/zip.js | 5 - .../node_modules/lodash/fp/zipAll.js | 5 - .../node_modules/lodash/fp/zipObj.js | 1 - .../node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../node_modules/lodash/fp/zipWith.js | 5 - .../node_modules/lodash/fromPairs.js | 28 - .../node_modules/lodash/function.js | 25 - .../node_modules/lodash/functions.js | 31 - .../node_modules/lodash/functionsIn.js | 31 - .../babel-template/node_modules/lodash/get.js | 33 - .../node_modules/lodash/groupBy.js | 42 - .../babel-template/node_modules/lodash/gt.js | 29 - .../babel-template/node_modules/lodash/gte.js | 30 - .../babel-template/node_modules/lodash/has.js | 35 - .../node_modules/lodash/hasIn.js | 34 - .../node_modules/lodash/head.js | 23 - .../node_modules/lodash/identity.js | 21 - .../node_modules/lodash/inRange.js | 55 - .../node_modules/lodash/includes.js | 53 - .../node_modules/lodash/index.js | 1 - .../node_modules/lodash/indexOf.js | 42 - .../node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../node_modules/lodash/invert.js | 27 - .../node_modules/lodash/invertBy.js | 44 - .../node_modules/lodash/invoke.js | 24 - .../node_modules/lodash/invokeMap.js | 44 - .../node_modules/lodash/isArguments.js | 36 - .../node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../node_modules/lodash/isBoolean.js | 38 - .../node_modules/lodash/isBuffer.js | 38 - .../node_modules/lodash/isDate.js | 27 - .../node_modules/lodash/isElement.js | 25 - .../node_modules/lodash/isEmpty.js | 74 - .../node_modules/lodash/isEqual.js | 35 - .../node_modules/lodash/isEqualWith.js | 41 - .../node_modules/lodash/isError.js | 42 - .../node_modules/lodash/isFinite.js | 36 - .../node_modules/lodash/isFunction.js | 42 - .../node_modules/lodash/isInteger.js | 33 - .../node_modules/lodash/isLength.js | 35 - .../node_modules/lodash/isMap.js | 27 - .../node_modules/lodash/isMatch.js | 36 - .../node_modules/lodash/isMatchWith.js | 41 - .../node_modules/lodash/isNaN.js | 38 - .../node_modules/lodash/isNative.js | 40 - .../node_modules/lodash/isNil.js | 25 - .../node_modules/lodash/isNull.js | 22 - .../node_modules/lodash/isNumber.js | 47 - .../node_modules/lodash/isObject.js | 31 - .../node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 68 - .../node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../node_modules/lodash/isSet.js | 27 - .../node_modules/lodash/isString.js | 39 - .../node_modules/lodash/isSymbol.js | 38 - .../node_modules/lodash/isTypedArray.js | 27 - .../node_modules/lodash/isUndefined.js | 22 - .../node_modules/lodash/isWeakMap.js | 28 - .../node_modules/lodash/isWeakSet.js | 37 - .../node_modules/lodash/iteratee.js | 50 - .../node_modules/lodash/join.js | 26 - .../node_modules/lodash/kebabCase.js | 28 - .../node_modules/lodash/keyBy.js | 37 - .../node_modules/lodash/keys.js | 37 - .../node_modules/lodash/keysIn.js | 32 - .../node_modules/lodash/lang.js | 58 - .../node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../node_modules/lodash/lodash.js | 16982 --------------- .../node_modules/lodash/lodash.min.js | 134 - .../node_modules/lodash/lowerCase.js | 27 - .../node_modules/lodash/lowerFirst.js | 22 - .../babel-template/node_modules/lodash/lt.js | 29 - .../babel-template/node_modules/lodash/lte.js | 30 - .../babel-template/node_modules/lodash/map.js | 53 - .../node_modules/lodash/mapKeys.js | 36 - .../node_modules/lodash/mapValues.js | 43 - .../node_modules/lodash/matches.js | 36 - .../node_modules/lodash/matchesProperty.js | 34 - .../node_modules/lodash/math.js | 17 - .../babel-template/node_modules/lodash/max.js | 29 - .../node_modules/lodash/maxBy.js | 34 - .../node_modules/lodash/mean.js | 22 - .../node_modules/lodash/meanBy.js | 31 - .../node_modules/lodash/memoize.js | 73 - .../node_modules/lodash/merge.js | 39 - .../node_modules/lodash/mergeWith.js | 39 - .../node_modules/lodash/method.js | 34 - .../node_modules/lodash/methodOf.js | 33 - .../babel-template/node_modules/lodash/min.js | 29 - .../node_modules/lodash/minBy.js | 34 - .../node_modules/lodash/mixin.js | 74 - .../node_modules/lodash/multiply.js | 22 - .../node_modules/lodash/negate.js | 40 - .../node_modules/lodash/next.js | 35 - .../node_modules/lodash/noop.js | 17 - .../babel-template/node_modules/lodash/now.js | 23 - .../babel-template/node_modules/lodash/nth.js | 29 - .../node_modules/lodash/nthArg.js | 32 - .../node_modules/lodash/number.js | 5 - .../node_modules/lodash/object.js | 49 - .../node_modules/lodash/omit.js | 35 - .../node_modules/lodash/omitBy.js | 29 - .../node_modules/lodash/once.js | 25 - .../node_modules/lodash/orderBy.js | 47 - .../node_modules/lodash/over.js | 24 - .../node_modules/lodash/overArgs.js | 61 - .../node_modules/lodash/overEvery.js | 30 - .../node_modules/lodash/overSome.js | 30 - .../node_modules/lodash/package.json | 115 - .../babel-template/node_modules/lodash/pad.js | 49 - .../node_modules/lodash/padEnd.js | 39 - .../node_modules/lodash/padStart.js | 39 - .../node_modules/lodash/parseInt.js | 43 - .../node_modules/lodash/partial.js | 50 - .../node_modules/lodash/partialRight.js | 49 - .../node_modules/lodash/partition.js | 43 - .../node_modules/lodash/pick.js | 27 - .../node_modules/lodash/pickBy.js | 27 - .../node_modules/lodash/plant.js | 48 - .../node_modules/lodash/property.js | 32 - .../node_modules/lodash/propertyOf.js | 30 - .../node_modules/lodash/pull.js | 29 - .../node_modules/lodash/pullAll.js | 29 - .../node_modules/lodash/pullAllBy.js | 34 - .../node_modules/lodash/pullAllWith.js | 32 - .../node_modules/lodash/pullAt.js | 43 - .../node_modules/lodash/random.js | 82 - .../node_modules/lodash/range.js | 46 - .../node_modules/lodash/rangeRight.js | 41 - .../node_modules/lodash/rearg.js | 33 - .../node_modules/lodash/reduce.js | 51 - .../node_modules/lodash/reduceRight.js | 36 - .../node_modules/lodash/reject.js | 46 - .../node_modules/lodash/remove.js | 54 - .../node_modules/lodash/repeat.js | 37 - .../node_modules/lodash/replace.js | 29 - .../node_modules/lodash/rest.js | 40 - .../node_modules/lodash/result.js | 57 - .../node_modules/lodash/reverse.js | 34 - .../node_modules/lodash/round.js | 26 - .../node_modules/lodash/sample.js | 24 - .../node_modules/lodash/sampleSize.js | 37 - .../babel-template/node_modules/lodash/seq.js | 16 - .../babel-template/node_modules/lodash/set.js | 35 - .../node_modules/lodash/setWith.js | 32 - .../node_modules/lodash/shuffle.js | 25 - .../node_modules/lodash/size.js | 46 - .../node_modules/lodash/slice.js | 37 - .../node_modules/lodash/snakeCase.js | 28 - .../node_modules/lodash/some.js | 51 - .../node_modules/lodash/sortBy.js | 48 - .../node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/sortedUniq.js | 24 - .../node_modules/lodash/sortedUniqBy.js | 26 - .../node_modules/lodash/split.js | 52 - .../node_modules/lodash/spread.js | 63 - .../node_modules/lodash/startCase.js | 29 - .../node_modules/lodash/startsWith.js | 36 - .../node_modules/lodash/string.js | 33 - .../node_modules/lodash/stubArray.js | 23 - .../node_modules/lodash/stubFalse.js | 18 - .../node_modules/lodash/stubObject.js | 23 - .../node_modules/lodash/stubString.js | 18 - .../node_modules/lodash/stubTrue.js | 18 - .../node_modules/lodash/subtract.js | 22 - .../babel-template/node_modules/lodash/sum.js | 24 - .../node_modules/lodash/sumBy.js | 33 - .../node_modules/lodash/tail.js | 22 - .../node_modules/lodash/take.js | 37 - .../node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../node_modules/lodash/takeWhile.js | 46 - .../babel-template/node_modules/lodash/tap.js | 29 - .../node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../node_modules/lodash/throttle.js | 69 - .../node_modules/lodash/thru.js | 28 - .../node_modules/lodash/times.js | 51 - .../node_modules/lodash/toArray.js | 58 - .../node_modules/lodash/toFinite.js | 42 - .../node_modules/lodash/toInteger.js | 36 - .../node_modules/lodash/toIterator.js | 23 - .../node_modules/lodash/toJSON.js | 1 - .../node_modules/lodash/toLength.js | 38 - .../node_modules/lodash/toLower.js | 28 - .../node_modules/lodash/toNumber.js | 66 - .../node_modules/lodash/toPairs.js | 30 - .../node_modules/lodash/toPairsIn.js | 30 - .../node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../node_modules/lodash/toString.js | 28 - .../node_modules/lodash/toUpper.js | 28 - .../node_modules/lodash/transform.js | 65 - .../node_modules/lodash/trim.js | 49 - .../node_modules/lodash/trimEnd.js | 43 - .../node_modules/lodash/trimStart.js | 43 - .../node_modules/lodash/truncate.js | 111 - .../node_modules/lodash/unary.js | 22 - .../node_modules/lodash/unescape.js | 34 - .../node_modules/lodash/union.js | 26 - .../node_modules/lodash/unionBy.js | 40 - .../node_modules/lodash/unionWith.js | 36 - .../node_modules/lodash/uniq.js | 27 - .../node_modules/lodash/uniqBy.js | 34 - .../node_modules/lodash/uniqWith.js | 29 - .../node_modules/lodash/uniqueId.js | 28 - .../node_modules/lodash/unset.js | 34 - .../node_modules/lodash/unzip.js | 45 - .../node_modules/lodash/unzipWith.js | 39 - .../node_modules/lodash/update.js | 35 - .../node_modules/lodash/updateWith.js | 33 - .../node_modules/lodash/upperCase.js | 27 - .../node_modules/lodash/upperFirst.js | 22 - .../node_modules/lodash/util.js | 34 - .../node_modules/lodash/value.js | 1 - .../node_modules/lodash/valueOf.js | 1 - .../node_modules/lodash/values.js | 34 - .../node_modules/lodash/valuesIn.js | 32 - .../node_modules/lodash/without.js | 31 - .../node_modules/lodash/words.js | 35 - .../node_modules/lodash/wrap.js | 31 - .../node_modules/lodash/wrapperAt.js | 48 - .../node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../node_modules/lodash/wrapperValue.js | 21 - .../babel-template/node_modules/lodash/xor.js | 28 - .../node_modules/lodash/xorBy.js | 40 - .../node_modules/lodash/xorWith.js | 36 - .../babel-template/node_modules/lodash/zip.js | 22 - .../node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../node_modules/lodash/zipWith.js | 31 - node_modules/babel-template/package.json | 109 +- .../babel-traverse/lib/path/context.js | 2 +- .../babel-traverse/lib/path/evaluation.js | 44 +- node_modules/babel-traverse/lib/path/index.js | 2 +- .../lib/path/inference/index.js | 2 + .../lib/path/inference/inferers.js | 9 +- .../lib/path/lib/virtual-types.js | 2 +- .../babel-traverse/lib/path/modification.js | 2 +- .../babel-traverse/lib/scope/index.js | 30 +- node_modules/babel-traverse/lib/visitors.js | 2 +- .../babel-traverse/node_modules/.bin/babylon | 1 + .../node_modules/lodash/LICENSE | 47 - .../node_modules/lodash/README.md | 39 - .../node_modules/lodash/_DataView.js | 7 - .../node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_LazyWrapper.js | 28 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../node_modules/lodash/_Map.js | 7 - .../node_modules/lodash/_MapCache.js | 32 - .../node_modules/lodash/_Promise.js | 7 - .../node_modules/lodash/_Set.js | 7 - .../node_modules/lodash/_SetCache.js | 27 - .../node_modules/lodash/_Stack.js | 27 - .../node_modules/lodash/_Symbol.js | 6 - .../node_modules/lodash/_Uint8Array.js | 6 - .../node_modules/lodash/_WeakMap.js | 7 - .../node_modules/lodash/_addMapEntry.js | 15 - .../node_modules/lodash/_addSetEntry.js | 15 - .../node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayPush.js | 20 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseClamp.js | 22 - .../node_modules/lodash/_baseClone.js | 133 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../node_modules/lodash/_baseCreate.js | 30 - .../node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../node_modules/lodash/_baseFill.js | 32 - .../node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../node_modules/lodash/_baseFindKey.js | 23 - .../node_modules/lodash/_baseFlatten.js | 38 - .../node_modules/lodash/_baseFor.js | 16 - .../node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../node_modules/lodash/_baseGetTag.js | 22 - .../node_modules/lodash/_baseGt.js | 14 - .../node_modules/lodash/_baseHas.js | 19 - .../node_modules/lodash/_baseHasIn.js | 13 - .../node_modules/lodash/_baseInRange.js | 18 - .../node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../node_modules/lodash/_baseInvoke.js | 28 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../node_modules/lodash/_baseIsDate.js | 27 - .../node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 89 - .../node_modules/lodash/_baseIsMap.js | 18 - .../node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseIteratee.js | 31 - .../node_modules/lodash/_baseKeys.js | 30 - .../node_modules/lodash/_baseKeysIn.js | 33 - .../node_modules/lodash/_baseLodash.js | 10 - .../node_modules/lodash/_baseLt.js | 14 - .../node_modules/lodash/_baseMap.js | 22 - .../node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../node_modules/lodash/_baseNth.js | 20 - .../node_modules/lodash/_baseOrderBy.js | 34 - .../node_modules/lodash/_basePick.js | 19 - .../node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../node_modules/lodash/_basePullAll.js | 51 - .../node_modules/lodash/_basePullAt.js | 50 - .../node_modules/lodash/_baseRandom.js | 18 - .../node_modules/lodash/_baseRange.js | 28 - .../node_modules/lodash/_baseReduce.js | 23 - .../node_modules/lodash/_baseRepeat.js | 35 - .../node_modules/lodash/_baseRest.js | 17 - .../node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../node_modules/lodash/_baseSet.js | 48 - .../node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../node_modules/lodash/_baseShuffle.js | 15 - .../node_modules/lodash/_baseSlice.js | 31 - .../node_modules/lodash/_baseSome.js | 22 - .../node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../node_modules/lodash/_baseSum.js | 24 - .../node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../node_modules/lodash/_baseUnary.js | 14 - .../node_modules/lodash/_baseUniq.js | 72 - .../node_modules/lodash/_baseUnset.js | 29 - .../node_modules/lodash/_baseUpdate.js | 18 - .../node_modules/lodash/_baseValues.js | 19 - .../node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../node_modules/lodash/_castPath.js | 15 - .../node_modules/lodash/_castRest.js | 14 - .../node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../node_modules/lodash/_cloneMap.js | 19 - .../node_modules/lodash/_cloneRegExp.js | 17 - .../node_modules/lodash/_cloneSet.js | 19 - .../node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../node_modules/lodash/_copyArray.js | 20 - .../node_modules/lodash/_copyObject.js | 40 - .../node_modules/lodash/_copySymbols.js | 16 - .../node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtor.js | 37 - .../node_modules/lodash/_createCurry.js | 46 - .../node_modules/lodash/_createFind.js | 25 - .../node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../node_modules/lodash/_createRound.js | 33 - .../node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrap.js | 107 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../node_modules/lodash/_equalArrays.js | 84 - .../node_modules/lodash/_equalByTag.js | 113 - .../node_modules/lodash/_equalObjects.js | 90 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../node_modules/lodash/_flatRest.js | 16 - .../node_modules/lodash/_freeGlobal.js | 4 - .../node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../node_modules/lodash/_getData.js | 15 - .../node_modules/lodash/_getFuncName.js | 31 - .../node_modules/lodash/_getHolder.js | 13 - .../node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 26 - .../node_modules/lodash/_getTag.js | 68 - .../node_modules/lodash/_getValue.js | 13 - .../node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../node_modules/lodash/_hasPath.js | 40 - .../node_modules/lodash/_hasUnicode.js | 24 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../node_modules/lodash/_hashClear.js | 15 - .../node_modules/lodash/_hashDelete.js | 17 - .../node_modules/lodash/_hashGet.js | 30 - .../node_modules/lodash/_hashHas.js | 23 - .../node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../node_modules/lodash/_isKey.js | 29 - .../node_modules/lodash/_isKeyable.js | 15 - .../node_modules/lodash/_isLaziable.js | 28 - .../node_modules/lodash/_isMaskable.js | 14 - .../node_modules/lodash/_isMasked.js | 20 - .../node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../node_modules/lodash/_lazyClone.js | 23 - .../node_modules/lodash/_lazyReverse.js | 23 - .../node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../node_modules/lodash/_mapCacheGet.js | 16 - .../node_modules/lodash/_mapCacheHas.js | 16 - .../node_modules/lodash/_mapCacheSet.js | 22 - .../node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../node_modules/lodash/_nodeUtil.js | 22 - .../node_modules/lodash/_overArg.js | 15 - .../node_modules/lodash/_overRest.js | 36 - .../node_modules/lodash/_parent.js | 16 - .../node_modules/lodash/_reEscape.js | 4 - .../node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../node_modules/lodash/_realNames.js | 4 - .../node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../node_modules/lodash/_root.js | 9 - .../node_modules/lodash/_setCacheAdd.js | 19 - .../node_modules/lodash/_setCacheHas.js | 14 - .../node_modules/lodash/_setData.js | 20 - .../node_modules/lodash/_setToArray.js | 18 - .../node_modules/lodash/_setToPairs.js | 18 - .../node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_shuffleSelf.js | 28 - .../node_modules/lodash/_stackClear.js | 15 - .../node_modules/lodash/_stackDelete.js | 18 - .../node_modules/lodash/_stackGet.js | 14 - .../node_modules/lodash/_stackHas.js | 14 - .../node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 31 - .../node_modules/lodash/_toKey.js | 21 - .../node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../node_modules/lodash/_unicodeSize.js | 42 - .../node_modules/lodash/_unicodeToArray.js | 38 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - .../babel-traverse/node_modules/lodash/add.js | 22 - .../node_modules/lodash/after.js | 42 - .../node_modules/lodash/array.js | 67 - .../babel-traverse/node_modules/lodash/ary.js | 29 - .../node_modules/lodash/assign.js | 58 - .../node_modules/lodash/assignIn.js | 40 - .../node_modules/lodash/assignInWith.js | 38 - .../node_modules/lodash/assignWith.js | 37 - .../babel-traverse/node_modules/lodash/at.js | 23 - .../node_modules/lodash/attempt.js | 35 - .../node_modules/lodash/before.js | 40 - .../node_modules/lodash/bind.js | 57 - .../node_modules/lodash/bindAll.js | 41 - .../node_modules/lodash/bindKey.js | 68 - .../node_modules/lodash/camelCase.js | 29 - .../node_modules/lodash/capitalize.js | 23 - .../node_modules/lodash/castArray.js | 44 - .../node_modules/lodash/ceil.js | 26 - .../node_modules/lodash/chain.js | 38 - .../node_modules/lodash/chunk.js | 50 - .../node_modules/lodash/clamp.js | 39 - .../node_modules/lodash/clone.js | 33 - .../node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../node_modules/lodash/cloneWith.js | 38 - .../node_modules/lodash/collection.js | 30 - .../node_modules/lodash/commit.js | 33 - .../node_modules/lodash/compact.js | 31 - .../node_modules/lodash/concat.js | 43 - .../node_modules/lodash/cond.js | 60 - .../node_modules/lodash/conforms.js | 32 - .../node_modules/lodash/conformsTo.js | 32 - .../node_modules/lodash/constant.js | 26 - .../node_modules/lodash/core.js | 3831 ---- .../node_modules/lodash/core.min.js | 29 - .../node_modules/lodash/countBy.js | 41 - .../node_modules/lodash/create.js | 43 - .../node_modules/lodash/curry.js | 57 - .../node_modules/lodash/curryRight.js | 54 - .../node_modules/lodash/date.js | 3 - .../node_modules/lodash/debounce.js | 188 - .../node_modules/lodash/deburr.js | 43 - .../node_modules/lodash/defaultTo.js | 25 - .../node_modules/lodash/defaults.js | 32 - .../node_modules/lodash/defaultsDeep.js | 30 - .../node_modules/lodash/defer.js | 26 - .../node_modules/lodash/delay.js | 28 - .../node_modules/lodash/difference.js | 33 - .../node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../node_modules/lodash/divide.js | 22 - .../node_modules/lodash/drop.js | 38 - .../node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../node_modules/lodash/dropWhile.js | 46 - .../node_modules/lodash/each.js | 1 - .../node_modules/lodash/eachRight.js | 1 - .../node_modules/lodash/endsWith.js | 43 - .../node_modules/lodash/entries.js | 1 - .../node_modules/lodash/entriesIn.js | 1 - .../babel-traverse/node_modules/lodash/eq.js | 37 - .../node_modules/lodash/escape.js | 43 - .../node_modules/lodash/escapeRegExp.js | 32 - .../node_modules/lodash/every.js | 57 - .../node_modules/lodash/extend.js | 1 - .../node_modules/lodash/extendWith.js | 1 - .../node_modules/lodash/fill.js | 45 - .../node_modules/lodash/filter.js | 49 - .../node_modules/lodash/find.js | 43 - .../node_modules/lodash/findIndex.js | 56 - .../node_modules/lodash/findKey.js | 44 - .../node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../node_modules/lodash/findLastKey.js | 44 - .../node_modules/lodash/first.js | 1 - .../node_modules/lodash/flatMap.js | 30 - .../node_modules/lodash/flatMapDeep.js | 32 - .../node_modules/lodash/flatMapDepth.js | 32 - .../node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../node_modules/lodash/flip.js | 28 - .../node_modules/lodash/floor.js | 26 - .../node_modules/lodash/flow.js | 27 - .../node_modules/lodash/flowRight.js | 26 - .../node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../babel-traverse/node_modules/lodash/fp.js | 2 - .../node_modules/lodash/fp/F.js | 1 - .../node_modules/lodash/fp/T.js | 1 - .../node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../node_modules/lodash/fp/_mapping.js | 367 - .../node_modules/lodash/fp/_util.js | 15 - .../node_modules/lodash/fp/add.js | 5 - .../node_modules/lodash/fp/after.js | 5 - .../node_modules/lodash/fp/all.js | 1 - .../node_modules/lodash/fp/allPass.js | 1 - .../node_modules/lodash/fp/always.js | 1 - .../node_modules/lodash/fp/any.js | 1 - .../node_modules/lodash/fp/anyPass.js | 1 - .../node_modules/lodash/fp/apply.js | 1 - .../node_modules/lodash/fp/array.js | 2 - .../node_modules/lodash/fp/ary.js | 5 - .../node_modules/lodash/fp/assign.js | 5 - .../node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../node_modules/lodash/fp/assoc.js | 1 - .../node_modules/lodash/fp/assocPath.js | 1 - .../node_modules/lodash/fp/at.js | 5 - .../node_modules/lodash/fp/attempt.js | 5 - .../node_modules/lodash/fp/before.js | 5 - .../node_modules/lodash/fp/bind.js | 5 - .../node_modules/lodash/fp/bindAll.js | 5 - .../node_modules/lodash/fp/bindKey.js | 5 - .../node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../node_modules/lodash/fp/castArray.js | 5 - .../node_modules/lodash/fp/ceil.js | 5 - .../node_modules/lodash/fp/chain.js | 5 - .../node_modules/lodash/fp/chunk.js | 5 - .../node_modules/lodash/fp/clamp.js | 5 - .../node_modules/lodash/fp/clone.js | 5 - .../node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../node_modules/lodash/fp/commit.js | 5 - .../node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../node_modules/lodash/fp/compose.js | 1 - .../node_modules/lodash/fp/concat.js | 5 - .../node_modules/lodash/fp/cond.js | 5 - .../node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../node_modules/lodash/fp/constant.js | 5 - .../node_modules/lodash/fp/contains.js | 1 - .../node_modules/lodash/fp/convert.js | 18 - .../node_modules/lodash/fp/countBy.js | 5 - .../node_modules/lodash/fp/create.js | 5 - .../node_modules/lodash/fp/curry.js | 5 - .../node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../node_modules/lodash/fp/date.js | 2 - .../node_modules/lodash/fp/debounce.js | 5 - .../node_modules/lodash/fp/deburr.js | 5 - .../node_modules/lodash/fp/defaultTo.js | 5 - .../node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../node_modules/lodash/fp/defer.js | 5 - .../node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../node_modules/lodash/fp/divide.js | 5 - .../node_modules/lodash/fp/drop.js | 5 - .../node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../node_modules/lodash/fp/dropWhile.js | 5 - .../node_modules/lodash/fp/each.js | 1 - .../node_modules/lodash/fp/eachRight.js | 1 - .../node_modules/lodash/fp/endsWith.js | 5 - .../node_modules/lodash/fp/entries.js | 1 - .../node_modules/lodash/fp/entriesIn.js | 1 - .../node_modules/lodash/fp/eq.js | 5 - .../node_modules/lodash/fp/equals.js | 1 - .../node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../node_modules/lodash/fp/every.js | 5 - .../node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../node_modules/lodash/fp/fill.js | 5 - .../node_modules/lodash/fp/filter.js | 5 - .../node_modules/lodash/fp/find.js | 5 - .../node_modules/lodash/fp/findFrom.js | 5 - .../node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../node_modules/lodash/fp/findKey.js | 5 - .../node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../node_modules/lodash/fp/first.js | 1 - .../node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../node_modules/lodash/fp/flip.js | 5 - .../node_modules/lodash/fp/floor.js | 5 - .../node_modules/lodash/fp/flow.js | 5 - .../node_modules/lodash/fp/flowRight.js | 5 - .../node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../node_modules/lodash/fp/fromPairs.js | 5 - .../node_modules/lodash/fp/function.js | 2 - .../node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../node_modules/lodash/fp/get.js | 5 - .../node_modules/lodash/fp/getOr.js | 5 - .../node_modules/lodash/fp/groupBy.js | 5 - .../node_modules/lodash/fp/gt.js | 5 - .../node_modules/lodash/fp/gte.js | 5 - .../node_modules/lodash/fp/has.js | 5 - .../node_modules/lodash/fp/hasIn.js | 5 - .../node_modules/lodash/fp/head.js | 5 - .../node_modules/lodash/fp/identical.js | 1 - .../node_modules/lodash/fp/identity.js | 5 - .../node_modules/lodash/fp/inRange.js | 5 - .../node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../node_modules/lodash/fp/indexBy.js | 1 - .../node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../node_modules/lodash/fp/init.js | 1 - .../node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../node_modules/lodash/fp/invert.js | 5 - .../node_modules/lodash/fp/invertBy.js | 5 - .../node_modules/lodash/fp/invertObj.js | 1 - .../node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../node_modules/lodash/fp/isBoolean.js | 5 - .../node_modules/lodash/fp/isBuffer.js | 5 - .../node_modules/lodash/fp/isDate.js | 5 - .../node_modules/lodash/fp/isElement.js | 5 - .../node_modules/lodash/fp/isEmpty.js | 5 - .../node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../node_modules/lodash/fp/isError.js | 5 - .../node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../node_modules/lodash/fp/isInteger.js | 5 - .../node_modules/lodash/fp/isLength.js | 5 - .../node_modules/lodash/fp/isMap.js | 5 - .../node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../node_modules/lodash/fp/isNaN.js | 5 - .../node_modules/lodash/fp/isNative.js | 5 - .../node_modules/lodash/fp/isNil.js | 5 - .../node_modules/lodash/fp/isNull.js | 5 - .../node_modules/lodash/fp/isNumber.js | 5 - .../node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../node_modules/lodash/fp/isSet.js | 5 - .../node_modules/lodash/fp/isString.js | 5 - .../node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../node_modules/lodash/fp/isWeakMap.js | 5 - .../node_modules/lodash/fp/isWeakSet.js | 5 - .../node_modules/lodash/fp/iteratee.js | 5 - .../node_modules/lodash/fp/join.js | 5 - .../node_modules/lodash/fp/juxt.js | 1 - .../node_modules/lodash/fp/kebabCase.js | 5 - .../node_modules/lodash/fp/keyBy.js | 5 - .../node_modules/lodash/fp/keys.js | 5 - .../node_modules/lodash/fp/keysIn.js | 5 - .../node_modules/lodash/fp/lang.js | 2 - .../node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../node_modules/lodash/fp/lt.js | 5 - .../node_modules/lodash/fp/lte.js | 5 - .../node_modules/lodash/fp/map.js | 5 - .../node_modules/lodash/fp/mapKeys.js | 5 - .../node_modules/lodash/fp/mapValues.js | 5 - .../node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../node_modules/lodash/fp/math.js | 2 - .../node_modules/lodash/fp/max.js | 5 - .../node_modules/lodash/fp/maxBy.js | 5 - .../node_modules/lodash/fp/mean.js | 5 - .../node_modules/lodash/fp/meanBy.js | 5 - .../node_modules/lodash/fp/memoize.js | 5 - .../node_modules/lodash/fp/merge.js | 5 - .../node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../node_modules/lodash/fp/mergeWith.js | 5 - .../node_modules/lodash/fp/method.js | 5 - .../node_modules/lodash/fp/methodOf.js | 5 - .../node_modules/lodash/fp/min.js | 5 - .../node_modules/lodash/fp/minBy.js | 5 - .../node_modules/lodash/fp/mixin.js | 5 - .../node_modules/lodash/fp/multiply.js | 5 - .../node_modules/lodash/fp/nAry.js | 1 - .../node_modules/lodash/fp/negate.js | 5 - .../node_modules/lodash/fp/next.js | 5 - .../node_modules/lodash/fp/noop.js | 5 - .../node_modules/lodash/fp/now.js | 5 - .../node_modules/lodash/fp/nth.js | 5 - .../node_modules/lodash/fp/nthArg.js | 5 - .../node_modules/lodash/fp/number.js | 2 - .../node_modules/lodash/fp/object.js | 2 - .../node_modules/lodash/fp/omit.js | 5 - .../node_modules/lodash/fp/omitAll.js | 1 - .../node_modules/lodash/fp/omitBy.js | 5 - .../node_modules/lodash/fp/once.js | 5 - .../node_modules/lodash/fp/orderBy.js | 5 - .../node_modules/lodash/fp/over.js | 5 - .../node_modules/lodash/fp/overArgs.js | 5 - .../node_modules/lodash/fp/overEvery.js | 5 - .../node_modules/lodash/fp/overSome.js | 5 - .../node_modules/lodash/fp/pad.js | 5 - .../node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../node_modules/lodash/fp/padEnd.js | 5 - .../node_modules/lodash/fp/padStart.js | 5 - .../node_modules/lodash/fp/parseInt.js | 5 - .../node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../node_modules/lodash/fp/partition.js | 5 - .../node_modules/lodash/fp/path.js | 1 - .../node_modules/lodash/fp/pathEq.js | 1 - .../node_modules/lodash/fp/pathOr.js | 1 - .../node_modules/lodash/fp/paths.js | 1 - .../node_modules/lodash/fp/pick.js | 5 - .../node_modules/lodash/fp/pickAll.js | 1 - .../node_modules/lodash/fp/pickBy.js | 5 - .../node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../node_modules/lodash/fp/plant.js | 5 - .../node_modules/lodash/fp/pluck.js | 1 - .../node_modules/lodash/fp/prop.js | 1 - .../node_modules/lodash/fp/propEq.js | 1 - .../node_modules/lodash/fp/propOr.js | 1 - .../node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../node_modules/lodash/fp/props.js | 1 - .../node_modules/lodash/fp/pull.js | 5 - .../node_modules/lodash/fp/pullAll.js | 5 - .../node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../node_modules/lodash/fp/pullAt.js | 5 - .../node_modules/lodash/fp/random.js | 5 - .../node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../node_modules/lodash/fp/rearg.js | 5 - .../node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../node_modules/lodash/fp/reject.js | 5 - .../node_modules/lodash/fp/remove.js | 5 - .../node_modules/lodash/fp/repeat.js | 5 - .../node_modules/lodash/fp/replace.js | 5 - .../node_modules/lodash/fp/rest.js | 5 - .../node_modules/lodash/fp/restFrom.js | 5 - .../node_modules/lodash/fp/result.js | 5 - .../node_modules/lodash/fp/reverse.js | 5 - .../node_modules/lodash/fp/round.js | 5 - .../node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../node_modules/lodash/fp/seq.js | 2 - .../node_modules/lodash/fp/set.js | 5 - .../node_modules/lodash/fp/setWith.js | 5 - .../node_modules/lodash/fp/shuffle.js | 5 - .../node_modules/lodash/fp/size.js | 5 - .../node_modules/lodash/fp/slice.js | 5 - .../node_modules/lodash/fp/snakeCase.js | 5 - .../node_modules/lodash/fp/some.js | 5 - .../node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../node_modules/lodash/fp/split.js | 5 - .../node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../node_modules/lodash/fp/string.js | 2 - .../node_modules/lodash/fp/stubArray.js | 5 - .../node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../node_modules/lodash/fp/stubTrue.js | 5 - .../node_modules/lodash/fp/subtract.js | 5 - .../node_modules/lodash/fp/sum.js | 5 - .../node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../node_modules/lodash/fp/tail.js | 5 - .../node_modules/lodash/fp/take.js | 5 - .../node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../node_modules/lodash/fp/takeWhile.js | 5 - .../node_modules/lodash/fp/tap.js | 5 - .../node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../node_modules/lodash/fp/throttle.js | 5 - .../node_modules/lodash/fp/thru.js | 5 - .../node_modules/lodash/fp/times.js | 5 - .../node_modules/lodash/fp/toArray.js | 5 - .../node_modules/lodash/fp/toFinite.js | 5 - .../node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../node_modules/lodash/fp/toJSON.js | 5 - .../node_modules/lodash/fp/toLength.js | 5 - .../node_modules/lodash/fp/toLower.js | 5 - .../node_modules/lodash/fp/toNumber.js | 5 - .../node_modules/lodash/fp/toPairs.js | 5 - .../node_modules/lodash/fp/toPairsIn.js | 5 - .../node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../node_modules/lodash/fp/toString.js | 5 - .../node_modules/lodash/fp/toUpper.js | 5 - .../node_modules/lodash/fp/transform.js | 5 - .../node_modules/lodash/fp/trim.js | 5 - .../node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../node_modules/lodash/fp/trimEnd.js | 5 - .../node_modules/lodash/fp/trimStart.js | 5 - .../node_modules/lodash/fp/truncate.js | 5 - .../node_modules/lodash/fp/unapply.js | 1 - .../node_modules/lodash/fp/unary.js | 5 - .../node_modules/lodash/fp/unescape.js | 5 - .../node_modules/lodash/fp/union.js | 5 - .../node_modules/lodash/fp/unionBy.js | 5 - .../node_modules/lodash/fp/unionWith.js | 5 - .../node_modules/lodash/fp/uniq.js | 5 - .../node_modules/lodash/fp/uniqBy.js | 5 - .../node_modules/lodash/fp/uniqWith.js | 5 - .../node_modules/lodash/fp/uniqueId.js | 5 - .../node_modules/lodash/fp/unnest.js | 1 - .../node_modules/lodash/fp/unset.js | 5 - .../node_modules/lodash/fp/unzip.js | 5 - .../node_modules/lodash/fp/unzipWith.js | 5 - .../node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../node_modules/lodash/fp/useWith.js | 1 - .../node_modules/lodash/fp/util.js | 2 - .../node_modules/lodash/fp/value.js | 5 - .../node_modules/lodash/fp/valueOf.js | 5 - .../node_modules/lodash/fp/values.js | 5 - .../node_modules/lodash/fp/valuesIn.js | 5 - .../node_modules/lodash/fp/where.js | 1 - .../node_modules/lodash/fp/whereEq.js | 1 - .../node_modules/lodash/fp/without.js | 5 - .../node_modules/lodash/fp/words.js | 5 - .../node_modules/lodash/fp/wrap.js | 5 - .../node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../node_modules/lodash/fp/xor.js | 5 - .../node_modules/lodash/fp/xorBy.js | 5 - .../node_modules/lodash/fp/xorWith.js | 5 - .../node_modules/lodash/fp/zip.js | 5 - .../node_modules/lodash/fp/zipAll.js | 5 - .../node_modules/lodash/fp/zipObj.js | 1 - .../node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../node_modules/lodash/fp/zipWith.js | 5 - .../node_modules/lodash/fromPairs.js | 28 - .../node_modules/lodash/function.js | 25 - .../node_modules/lodash/functions.js | 31 - .../node_modules/lodash/functionsIn.js | 31 - .../babel-traverse/node_modules/lodash/get.js | 33 - .../node_modules/lodash/groupBy.js | 42 - .../babel-traverse/node_modules/lodash/gt.js | 29 - .../babel-traverse/node_modules/lodash/gte.js | 30 - .../babel-traverse/node_modules/lodash/has.js | 35 - .../node_modules/lodash/hasIn.js | 34 - .../node_modules/lodash/head.js | 23 - .../node_modules/lodash/identity.js | 21 - .../node_modules/lodash/inRange.js | 55 - .../node_modules/lodash/includes.js | 53 - .../node_modules/lodash/index.js | 1 - .../node_modules/lodash/indexOf.js | 42 - .../node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../node_modules/lodash/invert.js | 27 - .../node_modules/lodash/invertBy.js | 44 - .../node_modules/lodash/invoke.js | 24 - .../node_modules/lodash/invokeMap.js | 44 - .../node_modules/lodash/isArguments.js | 36 - .../node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../node_modules/lodash/isBoolean.js | 38 - .../node_modules/lodash/isBuffer.js | 38 - .../node_modules/lodash/isDate.js | 27 - .../node_modules/lodash/isElement.js | 25 - .../node_modules/lodash/isEmpty.js | 74 - .../node_modules/lodash/isEqual.js | 35 - .../node_modules/lodash/isEqualWith.js | 41 - .../node_modules/lodash/isError.js | 42 - .../node_modules/lodash/isFinite.js | 36 - .../node_modules/lodash/isFunction.js | 42 - .../node_modules/lodash/isInteger.js | 33 - .../node_modules/lodash/isLength.js | 35 - .../node_modules/lodash/isMap.js | 27 - .../node_modules/lodash/isMatch.js | 36 - .../node_modules/lodash/isMatchWith.js | 41 - .../node_modules/lodash/isNaN.js | 38 - .../node_modules/lodash/isNative.js | 40 - .../node_modules/lodash/isNil.js | 25 - .../node_modules/lodash/isNull.js | 22 - .../node_modules/lodash/isNumber.js | 47 - .../node_modules/lodash/isObject.js | 31 - .../node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 68 - .../node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../node_modules/lodash/isSet.js | 27 - .../node_modules/lodash/isString.js | 39 - .../node_modules/lodash/isSymbol.js | 38 - .../node_modules/lodash/isTypedArray.js | 27 - .../node_modules/lodash/isUndefined.js | 22 - .../node_modules/lodash/isWeakMap.js | 28 - .../node_modules/lodash/isWeakSet.js | 37 - .../node_modules/lodash/iteratee.js | 50 - .../node_modules/lodash/join.js | 26 - .../node_modules/lodash/kebabCase.js | 28 - .../node_modules/lodash/keyBy.js | 37 - .../node_modules/lodash/keys.js | 37 - .../node_modules/lodash/keysIn.js | 32 - .../node_modules/lodash/lang.js | 58 - .../node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../node_modules/lodash/lodash.js | 16982 --------------- .../node_modules/lodash/lodash.min.js | 134 - .../node_modules/lodash/lowerCase.js | 27 - .../node_modules/lodash/lowerFirst.js | 22 - .../babel-traverse/node_modules/lodash/lt.js | 29 - .../babel-traverse/node_modules/lodash/lte.js | 30 - .../babel-traverse/node_modules/lodash/map.js | 53 - .../node_modules/lodash/mapKeys.js | 36 - .../node_modules/lodash/mapValues.js | 43 - .../node_modules/lodash/matches.js | 36 - .../node_modules/lodash/matchesProperty.js | 34 - .../node_modules/lodash/math.js | 17 - .../babel-traverse/node_modules/lodash/max.js | 29 - .../node_modules/lodash/maxBy.js | 34 - .../node_modules/lodash/mean.js | 22 - .../node_modules/lodash/meanBy.js | 31 - .../node_modules/lodash/memoize.js | 73 - .../node_modules/lodash/merge.js | 39 - .../node_modules/lodash/mergeWith.js | 39 - .../node_modules/lodash/method.js | 34 - .../node_modules/lodash/methodOf.js | 33 - .../babel-traverse/node_modules/lodash/min.js | 29 - .../node_modules/lodash/minBy.js | 34 - .../node_modules/lodash/mixin.js | 74 - .../node_modules/lodash/multiply.js | 22 - .../node_modules/lodash/negate.js | 40 - .../node_modules/lodash/next.js | 35 - .../node_modules/lodash/noop.js | 17 - .../babel-traverse/node_modules/lodash/now.js | 23 - .../babel-traverse/node_modules/lodash/nth.js | 29 - .../node_modules/lodash/nthArg.js | 32 - .../node_modules/lodash/number.js | 5 - .../node_modules/lodash/object.js | 49 - .../node_modules/lodash/omit.js | 35 - .../node_modules/lodash/omitBy.js | 29 - .../node_modules/lodash/once.js | 25 - .../node_modules/lodash/orderBy.js | 47 - .../node_modules/lodash/over.js | 24 - .../node_modules/lodash/overArgs.js | 61 - .../node_modules/lodash/overEvery.js | 30 - .../node_modules/lodash/overSome.js | 30 - .../node_modules/lodash/package.json | 115 - .../babel-traverse/node_modules/lodash/pad.js | 49 - .../node_modules/lodash/padEnd.js | 39 - .../node_modules/lodash/padStart.js | 39 - .../node_modules/lodash/parseInt.js | 43 - .../node_modules/lodash/partial.js | 50 - .../node_modules/lodash/partialRight.js | 49 - .../node_modules/lodash/partition.js | 43 - .../node_modules/lodash/pick.js | 27 - .../node_modules/lodash/pickBy.js | 27 - .../node_modules/lodash/plant.js | 48 - .../node_modules/lodash/property.js | 32 - .../node_modules/lodash/propertyOf.js | 30 - .../node_modules/lodash/pull.js | 29 - .../node_modules/lodash/pullAll.js | 29 - .../node_modules/lodash/pullAllBy.js | 34 - .../node_modules/lodash/pullAllWith.js | 32 - .../node_modules/lodash/pullAt.js | 43 - .../node_modules/lodash/random.js | 82 - .../node_modules/lodash/range.js | 46 - .../node_modules/lodash/rangeRight.js | 41 - .../node_modules/lodash/rearg.js | 33 - .../node_modules/lodash/reduce.js | 51 - .../node_modules/lodash/reduceRight.js | 36 - .../node_modules/lodash/reject.js | 46 - .../node_modules/lodash/remove.js | 54 - .../node_modules/lodash/repeat.js | 37 - .../node_modules/lodash/replace.js | 29 - .../node_modules/lodash/rest.js | 40 - .../node_modules/lodash/result.js | 57 - .../node_modules/lodash/reverse.js | 34 - .../node_modules/lodash/round.js | 26 - .../node_modules/lodash/sample.js | 24 - .../node_modules/lodash/sampleSize.js | 37 - .../babel-traverse/node_modules/lodash/seq.js | 16 - .../babel-traverse/node_modules/lodash/set.js | 35 - .../node_modules/lodash/setWith.js | 32 - .../node_modules/lodash/shuffle.js | 25 - .../node_modules/lodash/size.js | 46 - .../node_modules/lodash/slice.js | 37 - .../node_modules/lodash/snakeCase.js | 28 - .../node_modules/lodash/some.js | 51 - .../node_modules/lodash/sortBy.js | 48 - .../node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/sortedUniq.js | 24 - .../node_modules/lodash/sortedUniqBy.js | 26 - .../node_modules/lodash/split.js | 52 - .../node_modules/lodash/spread.js | 63 - .../node_modules/lodash/startCase.js | 29 - .../node_modules/lodash/startsWith.js | 36 - .../node_modules/lodash/string.js | 33 - .../node_modules/lodash/stubArray.js | 23 - .../node_modules/lodash/stubFalse.js | 18 - .../node_modules/lodash/stubObject.js | 23 - .../node_modules/lodash/stubString.js | 18 - .../node_modules/lodash/stubTrue.js | 18 - .../node_modules/lodash/subtract.js | 22 - .../babel-traverse/node_modules/lodash/sum.js | 24 - .../node_modules/lodash/sumBy.js | 33 - .../node_modules/lodash/tail.js | 22 - .../node_modules/lodash/take.js | 37 - .../node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../node_modules/lodash/takeWhile.js | 46 - .../babel-traverse/node_modules/lodash/tap.js | 29 - .../node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../node_modules/lodash/throttle.js | 69 - .../node_modules/lodash/thru.js | 28 - .../node_modules/lodash/times.js | 51 - .../node_modules/lodash/toArray.js | 58 - .../node_modules/lodash/toFinite.js | 42 - .../node_modules/lodash/toInteger.js | 36 - .../node_modules/lodash/toIterator.js | 23 - .../node_modules/lodash/toJSON.js | 1 - .../node_modules/lodash/toLength.js | 38 - .../node_modules/lodash/toLower.js | 28 - .../node_modules/lodash/toNumber.js | 66 - .../node_modules/lodash/toPairs.js | 30 - .../node_modules/lodash/toPairsIn.js | 30 - .../node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../node_modules/lodash/toString.js | 28 - .../node_modules/lodash/toUpper.js | 28 - .../node_modules/lodash/transform.js | 65 - .../node_modules/lodash/trim.js | 49 - .../node_modules/lodash/trimEnd.js | 43 - .../node_modules/lodash/trimStart.js | 43 - .../node_modules/lodash/truncate.js | 111 - .../node_modules/lodash/unary.js | 22 - .../node_modules/lodash/unescape.js | 34 - .../node_modules/lodash/union.js | 26 - .../node_modules/lodash/unionBy.js | 40 - .../node_modules/lodash/unionWith.js | 36 - .../node_modules/lodash/uniq.js | 27 - .../node_modules/lodash/uniqBy.js | 34 - .../node_modules/lodash/uniqWith.js | 29 - .../node_modules/lodash/uniqueId.js | 28 - .../node_modules/lodash/unset.js | 34 - .../node_modules/lodash/unzip.js | 45 - .../node_modules/lodash/unzipWith.js | 39 - .../node_modules/lodash/update.js | 35 - .../node_modules/lodash/updateWith.js | 33 - .../node_modules/lodash/upperCase.js | 27 - .../node_modules/lodash/upperFirst.js | 22 - .../node_modules/lodash/util.js | 34 - .../node_modules/lodash/value.js | 1 - .../node_modules/lodash/valueOf.js | 1 - .../node_modules/lodash/values.js | 34 - .../node_modules/lodash/valuesIn.js | 32 - .../node_modules/lodash/without.js | 31 - .../node_modules/lodash/words.js | 35 - .../node_modules/lodash/wrap.js | 31 - .../node_modules/lodash/wrapperAt.js | 48 - .../node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../node_modules/lodash/wrapperValue.js | 21 - .../babel-traverse/node_modules/lodash/xor.js | 28 - .../node_modules/lodash/xorBy.js | 40 - .../node_modules/lodash/xorWith.js | 36 - .../babel-traverse/node_modules/lodash/zip.js | 22 - .../node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../node_modules/lodash/zipWith.js | 31 - node_modules/babel-traverse/package.json | 110 +- node_modules/babel-types/README.md | 20 +- node_modules/babel-types/lib/converters.js | 4 +- .../babel-types/lib/definitions/flow.js | 4 + .../babel-types/lib/definitions/index.js | 2 +- node_modules/babel-types/lib/index.js | 2 +- .../babel-types/node_modules/lodash/LICENSE | 47 - .../babel-types/node_modules/lodash/README.md | 39 - .../node_modules/lodash/_DataView.js | 7 - .../babel-types/node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_LazyWrapper.js | 28 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../babel-types/node_modules/lodash/_Map.js | 7 - .../node_modules/lodash/_MapCache.js | 32 - .../node_modules/lodash/_Promise.js | 7 - .../babel-types/node_modules/lodash/_Set.js | 7 - .../node_modules/lodash/_SetCache.js | 27 - .../babel-types/node_modules/lodash/_Stack.js | 27 - .../node_modules/lodash/_Symbol.js | 6 - .../node_modules/lodash/_Uint8Array.js | 6 - .../node_modules/lodash/_WeakMap.js | 7 - .../node_modules/lodash/_addMapEntry.js | 15 - .../node_modules/lodash/_addSetEntry.js | 15 - .../babel-types/node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayPush.js | 20 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseClamp.js | 22 - .../node_modules/lodash/_baseClone.js | 133 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../node_modules/lodash/_baseCreate.js | 30 - .../node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../node_modules/lodash/_baseFill.js | 32 - .../node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../node_modules/lodash/_baseFindKey.js | 23 - .../node_modules/lodash/_baseFlatten.js | 38 - .../node_modules/lodash/_baseFor.js | 16 - .../node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../node_modules/lodash/_baseGetTag.js | 22 - .../node_modules/lodash/_baseGt.js | 14 - .../node_modules/lodash/_baseHas.js | 19 - .../node_modules/lodash/_baseHasIn.js | 13 - .../node_modules/lodash/_baseInRange.js | 18 - .../node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../node_modules/lodash/_baseInvoke.js | 28 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../node_modules/lodash/_baseIsDate.js | 27 - .../node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 89 - .../node_modules/lodash/_baseIsMap.js | 18 - .../node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseIteratee.js | 31 - .../node_modules/lodash/_baseKeys.js | 30 - .../node_modules/lodash/_baseKeysIn.js | 33 - .../node_modules/lodash/_baseLodash.js | 10 - .../node_modules/lodash/_baseLt.js | 14 - .../node_modules/lodash/_baseMap.js | 22 - .../node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../node_modules/lodash/_baseNth.js | 20 - .../node_modules/lodash/_baseOrderBy.js | 34 - .../node_modules/lodash/_basePick.js | 19 - .../node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../node_modules/lodash/_basePullAll.js | 51 - .../node_modules/lodash/_basePullAt.js | 50 - .../node_modules/lodash/_baseRandom.js | 18 - .../node_modules/lodash/_baseRange.js | 28 - .../node_modules/lodash/_baseReduce.js | 23 - .../node_modules/lodash/_baseRepeat.js | 35 - .../node_modules/lodash/_baseRest.js | 17 - .../node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../node_modules/lodash/_baseSet.js | 48 - .../node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../node_modules/lodash/_baseShuffle.js | 15 - .../node_modules/lodash/_baseSlice.js | 31 - .../node_modules/lodash/_baseSome.js | 22 - .../node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../node_modules/lodash/_baseSum.js | 24 - .../node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../node_modules/lodash/_baseUnary.js | 14 - .../node_modules/lodash/_baseUniq.js | 72 - .../node_modules/lodash/_baseUnset.js | 29 - .../node_modules/lodash/_baseUpdate.js | 18 - .../node_modules/lodash/_baseValues.js | 19 - .../node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../node_modules/lodash/_castPath.js | 15 - .../node_modules/lodash/_castRest.js | 14 - .../node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../node_modules/lodash/_cloneMap.js | 19 - .../node_modules/lodash/_cloneRegExp.js | 17 - .../node_modules/lodash/_cloneSet.js | 19 - .../node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../node_modules/lodash/_copyArray.js | 20 - .../node_modules/lodash/_copyObject.js | 40 - .../node_modules/lodash/_copySymbols.js | 16 - .../node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtor.js | 37 - .../node_modules/lodash/_createCurry.js | 46 - .../node_modules/lodash/_createFind.js | 25 - .../node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../node_modules/lodash/_createRound.js | 33 - .../node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrap.js | 107 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../node_modules/lodash/_equalArrays.js | 84 - .../node_modules/lodash/_equalByTag.js | 113 - .../node_modules/lodash/_equalObjects.js | 90 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../node_modules/lodash/_flatRest.js | 16 - .../node_modules/lodash/_freeGlobal.js | 4 - .../node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../node_modules/lodash/_getData.js | 15 - .../node_modules/lodash/_getFuncName.js | 31 - .../node_modules/lodash/_getHolder.js | 13 - .../node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 26 - .../node_modules/lodash/_getTag.js | 68 - .../node_modules/lodash/_getValue.js | 13 - .../node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../node_modules/lodash/_hasPath.js | 40 - .../node_modules/lodash/_hasUnicode.js | 24 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../node_modules/lodash/_hashClear.js | 15 - .../node_modules/lodash/_hashDelete.js | 17 - .../node_modules/lodash/_hashGet.js | 30 - .../node_modules/lodash/_hashHas.js | 23 - .../node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../babel-types/node_modules/lodash/_isKey.js | 29 - .../node_modules/lodash/_isKeyable.js | 15 - .../node_modules/lodash/_isLaziable.js | 28 - .../node_modules/lodash/_isMaskable.js | 14 - .../node_modules/lodash/_isMasked.js | 20 - .../node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../node_modules/lodash/_lazyClone.js | 23 - .../node_modules/lodash/_lazyReverse.js | 23 - .../node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../node_modules/lodash/_mapCacheGet.js | 16 - .../node_modules/lodash/_mapCacheHas.js | 16 - .../node_modules/lodash/_mapCacheSet.js | 22 - .../node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../node_modules/lodash/_nodeUtil.js | 22 - .../node_modules/lodash/_overArg.js | 15 - .../node_modules/lodash/_overRest.js | 36 - .../node_modules/lodash/_parent.js | 16 - .../node_modules/lodash/_reEscape.js | 4 - .../node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../node_modules/lodash/_realNames.js | 4 - .../node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../babel-types/node_modules/lodash/_root.js | 9 - .../node_modules/lodash/_setCacheAdd.js | 19 - .../node_modules/lodash/_setCacheHas.js | 14 - .../node_modules/lodash/_setData.js | 20 - .../node_modules/lodash/_setToArray.js | 18 - .../node_modules/lodash/_setToPairs.js | 18 - .../node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_shuffleSelf.js | 28 - .../node_modules/lodash/_stackClear.js | 15 - .../node_modules/lodash/_stackDelete.js | 18 - .../node_modules/lodash/_stackGet.js | 14 - .../node_modules/lodash/_stackHas.js | 14 - .../node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 31 - .../babel-types/node_modules/lodash/_toKey.js | 21 - .../node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../node_modules/lodash/_unicodeSize.js | 42 - .../node_modules/lodash/_unicodeToArray.js | 38 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - .../babel-types/node_modules/lodash/add.js | 22 - .../babel-types/node_modules/lodash/after.js | 42 - .../babel-types/node_modules/lodash/array.js | 67 - .../babel-types/node_modules/lodash/ary.js | 29 - .../babel-types/node_modules/lodash/assign.js | 58 - .../node_modules/lodash/assignIn.js | 40 - .../node_modules/lodash/assignInWith.js | 38 - .../node_modules/lodash/assignWith.js | 37 - .../babel-types/node_modules/lodash/at.js | 23 - .../node_modules/lodash/attempt.js | 35 - .../babel-types/node_modules/lodash/before.js | 40 - .../babel-types/node_modules/lodash/bind.js | 57 - .../node_modules/lodash/bindAll.js | 41 - .../node_modules/lodash/bindKey.js | 68 - .../node_modules/lodash/camelCase.js | 29 - .../node_modules/lodash/capitalize.js | 23 - .../node_modules/lodash/castArray.js | 44 - .../babel-types/node_modules/lodash/ceil.js | 26 - .../babel-types/node_modules/lodash/chain.js | 38 - .../babel-types/node_modules/lodash/chunk.js | 50 - .../babel-types/node_modules/lodash/clamp.js | 39 - .../babel-types/node_modules/lodash/clone.js | 33 - .../node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../node_modules/lodash/cloneWith.js | 38 - .../node_modules/lodash/collection.js | 30 - .../babel-types/node_modules/lodash/commit.js | 33 - .../node_modules/lodash/compact.js | 31 - .../babel-types/node_modules/lodash/concat.js | 43 - .../babel-types/node_modules/lodash/cond.js | 60 - .../node_modules/lodash/conforms.js | 32 - .../node_modules/lodash/conformsTo.js | 32 - .../node_modules/lodash/constant.js | 26 - .../babel-types/node_modules/lodash/core.js | 3831 ---- .../node_modules/lodash/core.min.js | 29 - .../node_modules/lodash/countBy.js | 41 - .../babel-types/node_modules/lodash/create.js | 43 - .../babel-types/node_modules/lodash/curry.js | 57 - .../node_modules/lodash/curryRight.js | 54 - .../babel-types/node_modules/lodash/date.js | 3 - .../node_modules/lodash/debounce.js | 188 - .../babel-types/node_modules/lodash/deburr.js | 43 - .../node_modules/lodash/defaultTo.js | 25 - .../node_modules/lodash/defaults.js | 32 - .../node_modules/lodash/defaultsDeep.js | 30 - .../babel-types/node_modules/lodash/defer.js | 26 - .../babel-types/node_modules/lodash/delay.js | 28 - .../node_modules/lodash/difference.js | 33 - .../node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../babel-types/node_modules/lodash/divide.js | 22 - .../babel-types/node_modules/lodash/drop.js | 38 - .../node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../node_modules/lodash/dropWhile.js | 46 - .../babel-types/node_modules/lodash/each.js | 1 - .../node_modules/lodash/eachRight.js | 1 - .../node_modules/lodash/endsWith.js | 43 - .../node_modules/lodash/entries.js | 1 - .../node_modules/lodash/entriesIn.js | 1 - .../babel-types/node_modules/lodash/eq.js | 37 - .../babel-types/node_modules/lodash/escape.js | 43 - .../node_modules/lodash/escapeRegExp.js | 32 - .../babel-types/node_modules/lodash/every.js | 57 - .../babel-types/node_modules/lodash/extend.js | 1 - .../node_modules/lodash/extendWith.js | 1 - .../babel-types/node_modules/lodash/fill.js | 45 - .../babel-types/node_modules/lodash/filter.js | 49 - .../babel-types/node_modules/lodash/find.js | 43 - .../node_modules/lodash/findIndex.js | 56 - .../node_modules/lodash/findKey.js | 44 - .../node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../node_modules/lodash/findLastKey.js | 44 - .../babel-types/node_modules/lodash/first.js | 1 - .../node_modules/lodash/flatMap.js | 30 - .../node_modules/lodash/flatMapDeep.js | 32 - .../node_modules/lodash/flatMapDepth.js | 32 - .../node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../babel-types/node_modules/lodash/flip.js | 28 - .../babel-types/node_modules/lodash/floor.js | 26 - .../babel-types/node_modules/lodash/flow.js | 27 - .../node_modules/lodash/flowRight.js | 26 - .../node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../babel-types/node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../babel-types/node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../babel-types/node_modules/lodash/fp.js | 2 - .../babel-types/node_modules/lodash/fp/F.js | 1 - .../babel-types/node_modules/lodash/fp/T.js | 1 - .../babel-types/node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../node_modules/lodash/fp/_mapping.js | 367 - .../node_modules/lodash/fp/_util.js | 15 - .../babel-types/node_modules/lodash/fp/add.js | 5 - .../node_modules/lodash/fp/after.js | 5 - .../babel-types/node_modules/lodash/fp/all.js | 1 - .../node_modules/lodash/fp/allPass.js | 1 - .../node_modules/lodash/fp/always.js | 1 - .../babel-types/node_modules/lodash/fp/any.js | 1 - .../node_modules/lodash/fp/anyPass.js | 1 - .../node_modules/lodash/fp/apply.js | 1 - .../node_modules/lodash/fp/array.js | 2 - .../babel-types/node_modules/lodash/fp/ary.js | 5 - .../node_modules/lodash/fp/assign.js | 5 - .../node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../node_modules/lodash/fp/assoc.js | 1 - .../node_modules/lodash/fp/assocPath.js | 1 - .../babel-types/node_modules/lodash/fp/at.js | 5 - .../node_modules/lodash/fp/attempt.js | 5 - .../node_modules/lodash/fp/before.js | 5 - .../node_modules/lodash/fp/bind.js | 5 - .../node_modules/lodash/fp/bindAll.js | 5 - .../node_modules/lodash/fp/bindKey.js | 5 - .../node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../node_modules/lodash/fp/castArray.js | 5 - .../node_modules/lodash/fp/ceil.js | 5 - .../node_modules/lodash/fp/chain.js | 5 - .../node_modules/lodash/fp/chunk.js | 5 - .../node_modules/lodash/fp/clamp.js | 5 - .../node_modules/lodash/fp/clone.js | 5 - .../node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../node_modules/lodash/fp/commit.js | 5 - .../node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../node_modules/lodash/fp/compose.js | 1 - .../node_modules/lodash/fp/concat.js | 5 - .../node_modules/lodash/fp/cond.js | 5 - .../node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../node_modules/lodash/fp/constant.js | 5 - .../node_modules/lodash/fp/contains.js | 1 - .../node_modules/lodash/fp/convert.js | 18 - .../node_modules/lodash/fp/countBy.js | 5 - .../node_modules/lodash/fp/create.js | 5 - .../node_modules/lodash/fp/curry.js | 5 - .../node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../node_modules/lodash/fp/date.js | 2 - .../node_modules/lodash/fp/debounce.js | 5 - .../node_modules/lodash/fp/deburr.js | 5 - .../node_modules/lodash/fp/defaultTo.js | 5 - .../node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../node_modules/lodash/fp/defer.js | 5 - .../node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../node_modules/lodash/fp/divide.js | 5 - .../node_modules/lodash/fp/drop.js | 5 - .../node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../node_modules/lodash/fp/dropWhile.js | 5 - .../node_modules/lodash/fp/each.js | 1 - .../node_modules/lodash/fp/eachRight.js | 1 - .../node_modules/lodash/fp/endsWith.js | 5 - .../node_modules/lodash/fp/entries.js | 1 - .../node_modules/lodash/fp/entriesIn.js | 1 - .../babel-types/node_modules/lodash/fp/eq.js | 5 - .../node_modules/lodash/fp/equals.js | 1 - .../node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../node_modules/lodash/fp/every.js | 5 - .../node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../node_modules/lodash/fp/fill.js | 5 - .../node_modules/lodash/fp/filter.js | 5 - .../node_modules/lodash/fp/find.js | 5 - .../node_modules/lodash/fp/findFrom.js | 5 - .../node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../node_modules/lodash/fp/findKey.js | 5 - .../node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../node_modules/lodash/fp/first.js | 1 - .../node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../node_modules/lodash/fp/flip.js | 5 - .../node_modules/lodash/fp/floor.js | 5 - .../node_modules/lodash/fp/flow.js | 5 - .../node_modules/lodash/fp/flowRight.js | 5 - .../node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../node_modules/lodash/fp/fromPairs.js | 5 - .../node_modules/lodash/fp/function.js | 2 - .../node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../babel-types/node_modules/lodash/fp/get.js | 5 - .../node_modules/lodash/fp/getOr.js | 5 - .../node_modules/lodash/fp/groupBy.js | 5 - .../babel-types/node_modules/lodash/fp/gt.js | 5 - .../babel-types/node_modules/lodash/fp/gte.js | 5 - .../babel-types/node_modules/lodash/fp/has.js | 5 - .../node_modules/lodash/fp/hasIn.js | 5 - .../node_modules/lodash/fp/head.js | 5 - .../node_modules/lodash/fp/identical.js | 1 - .../node_modules/lodash/fp/identity.js | 5 - .../node_modules/lodash/fp/inRange.js | 5 - .../node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../node_modules/lodash/fp/indexBy.js | 1 - .../node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../node_modules/lodash/fp/init.js | 1 - .../node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../node_modules/lodash/fp/invert.js | 5 - .../node_modules/lodash/fp/invertBy.js | 5 - .../node_modules/lodash/fp/invertObj.js | 1 - .../node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../node_modules/lodash/fp/isBoolean.js | 5 - .../node_modules/lodash/fp/isBuffer.js | 5 - .../node_modules/lodash/fp/isDate.js | 5 - .../node_modules/lodash/fp/isElement.js | 5 - .../node_modules/lodash/fp/isEmpty.js | 5 - .../node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../node_modules/lodash/fp/isError.js | 5 - .../node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../node_modules/lodash/fp/isInteger.js | 5 - .../node_modules/lodash/fp/isLength.js | 5 - .../node_modules/lodash/fp/isMap.js | 5 - .../node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../node_modules/lodash/fp/isNaN.js | 5 - .../node_modules/lodash/fp/isNative.js | 5 - .../node_modules/lodash/fp/isNil.js | 5 - .../node_modules/lodash/fp/isNull.js | 5 - .../node_modules/lodash/fp/isNumber.js | 5 - .../node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../node_modules/lodash/fp/isSet.js | 5 - .../node_modules/lodash/fp/isString.js | 5 - .../node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../node_modules/lodash/fp/isWeakMap.js | 5 - .../node_modules/lodash/fp/isWeakSet.js | 5 - .../node_modules/lodash/fp/iteratee.js | 5 - .../node_modules/lodash/fp/join.js | 5 - .../node_modules/lodash/fp/juxt.js | 1 - .../node_modules/lodash/fp/kebabCase.js | 5 - .../node_modules/lodash/fp/keyBy.js | 5 - .../node_modules/lodash/fp/keys.js | 5 - .../node_modules/lodash/fp/keysIn.js | 5 - .../node_modules/lodash/fp/lang.js | 2 - .../node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../babel-types/node_modules/lodash/fp/lt.js | 5 - .../babel-types/node_modules/lodash/fp/lte.js | 5 - .../babel-types/node_modules/lodash/fp/map.js | 5 - .../node_modules/lodash/fp/mapKeys.js | 5 - .../node_modules/lodash/fp/mapValues.js | 5 - .../node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../node_modules/lodash/fp/math.js | 2 - .../babel-types/node_modules/lodash/fp/max.js | 5 - .../node_modules/lodash/fp/maxBy.js | 5 - .../node_modules/lodash/fp/mean.js | 5 - .../node_modules/lodash/fp/meanBy.js | 5 - .../node_modules/lodash/fp/memoize.js | 5 - .../node_modules/lodash/fp/merge.js | 5 - .../node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../node_modules/lodash/fp/mergeWith.js | 5 - .../node_modules/lodash/fp/method.js | 5 - .../node_modules/lodash/fp/methodOf.js | 5 - .../babel-types/node_modules/lodash/fp/min.js | 5 - .../node_modules/lodash/fp/minBy.js | 5 - .../node_modules/lodash/fp/mixin.js | 5 - .../node_modules/lodash/fp/multiply.js | 5 - .../node_modules/lodash/fp/nAry.js | 1 - .../node_modules/lodash/fp/negate.js | 5 - .../node_modules/lodash/fp/next.js | 5 - .../node_modules/lodash/fp/noop.js | 5 - .../babel-types/node_modules/lodash/fp/now.js | 5 - .../babel-types/node_modules/lodash/fp/nth.js | 5 - .../node_modules/lodash/fp/nthArg.js | 5 - .../node_modules/lodash/fp/number.js | 2 - .../node_modules/lodash/fp/object.js | 2 - .../node_modules/lodash/fp/omit.js | 5 - .../node_modules/lodash/fp/omitAll.js | 1 - .../node_modules/lodash/fp/omitBy.js | 5 - .../node_modules/lodash/fp/once.js | 5 - .../node_modules/lodash/fp/orderBy.js | 5 - .../node_modules/lodash/fp/over.js | 5 - .../node_modules/lodash/fp/overArgs.js | 5 - .../node_modules/lodash/fp/overEvery.js | 5 - .../node_modules/lodash/fp/overSome.js | 5 - .../babel-types/node_modules/lodash/fp/pad.js | 5 - .../node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../node_modules/lodash/fp/padEnd.js | 5 - .../node_modules/lodash/fp/padStart.js | 5 - .../node_modules/lodash/fp/parseInt.js | 5 - .../node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../node_modules/lodash/fp/partition.js | 5 - .../node_modules/lodash/fp/path.js | 1 - .../node_modules/lodash/fp/pathEq.js | 1 - .../node_modules/lodash/fp/pathOr.js | 1 - .../node_modules/lodash/fp/paths.js | 1 - .../node_modules/lodash/fp/pick.js | 5 - .../node_modules/lodash/fp/pickAll.js | 1 - .../node_modules/lodash/fp/pickBy.js | 5 - .../node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../node_modules/lodash/fp/plant.js | 5 - .../node_modules/lodash/fp/pluck.js | 1 - .../node_modules/lodash/fp/prop.js | 1 - .../node_modules/lodash/fp/propEq.js | 1 - .../node_modules/lodash/fp/propOr.js | 1 - .../node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../node_modules/lodash/fp/props.js | 1 - .../node_modules/lodash/fp/pull.js | 5 - .../node_modules/lodash/fp/pullAll.js | 5 - .../node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../node_modules/lodash/fp/pullAt.js | 5 - .../node_modules/lodash/fp/random.js | 5 - .../node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../node_modules/lodash/fp/rearg.js | 5 - .../node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../node_modules/lodash/fp/reject.js | 5 - .../node_modules/lodash/fp/remove.js | 5 - .../node_modules/lodash/fp/repeat.js | 5 - .../node_modules/lodash/fp/replace.js | 5 - .../node_modules/lodash/fp/rest.js | 5 - .../node_modules/lodash/fp/restFrom.js | 5 - .../node_modules/lodash/fp/result.js | 5 - .../node_modules/lodash/fp/reverse.js | 5 - .../node_modules/lodash/fp/round.js | 5 - .../node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../babel-types/node_modules/lodash/fp/seq.js | 2 - .../babel-types/node_modules/lodash/fp/set.js | 5 - .../node_modules/lodash/fp/setWith.js | 5 - .../node_modules/lodash/fp/shuffle.js | 5 - .../node_modules/lodash/fp/size.js | 5 - .../node_modules/lodash/fp/slice.js | 5 - .../node_modules/lodash/fp/snakeCase.js | 5 - .../node_modules/lodash/fp/some.js | 5 - .../node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../node_modules/lodash/fp/split.js | 5 - .../node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../node_modules/lodash/fp/string.js | 2 - .../node_modules/lodash/fp/stubArray.js | 5 - .../node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../node_modules/lodash/fp/stubTrue.js | 5 - .../node_modules/lodash/fp/subtract.js | 5 - .../babel-types/node_modules/lodash/fp/sum.js | 5 - .../node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../node_modules/lodash/fp/tail.js | 5 - .../node_modules/lodash/fp/take.js | 5 - .../node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../node_modules/lodash/fp/takeWhile.js | 5 - .../babel-types/node_modules/lodash/fp/tap.js | 5 - .../node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../node_modules/lodash/fp/throttle.js | 5 - .../node_modules/lodash/fp/thru.js | 5 - .../node_modules/lodash/fp/times.js | 5 - .../node_modules/lodash/fp/toArray.js | 5 - .../node_modules/lodash/fp/toFinite.js | 5 - .../node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../node_modules/lodash/fp/toJSON.js | 5 - .../node_modules/lodash/fp/toLength.js | 5 - .../node_modules/lodash/fp/toLower.js | 5 - .../node_modules/lodash/fp/toNumber.js | 5 - .../node_modules/lodash/fp/toPairs.js | 5 - .../node_modules/lodash/fp/toPairsIn.js | 5 - .../node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../node_modules/lodash/fp/toString.js | 5 - .../node_modules/lodash/fp/toUpper.js | 5 - .../node_modules/lodash/fp/transform.js | 5 - .../node_modules/lodash/fp/trim.js | 5 - .../node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../node_modules/lodash/fp/trimEnd.js | 5 - .../node_modules/lodash/fp/trimStart.js | 5 - .../node_modules/lodash/fp/truncate.js | 5 - .../node_modules/lodash/fp/unapply.js | 1 - .../node_modules/lodash/fp/unary.js | 5 - .../node_modules/lodash/fp/unescape.js | 5 - .../node_modules/lodash/fp/union.js | 5 - .../node_modules/lodash/fp/unionBy.js | 5 - .../node_modules/lodash/fp/unionWith.js | 5 - .../node_modules/lodash/fp/uniq.js | 5 - .../node_modules/lodash/fp/uniqBy.js | 5 - .../node_modules/lodash/fp/uniqWith.js | 5 - .../node_modules/lodash/fp/uniqueId.js | 5 - .../node_modules/lodash/fp/unnest.js | 1 - .../node_modules/lodash/fp/unset.js | 5 - .../node_modules/lodash/fp/unzip.js | 5 - .../node_modules/lodash/fp/unzipWith.js | 5 - .../node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../node_modules/lodash/fp/useWith.js | 1 - .../node_modules/lodash/fp/util.js | 2 - .../node_modules/lodash/fp/value.js | 5 - .../node_modules/lodash/fp/valueOf.js | 5 - .../node_modules/lodash/fp/values.js | 5 - .../node_modules/lodash/fp/valuesIn.js | 5 - .../node_modules/lodash/fp/where.js | 1 - .../node_modules/lodash/fp/whereEq.js | 1 - .../node_modules/lodash/fp/without.js | 5 - .../node_modules/lodash/fp/words.js | 5 - .../node_modules/lodash/fp/wrap.js | 5 - .../node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../babel-types/node_modules/lodash/fp/xor.js | 5 - .../node_modules/lodash/fp/xorBy.js | 5 - .../node_modules/lodash/fp/xorWith.js | 5 - .../babel-types/node_modules/lodash/fp/zip.js | 5 - .../node_modules/lodash/fp/zipAll.js | 5 - .../node_modules/lodash/fp/zipObj.js | 1 - .../node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../node_modules/lodash/fp/zipWith.js | 5 - .../node_modules/lodash/fromPairs.js | 28 - .../node_modules/lodash/function.js | 25 - .../node_modules/lodash/functions.js | 31 - .../node_modules/lodash/functionsIn.js | 31 - .../babel-types/node_modules/lodash/get.js | 33 - .../node_modules/lodash/groupBy.js | 42 - .../babel-types/node_modules/lodash/gt.js | 29 - .../babel-types/node_modules/lodash/gte.js | 30 - .../babel-types/node_modules/lodash/has.js | 35 - .../babel-types/node_modules/lodash/hasIn.js | 34 - .../babel-types/node_modules/lodash/head.js | 23 - .../node_modules/lodash/identity.js | 21 - .../node_modules/lodash/inRange.js | 55 - .../node_modules/lodash/includes.js | 53 - .../babel-types/node_modules/lodash/index.js | 1 - .../node_modules/lodash/indexOf.js | 42 - .../node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../babel-types/node_modules/lodash/invert.js | 27 - .../node_modules/lodash/invertBy.js | 44 - .../babel-types/node_modules/lodash/invoke.js | 24 - .../node_modules/lodash/invokeMap.js | 44 - .../node_modules/lodash/isArguments.js | 36 - .../node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../node_modules/lodash/isBoolean.js | 38 - .../node_modules/lodash/isBuffer.js | 38 - .../babel-types/node_modules/lodash/isDate.js | 27 - .../node_modules/lodash/isElement.js | 25 - .../node_modules/lodash/isEmpty.js | 74 - .../node_modules/lodash/isEqual.js | 35 - .../node_modules/lodash/isEqualWith.js | 41 - .../node_modules/lodash/isError.js | 42 - .../node_modules/lodash/isFinite.js | 36 - .../node_modules/lodash/isFunction.js | 42 - .../node_modules/lodash/isInteger.js | 33 - .../node_modules/lodash/isLength.js | 35 - .../babel-types/node_modules/lodash/isMap.js | 27 - .../node_modules/lodash/isMatch.js | 36 - .../node_modules/lodash/isMatchWith.js | 41 - .../babel-types/node_modules/lodash/isNaN.js | 38 - .../node_modules/lodash/isNative.js | 40 - .../babel-types/node_modules/lodash/isNil.js | 25 - .../babel-types/node_modules/lodash/isNull.js | 22 - .../node_modules/lodash/isNumber.js | 47 - .../node_modules/lodash/isObject.js | 31 - .../node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 68 - .../node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../babel-types/node_modules/lodash/isSet.js | 27 - .../node_modules/lodash/isString.js | 39 - .../node_modules/lodash/isSymbol.js | 38 - .../node_modules/lodash/isTypedArray.js | 27 - .../node_modules/lodash/isUndefined.js | 22 - .../node_modules/lodash/isWeakMap.js | 28 - .../node_modules/lodash/isWeakSet.js | 37 - .../node_modules/lodash/iteratee.js | 50 - .../babel-types/node_modules/lodash/join.js | 26 - .../node_modules/lodash/kebabCase.js | 28 - .../babel-types/node_modules/lodash/keyBy.js | 37 - .../babel-types/node_modules/lodash/keys.js | 37 - .../babel-types/node_modules/lodash/keysIn.js | 32 - .../babel-types/node_modules/lodash/lang.js | 58 - .../babel-types/node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../babel-types/node_modules/lodash/lodash.js | 16982 --------------- .../node_modules/lodash/lodash.min.js | 134 - .../node_modules/lodash/lowerCase.js | 27 - .../node_modules/lodash/lowerFirst.js | 22 - .../babel-types/node_modules/lodash/lt.js | 29 - .../babel-types/node_modules/lodash/lte.js | 30 - .../babel-types/node_modules/lodash/map.js | 53 - .../node_modules/lodash/mapKeys.js | 36 - .../node_modules/lodash/mapValues.js | 43 - .../node_modules/lodash/matches.js | 36 - .../node_modules/lodash/matchesProperty.js | 34 - .../babel-types/node_modules/lodash/math.js | 17 - .../babel-types/node_modules/lodash/max.js | 29 - .../babel-types/node_modules/lodash/maxBy.js | 34 - .../babel-types/node_modules/lodash/mean.js | 22 - .../babel-types/node_modules/lodash/meanBy.js | 31 - .../node_modules/lodash/memoize.js | 73 - .../babel-types/node_modules/lodash/merge.js | 39 - .../node_modules/lodash/mergeWith.js | 39 - .../babel-types/node_modules/lodash/method.js | 34 - .../node_modules/lodash/methodOf.js | 33 - .../babel-types/node_modules/lodash/min.js | 29 - .../babel-types/node_modules/lodash/minBy.js | 34 - .../babel-types/node_modules/lodash/mixin.js | 74 - .../node_modules/lodash/multiply.js | 22 - .../babel-types/node_modules/lodash/negate.js | 40 - .../babel-types/node_modules/lodash/next.js | 35 - .../babel-types/node_modules/lodash/noop.js | 17 - .../babel-types/node_modules/lodash/now.js | 23 - .../babel-types/node_modules/lodash/nth.js | 29 - .../babel-types/node_modules/lodash/nthArg.js | 32 - .../babel-types/node_modules/lodash/number.js | 5 - .../babel-types/node_modules/lodash/object.js | 49 - .../babel-types/node_modules/lodash/omit.js | 35 - .../babel-types/node_modules/lodash/omitBy.js | 29 - .../babel-types/node_modules/lodash/once.js | 25 - .../node_modules/lodash/orderBy.js | 47 - .../babel-types/node_modules/lodash/over.js | 24 - .../node_modules/lodash/overArgs.js | 61 - .../node_modules/lodash/overEvery.js | 30 - .../node_modules/lodash/overSome.js | 30 - .../node_modules/lodash/package.json | 115 - .../babel-types/node_modules/lodash/pad.js | 49 - .../babel-types/node_modules/lodash/padEnd.js | 39 - .../node_modules/lodash/padStart.js | 39 - .../node_modules/lodash/parseInt.js | 43 - .../node_modules/lodash/partial.js | 50 - .../node_modules/lodash/partialRight.js | 49 - .../node_modules/lodash/partition.js | 43 - .../babel-types/node_modules/lodash/pick.js | 27 - .../babel-types/node_modules/lodash/pickBy.js | 27 - .../babel-types/node_modules/lodash/plant.js | 48 - .../node_modules/lodash/property.js | 32 - .../node_modules/lodash/propertyOf.js | 30 - .../babel-types/node_modules/lodash/pull.js | 29 - .../node_modules/lodash/pullAll.js | 29 - .../node_modules/lodash/pullAllBy.js | 34 - .../node_modules/lodash/pullAllWith.js | 32 - .../babel-types/node_modules/lodash/pullAt.js | 43 - .../babel-types/node_modules/lodash/random.js | 82 - .../babel-types/node_modules/lodash/range.js | 46 - .../node_modules/lodash/rangeRight.js | 41 - .../babel-types/node_modules/lodash/rearg.js | 33 - .../babel-types/node_modules/lodash/reduce.js | 51 - .../node_modules/lodash/reduceRight.js | 36 - .../babel-types/node_modules/lodash/reject.js | 46 - .../babel-types/node_modules/lodash/remove.js | 54 - .../babel-types/node_modules/lodash/repeat.js | 37 - .../node_modules/lodash/replace.js | 29 - .../babel-types/node_modules/lodash/rest.js | 40 - .../babel-types/node_modules/lodash/result.js | 57 - .../node_modules/lodash/reverse.js | 34 - .../babel-types/node_modules/lodash/round.js | 26 - .../babel-types/node_modules/lodash/sample.js | 24 - .../node_modules/lodash/sampleSize.js | 37 - .../babel-types/node_modules/lodash/seq.js | 16 - .../babel-types/node_modules/lodash/set.js | 35 - .../node_modules/lodash/setWith.js | 32 - .../node_modules/lodash/shuffle.js | 25 - .../babel-types/node_modules/lodash/size.js | 46 - .../babel-types/node_modules/lodash/slice.js | 37 - .../node_modules/lodash/snakeCase.js | 28 - .../babel-types/node_modules/lodash/some.js | 51 - .../babel-types/node_modules/lodash/sortBy.js | 48 - .../node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/sortedUniq.js | 24 - .../node_modules/lodash/sortedUniqBy.js | 26 - .../babel-types/node_modules/lodash/split.js | 52 - .../babel-types/node_modules/lodash/spread.js | 63 - .../node_modules/lodash/startCase.js | 29 - .../node_modules/lodash/startsWith.js | 36 - .../babel-types/node_modules/lodash/string.js | 33 - .../node_modules/lodash/stubArray.js | 23 - .../node_modules/lodash/stubFalse.js | 18 - .../node_modules/lodash/stubObject.js | 23 - .../node_modules/lodash/stubString.js | 18 - .../node_modules/lodash/stubTrue.js | 18 - .../node_modules/lodash/subtract.js | 22 - .../babel-types/node_modules/lodash/sum.js | 24 - .../babel-types/node_modules/lodash/sumBy.js | 33 - .../babel-types/node_modules/lodash/tail.js | 22 - .../babel-types/node_modules/lodash/take.js | 37 - .../node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../node_modules/lodash/takeWhile.js | 46 - .../babel-types/node_modules/lodash/tap.js | 29 - .../node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../node_modules/lodash/throttle.js | 69 - .../babel-types/node_modules/lodash/thru.js | 28 - .../babel-types/node_modules/lodash/times.js | 51 - .../node_modules/lodash/toArray.js | 58 - .../node_modules/lodash/toFinite.js | 42 - .../node_modules/lodash/toInteger.js | 36 - .../node_modules/lodash/toIterator.js | 23 - .../babel-types/node_modules/lodash/toJSON.js | 1 - .../node_modules/lodash/toLength.js | 38 - .../node_modules/lodash/toLower.js | 28 - .../node_modules/lodash/toNumber.js | 66 - .../node_modules/lodash/toPairs.js | 30 - .../node_modules/lodash/toPairsIn.js | 30 - .../babel-types/node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../node_modules/lodash/toString.js | 28 - .../node_modules/lodash/toUpper.js | 28 - .../node_modules/lodash/transform.js | 65 - .../babel-types/node_modules/lodash/trim.js | 49 - .../node_modules/lodash/trimEnd.js | 43 - .../node_modules/lodash/trimStart.js | 43 - .../node_modules/lodash/truncate.js | 111 - .../babel-types/node_modules/lodash/unary.js | 22 - .../node_modules/lodash/unescape.js | 34 - .../babel-types/node_modules/lodash/union.js | 26 - .../node_modules/lodash/unionBy.js | 40 - .../node_modules/lodash/unionWith.js | 36 - .../babel-types/node_modules/lodash/uniq.js | 27 - .../babel-types/node_modules/lodash/uniqBy.js | 34 - .../node_modules/lodash/uniqWith.js | 29 - .../node_modules/lodash/uniqueId.js | 28 - .../babel-types/node_modules/lodash/unset.js | 34 - .../babel-types/node_modules/lodash/unzip.js | 45 - .../node_modules/lodash/unzipWith.js | 39 - .../babel-types/node_modules/lodash/update.js | 35 - .../node_modules/lodash/updateWith.js | 33 - .../node_modules/lodash/upperCase.js | 27 - .../node_modules/lodash/upperFirst.js | 22 - .../babel-types/node_modules/lodash/util.js | 34 - .../babel-types/node_modules/lodash/value.js | 1 - .../node_modules/lodash/valueOf.js | 1 - .../babel-types/node_modules/lodash/values.js | 34 - .../node_modules/lodash/valuesIn.js | 32 - .../node_modules/lodash/without.js | 31 - .../babel-types/node_modules/lodash/words.js | 35 - .../babel-types/node_modules/lodash/wrap.js | 31 - .../node_modules/lodash/wrapperAt.js | 48 - .../node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../node_modules/lodash/wrapperValue.js | 21 - .../babel-types/node_modules/lodash/xor.js | 28 - .../babel-types/node_modules/lodash/xorBy.js | 40 - .../node_modules/lodash/xorWith.js | 36 - .../babel-types/node_modules/lodash/zip.js | 22 - .../node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../node_modules/lodash/zipWith.js | 31 - node_modules/babel-types/package.json | 108 +- node_modules/babylon/CHANGELOG.md | 235 +- node_modules/babylon/README.md | 9 +- node_modules/babylon/lib/index.js | 6411 +++++- node_modules/babylon/lib/options.js | 33 - node_modules/babylon/lib/parser/comments.js | 163 - node_modules/babylon/lib/parser/expression.js | 1096 - node_modules/babylon/lib/parser/index.js | 102 - node_modules/babylon/lib/parser/location.js | 26 - node_modules/babylon/lib/parser/lval.js | 315 - node_modules/babylon/lib/parser/node.js | 70 - node_modules/babylon/lib/parser/statement.js | 1107 - node_modules/babylon/lib/parser/util.js | 92 - node_modules/babylon/lib/plugins/flow.js | 1235 -- node_modules/babylon/lib/plugins/jsx/index.js | 482 - node_modules/babylon/lib/plugins/jsx/xhtml.js | 258 - node_modules/babylon/lib/tokenizer/context.js | 99 - node_modules/babylon/lib/tokenizer/index.js | 889 - node_modules/babylon/lib/tokenizer/state.js | 146 - node_modules/babylon/lib/tokenizer/types.js | 159 - node_modules/babylon/lib/util/identifier.js | 96 - node_modules/babylon/lib/util/location.js | 45 - node_modules/babylon/lib/util/whitespace.js | 15 - node_modules/babylon/package.json | 282 +- node_modules/balanced-match/package.json | 95 +- node_modules/beeper/package.json | 88 +- node_modules/better-assert/package.json | 113 +- node_modules/bl/node_modules/isarray/Makefile | 6 - .../bl/node_modules/isarray/README.md | 60 - node_modules/bl/node_modules/isarray/index.js | 5 - .../bl/node_modules/isarray/package.json | 104 - node_modules/bl/node_modules/isarray/test.js | 20 - .../node_modules/readable-stream/package.json | 106 +- node_modules/bl/package.json | 103 +- node_modules/brace-expansion/package.json | 102 +- node_modules/braces/package.json | 110 +- node_modules/buffer-crc32/package.json | 100 +- node_modules/buffer-shims/package.json | 100 +- node_modules/builtin-modules/package.json | 90 +- node_modules/bytes/package.json | 88 +- node_modules/callsite/package.json | 84 +- node_modules/camelcase-keys/package.json | 97 +- node_modules/camelcase/package.json | 92 +- .../escape-string-regexp/index.js | 11 + .../escape-string-regexp}/license | 0 .../escape-string-regexp/package.json | 41 + .../escape-string-regexp/readme.md | 27 + .../node_modules/supports-color/index.js | 50 + .../node_modules/supports-color}/license | 0 .../node_modules/supports-color/package.json | 49 + .../node_modules/supports-color/readme.md | 36 + node_modules/chalk/package.json | 135 +- node_modules/clone-buffer/package.json | 124 +- node_modules/clone-stats/package.json | 97 +- node_modules/clone/package.json | 201 +- node_modules/cloneable-readable/package.json | 111 +- node_modules/commander/package.json | 114 +- .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../node_modules/isarray/Makefile | 6 - .../node_modules/isarray/README.md | 60 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../node_modules/isarray/test.js | 20 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../node_modules/readable-stream/readable.js | 16 - node_modules/compress-commons/package.json | 163 +- node_modules/concat-map/package.json | 154 +- .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../node_modules/isarray/Makefile | 6 - .../node_modules/isarray/README.md | 60 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../node_modules/isarray/test.js | 20 - .../node_modules/readable-stream/package.json | 106 +- node_modules/concat-stream/package.json | 134 +- .../concat-with-sourcemaps/package.json | 109 +- node_modules/convert-source-map/package.json | 103 +- node_modules/core-js/build/Gruntfile.ls | 84 + node_modules/core-js/build/build.ls | 62 + node_modules/core-js/build/config.js | 259 + node_modules/core-js/build/index.js | 104 + node_modules/core-js/package.json | 121 +- node_modules/core-util-is/package.json | 106 +- .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../node_modules/isarray/Makefile | 6 - .../node_modules/isarray/README.md | 60 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../crc32-stream/node_modules/isarray/test.js | 20 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../doc/wg-meetings/2015-01-30.md | 60 - .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../node_modules/readable-stream/readable.js | 16 - node_modules/crc32-stream/package.json | 157 +- node_modules/currently-unhandled/package.json | 115 +- node_modules/dateformat/package.json | 110 +- node_modules/debug/package.json | 119 +- node_modules/decamelize/package.json | 92 +- node_modules/defaults/package.json | 98 +- node_modules/del/node_modules/.bin/rimraf | 1 + node_modules/del/package.json | 113 +- node_modules/deprecated/package.json | 103 +- node_modules/detect-file/package.json | 102 +- node_modules/detect-indent/cli.js | 55 - node_modules/detect-indent/index.js | 5 +- .../detect-indent/node_modules/.bin/repeating | 1 - .../node_modules/repeating/cli.js | 36 - .../node_modules/repeating/index.js | 24 - .../node_modules/repeating/package.json | 105 - .../node_modules/repeating/readme.md | 40 - node_modules/detect-indent/package.json | 107 +- node_modules/detect-indent/readme.md | 44 +- node_modules/diff/package.json | 100 +- .../node_modules/isarray/README.md | 0 .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../node_modules/isarray/index.js | 0 .../node_modules/isarray/package.json | 25 + .../node_modules/readable-stream/.npmignore | 0 .../node_modules/readable-stream/LICENSE | 0 .../node_modules/readable-stream/README.md | 15 + .../node_modules/readable-stream/duplex.js | 0 .../node_modules}/readable-stream/float.patch | 0 .../readable-stream/lib/_stream_duplex.js | 0 .../lib/_stream_passthrough.js | 0 .../readable-stream/lib/_stream_readable.js | 951 + .../readable-stream/lib/_stream_transform.js | 209 + .../readable-stream/lib/_stream_writable.js | 477 + .../node_modules/readable-stream/package.json | 32 + .../readable-stream/passthrough.js | 0 .../node_modules/readable-stream/readable.js | 10 + .../node_modules/readable-stream/transform.js | 0 .../node_modules/readable-stream/writable.js | 0 node_modules/duplexer2/package.json | 93 +- node_modules/duplexify/README.md | 4 +- node_modules/duplexify/index.js | 3 +- .../node_modules/end-of-stream/package.json | 86 +- .../duplexify/node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../duplexify/node_modules/isarray/Makefile | 6 - .../duplexify/node_modules/isarray/README.md | 60 - .../duplexify/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../duplexify/node_modules/isarray/test.js | 20 - .../duplexify/node_modules/once/package.json | 91 +- .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../doc/wg-meetings/2015-01-30.md | 60 - .../node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - node_modules/duplexify/package.json | 98 +- node_modules/encoding/package.json | 91 +- .../node_modules/once/package.json | 91 +- node_modules/end-of-stream/package.json | 88 +- node_modules/error-ex/package.json | 103 +- node_modules/escape-string-regexp/index.js | 2 +- .../escape-string-regexp/package.json | 101 +- node_modules/escape-string-regexp/readme.md | 8 +- node_modules/esutils/package.json | 117 +- node_modules/expand-brackets/package.json | 110 +- node_modules/expand-range/package.json | 106 +- node_modules/expand-tilde/package.json | 107 +- node_modules/extend-shallow/package.json | 100 +- node_modules/extend/package.json | 142 +- node_modules/extglob/package.json | 96 +- node_modules/fancy-log/package.json | 107 +- node_modules/filename-regex/package.json | 93 +- node_modules/fill-range/package.json | 106 +- node_modules/find-index/package.json | 88 +- node_modules/find-up/package.json | 99 +- node_modules/findup-sync/README.md | 67 + node_modules/findup-sync/index.js | 54 +- node_modules/findup-sync/package.json | 110 +- node_modules/fined/package.json | 124 +- node_modules/first-chunk-stream/package.json | 88 +- node_modules/flagged-respawn/package.json | 107 +- node_modules/for-in/package.json | 107 +- node_modules/for-own/package.json | 106 +- node_modules/fs-exists-sync/package.json | 105 +- node_modules/fs.realpath/package.json | 98 +- node_modules/gaze/package.json | 161 +- node_modules/get-stdin/package.json | 89 +- node_modules/gettext-parser/package.json | 86 +- .../node_modules/glob-parent/.npmignore | 0 .../node_modules/glob-parent/.travis.yml | 0 .../node_modules/glob-parent/LICENSE | 0 .../node_modules/glob-parent/README.md | 0 .../node_modules/glob-parent/index.js | 0 .../node_modules/glob-parent/package.json | 35 + .../node_modules/glob-parent/test.js | 28 + node_modules/glob-base/package.json | 110 +- node_modules/glob-parent/.travis.yml | 8 +- node_modules/glob-parent/README.md | 22 + node_modules/glob-parent/appveyor.yml | 25 + node_modules/glob-parent/index.js | 5 +- .../node_modules/is-extglob/LICENSE | 0 .../node_modules/is-extglob/README.md | 107 + .../node_modules/is-extglob/index.js | 20 + .../node_modules/is-extglob/package.json | 69 + .../node_modules/is-glob/LICENSE | 0 .../node_modules/is-glob/README.md | 142 + .../glob-parent/node_modules/is-glob/index.js | 25 + .../node_modules/is-glob/package.json | 80 + node_modules/glob-parent/package.json | 104 +- node_modules/glob-parent/test.js | 103 +- node_modules/glob-stream/LICENSE | 35 +- node_modules/glob-stream/README.md | 94 +- node_modules/glob-stream/index.js | 214 +- .../glob-stream/node_modules/glob/README.md | 42 +- .../glob-stream/node_modules/glob/common.js | 54 +- .../glob-stream/node_modules/glob/glob.js | 18 +- .../node_modules/glob/package.json | 119 +- .../glob-stream/node_modules/glob/sync.js | 11 +- .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../glob-stream/node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 25 + .../node_modules/minimatch/package.json | 98 - .../node_modules/readable-stream/package.json | 112 +- .../node_modules/through2/package.json | 103 +- node_modules/glob-stream/package.json | 151 +- node_modules/glob-watcher/package.json | 96 +- node_modules/glob/package.json | 112 +- node_modules/glob2base/package.json | 101 +- node_modules/global-modules/package.json | 102 +- .../global-prefix/node_modules/.bin/which | 1 + node_modules/global-prefix/package.json | 102 +- node_modules/globals/globals.json | 47 +- node_modules/globals/package.json | 98 +- node_modules/globals/readme.md | 2 + node_modules/globby/package.json | 129 +- .../globule/node_modules/glob/package.json | 98 +- .../node_modules/graceful-fs/package.json | 92 +- .../node_modules/inherits/package.json | 91 +- .../node_modules}/lodash/LICENSE.txt | 0 .../globule/node_modules/lodash/README.md | 128 + .../lodash/dist/lodash.compat.js | 0 .../lodash/dist/lodash.compat.min.js | 0 .../node_modules}/lodash/dist/lodash.js | 0 .../node_modules}/lodash/dist/lodash.min.js | 0 .../lodash/dist/lodash.underscore.js | 0 .../lodash/dist/lodash.underscore.min.js | 0 .../globule/node_modules/lodash/package.json | 58 + .../node_modules/minimatch/package.json | 90 +- node_modules/globule/package.json | 115 +- node_modules/glogg/package.json | 103 +- node_modules/graceful-fs/package.json | 110 +- node_modules/graceful-fs/polyfills.js | 18 +- node_modules/growl/package.json | 87 +- .../node_modules/clone-stats/LICENSE.md | 0 .../node_modules/clone-stats/README.md | 0 .../node_modules/clone-stats/index.js | 0 .../node_modules/clone-stats/package.json | 31 + .../node_modules/clone-stats/test.js | 0 .../node_modules/gulp-util/LICENSE | 0 .../node_modules/gulp-util/README.md | 146 + .../node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/PluginError.js | 130 + .../node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/combine.js | 0 .../node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../node_modules/gulp-util/lib/log.js | 14 + .../node_modules/gulp-util/lib/noop.js | 0 .../node_modules/gulp-util/lib/template.js | 23 + .../gulp-util/node_modules/.bin/dateformat | 1 + .../node_modules/isarray/.npmignore | 0 .../node_modules/isarray/.travis.yml | 0 .../gulp-util}/node_modules/isarray/Makefile | 0 .../gulp-util}/node_modules/isarray/README.md | 0 .../node_modules/isarray/component.json | 0 .../gulp-util}/node_modules/isarray/index.js | 0 .../node_modules/isarray/package.json | 45 + .../gulp-util}/node_modules/isarray/test.js | 0 .../node_modules/readable-stream/.npmignore | 5 + .../node_modules/readable-stream/.travis.yml | 52 + .../node_modules/readable-stream/.zuul.yml | 1 + .../node_modules/readable-stream/LICENSE | 0 .../node_modules/readable-stream/README.md | 36 + .../readable-stream/doc/stream.markdown | 1760 ++ .../doc/wg-meetings/2015-01-30.md | 0 .../node_modules/readable-stream/duplex.js | 0 .../readable-stream/lib/_stream_duplex.js | 0 .../lib/_stream_passthrough.js | 0 .../readable-stream/lib/_stream_readable.js | 880 + .../readable-stream/lib/_stream_transform.js | 180 + .../readable-stream/lib/_stream_writable.js | 516 + .../node_modules/readable-stream/package.json | 37 + .../readable-stream/passthrough.js | 0 .../node_modules/readable-stream/readable.js | 12 + .../node_modules/readable-stream/transform.js | 0 .../node_modules/readable-stream/writable.js | 0 .../node_modules/through2/.npmignore | 0 .../gulp-util/node_modules/through2/LICENSE | 0 .../gulp-util/node_modules/through2/README.md | 133 + .../node_modules/through2/package.json | 32 + .../node_modules/through2/through2.js | 0 .../node_modules/gulp-util/package.json | 51 + .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../gulp-concat/node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 25 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../node_modules}/lodash.template/LICENSE | 0 .../node_modules/lodash.template/README.md | 20 + .../node_modules/lodash.template/index.js | 389 + .../node_modules/lodash.template/package.json | 30 + .../node_modules/object-assign/index.js | 0 .../node_modules/object-assign/license | 0 .../node_modules/object-assign/package.json | 38 + .../node_modules/object-assign/readme.md | 0 .../node_modules/readable-stream/package.json | 112 +- .../node_modules/replace-ext}/.npmignore | 0 .../node_modules}/replace-ext/.travis.yml | 0 .../node_modules/replace-ext}/LICENSE | 0 .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js} | 0 .../node_modules/replace-ext/package.json | 35 + .../node_modules}/replace-ext/test/main.js | 0 .../node_modules/through2/package.json | 103 +- .../node_modules/vinyl/LICENSE | 0 .../gulp-concat/node_modules/vinyl/README.md | 195 + .../gulp-concat/node_modules/vinyl/index.js | 213 + .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 11 + .../node_modules/vinyl/lib/isBuffer.js | 1 + .../node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl}/lib/isStream.js | 0 .../node_modules/vinyl/package.json | 37 + node_modules/gulp-concat/package.json | 99 +- .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../node_modules/clone-stats/test.js | 36 + .../gulp-debug/node_modules/gulp-util/LICENSE | 20 + .../node_modules/gulp-util/README.md | 146 + .../node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/PluginError.js | 130 + .../node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/combine.js | 0 .../node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../node_modules/gulp-util/lib/log.js | 14 + .../node_modules/gulp-util/lib/noop.js | 0 .../node_modules/gulp-util/lib/template.js | 23 + .../gulp-util/node_modules/.bin/dateformat | 1 + .../node_modules/object-assign/index.js | 39 + .../node_modules/object-assign}/license | 0 .../node_modules/object-assign/package.json | 38 + .../node_modules/object-assign/readme.md | 51 + .../node_modules/gulp-util/package.json | 51 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../node_modules/lodash.template/LICENSE | 22 + .../node_modules/lodash.template/README.md | 20 + .../node_modules/lodash.template/index.js | 389 + .../node_modules/lodash.template/package.json | 30 + .../node_modules/replace-ext}/.npmignore | 0 .../node_modules/replace-ext/.travis.yml | 8 + .../node_modules/replace-ext/LICENSE | 20 + .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js} | 0 .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../node_modules/vinyl/LICENSE | 0 .../gulp-debug/node_modules/vinyl/README.md | 195 + .../gulp-debug/node_modules/vinyl/index.js | 213 + .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 11 + .../node_modules/vinyl/lib/isBuffer.js | 1 + .../node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl/lib/isStream.js | 0 .../node_modules/vinyl/package.json | 37 + node_modules/gulp-debug/package.json | 109 +- .../gulp-gzip/node_modules/.bin/has-ansi | 1 - .../gulp-gzip/node_modules/.bin/strip-ansi | 1 - .../node_modules/.bin/supports-color | 1 - .../node_modules/ansi-regex/package.json | 114 - .../node_modules/ansi-styles/package.json | 108 - .../gulp-gzip/node_modules/chalk/package.json | 115 - .../node_modules/gulp-util/README.md | 140 - .../gulp-gzip/node_modules/gulp-util/index.js | 18 - .../node_modules/gulp-util/lib/PluginError.js | 64 - .../node_modules/gulp-util/lib/buffer.js | 15 - .../node_modules/gulp-util/lib/env.js | 4 - .../node_modules/gulp-util/lib/isBuffer.js | 7 - .../node_modules/gulp-util/lib/isNull.js | 3 - .../node_modules/gulp-util/lib/log.js | 10 - .../node_modules/gulp-util/lib/template.js | 19 - .../node_modules/through2/package.json | 98 - .../node_modules/gulp-util/package.json | 112 - .../node_modules/has-ansi/package.json | 118 - .../gulp-gzip/node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../gulp-gzip/node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 25 + .../lodash._reinterpolate/README.md | 15 - .../lodash._reinterpolate/index.js | 13 - .../lodash._reinterpolate/package.json | 111 - .../node_modules/lodash.escape/package.json | 121 - .../node_modules/lodash.keys/package.json | 121 - .../node_modules/lodash.template/README.md | 15 - .../node_modules/lodash.template/index.js | 216 - .../node_modules/lodash.template/package.json | 124 - .../lodash.templatesettings/LICENSE.txt | 22 - .../lodash.templatesettings/package.json | 119 - .../node_modules/minimist/.travis.yml | 4 - .../node_modules/minimist/package.json | 102 - .../node_modules/readable-stream/package.json | 113 +- .../node_modules/strip-ansi/package.json | 117 - .../node_modules/supports-color/package.json | 112 - .../through2/node_modules/xtend/.npmignore | 1 - .../through2/node_modules/xtend/README.md | 27 - .../through2/node_modules/xtend/index.js | 25 - .../through2/node_modules/xtend/mutable.js | 25 - .../through2/node_modules/xtend/package.json | 122 - .../node_modules/through2/package.json | 106 +- .../gulp-gzip/node_modules/vinyl/README.md | 123 - .../gulp-gzip/node_modules/vinyl/index.js | 128 - .../node_modules/vinyl/lib/cloneBuffer.js | 7 - .../node_modules/vinyl/lib/inspectStream.js | 12 - .../node_modules/vinyl/lib/isBuffer.js | 7 - .../node_modules/vinyl/lib/isNull.js | 3 - .../gulp-gzip/node_modules/vinyl/package.json | 101 - .../gulp-gzip/node_modules/xtend/LICENCE | 4 +- .../gulp-gzip/node_modules/xtend/README.md | 1 - .../node_modules => }/xtend/has-keys.js | 0 .../gulp-gzip/node_modules/xtend/index.js | 16 +- .../gulp-gzip/node_modules/xtend/mutable.js | 22 +- .../gulp-gzip/node_modules/xtend/package.json | 118 +- node_modules/gulp-gzip/package.json | 128 +- .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../node_modules/clone-stats/test.js | 36 + .../node_modules/gulp-util/LICENSE | 20 + .../node_modules/gulp-util/README.md | 146 + .../node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/PluginError.js | 130 + .../node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/combine.js | 11 + .../node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../node_modules/gulp-util/lib/log.js | 14 + .../node_modules/gulp-util/lib/noop.js | 5 + .../node_modules/gulp-util/lib/template.js | 23 + .../gulp-util/node_modules/.bin/dateformat | 1 + .../node_modules/gulp-util/package.json | 51 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../node_modules/lodash.template/LICENSE | 22 + .../node_modules/lodash.template/README.md | 20 + .../node_modules/lodash.template/index.js | 389 + .../node_modules/lodash.template/package.json | 30 + .../node_modules/object-assign/index.js | 39 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 38 + .../node_modules/object-assign/readme.md | 51 + .../node_modules}/replace-ext/.npmignore | 0 .../node_modules/replace-ext/.travis.yml | 8 + .../node_modules/replace-ext/LICENSE | 20 + .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js | 9 + .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../node_modules/vinyl/LICENSE | 20 + .../node_modules/vinyl/README.md | 195 + .../node_modules/vinyl/index.js | 213 + .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 11 + .../node_modules/vinyl/lib/isBuffer.js | 1 + .../node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl}/lib/isStream.js | 0 .../node_modules/vinyl/package.json | 37 + node_modules/gulp-json-transform/package.json | 106 +- node_modules/gulp-rename/package.json | 108 +- .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../node_modules/clone-stats/test.js | 36 + .../node_modules/replace-ext/.npmignore | 6 + .../node_modules/replace-ext/.travis.yml | 8 + .../node_modules/replace-ext/LICENSE | 20 + .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js | 9 + .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../node_modules/vinyl/package.json | 112 +- node_modules/gulp-sourcemaps/package.json | 117 +- .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../gulp-stream/node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 25 + .../node_modules/readable-stream/package.json | 112 +- .../node_modules/through2/package.json | 104 +- .../node_modules/xtend/package.json | 120 +- node_modules/gulp-stream/package.json | 93 +- .../gulp-sym/node_modules/.bin/has-ansi | 1 - .../gulp-sym/node_modules/.bin/mkdirp | 1 + .../gulp-sym/node_modules/.bin/rimraf | 1 + .../gulp-sym/node_modules/.bin/strip-ansi | 1 - .../gulp-sym/node_modules/.bin/supports-color | 1 - .../gulp-sym/node_modules/ansi-regex/index.js | 4 - .../node_modules/ansi-regex/package.json | 114 - .../node_modules/ansi-regex/readme.md | 33 - .../node_modules/ansi-styles/index.js | 40 - .../node_modules/ansi-styles/package.json | 108 - .../node_modules/ansi-styles/readme.md | 70 - .../gulp-sym/node_modules/chalk/index.js | 95 - .../gulp-sym/node_modules/chalk/package.json | 115 - .../gulp-sym/node_modules/chalk/readme.md | 175 - .../node_modules/gulp-util/.npmignore | 7 - .../node_modules/gulp-util/.travis.yml | 5 - .../gulp-sym/node_modules/gulp-util/README.md | 140 - .../gulp-sym/node_modules/gulp-util/index.js | 18 - .../node_modules/gulp-util/lib/File.js | 1 - .../node_modules/gulp-util/lib/PluginError.js | 64 - .../node_modules/gulp-util/lib/beep.js | 3 - .../node_modules/gulp-util/lib/buffer.js | 15 - .../node_modules/gulp-util/lib/colors.js | 1 - .../node_modules/gulp-util/lib/date.js | 1 - .../node_modules/gulp-util/lib/env.js | 4 - .../node_modules/gulp-util/lib/isBuffer.js | 7 - .../node_modules/gulp-util/lib/isNull.js | 3 - .../node_modules/gulp-util/lib/linefeed.js | 1 - .../node_modules/gulp-util/lib/log.js | 10 - .../node_modules/gulp-util/lib/template.js | 19 - .../node_modules/gulp-util/package.json | 109 - .../gulp-sym/node_modules/has-ansi/cli.js | 53 - .../gulp-sym/node_modules/has-ansi/index.js | 4 - .../node_modules/has-ansi/package.json | 118 - .../gulp-sym/node_modules/has-ansi/readme.md | 45 - .../gulp-sym/node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../gulp-sym/node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 25 + .../lodash._reinterpolate/LICENSE.txt | 22 - .../lodash._reinterpolate/README.md | 15 - .../lodash._reinterpolate/index.js | 13 - .../lodash._reinterpolate/package.json | 111 - .../node_modules/lodash.escape/LICENSE.txt | 22 - .../node_modules/lodash.escape/README.md | 15 - .../node_modules/lodash.escape/index.js | 31 - .../node_modules/lodash.escape/package.json | 121 - .../node_modules/lodash.keys/LICENSE.txt | 22 - .../node_modules/lodash.keys/README.md | 15 - .../node_modules/lodash.keys/index.js | 36 - .../node_modules/lodash.keys/package.json | 121 - .../node_modules/lodash.template/LICENSE.txt | 22 - .../node_modules/lodash.template/README.md | 15 - .../node_modules/lodash.template/index.js | 216 - .../node_modules/lodash.template/package.json | 124 - .../lodash.templatesettings/LICENSE.txt | 22 - .../lodash.templatesettings/README.md | 15 - .../lodash.templatesettings/index.js | 73 - .../lodash.templatesettings/package.json | 119 - .../node_modules/minimist/.travis.yml | 4 - .../gulp-sym/node_modules/minimist/LICENSE | 18 - .../node_modules/minimist/example/parse.js | 2 - .../gulp-sym/node_modules/minimist/index.js | 200 - .../node_modules/minimist/package.json | 102 - .../node_modules/minimist/readme.markdown | 86 - .../node_modules/minimist/test/all_bool.js | 32 - .../node_modules/minimist/test/bool.js | 119 - .../node_modules/minimist/test/dash.js | 31 - .../minimist/test/default_bool.js | 20 - .../node_modules/minimist/test/dotted.js | 22 - .../node_modules/minimist/test/long.js | 31 - .../node_modules/minimist/test/num.js | 36 - .../node_modules/minimist/test/parse.js | 197 - .../minimist/test/parse_modified.js | 9 - .../node_modules/minimist/test/short.js | 67 - .../node_modules/minimist/test/whitespace.js | 8 - .../node_modules/readable-stream/package.json | 112 +- .../gulp-sym/node_modules/strip-ansi/cli.js | 39 - .../gulp-sym/node_modules/strip-ansi/index.js | 6 - .../node_modules/strip-ansi/package.json | 117 - .../node_modules/strip-ansi/readme.md | 43 - .../node_modules/supports-color/cli.js | 28 - .../node_modules/supports-color/index.js | 32 - .../node_modules/supports-color/package.json | 112 - .../node_modules/supports-color/readme.md | 44 - .../node_modules/through2/package.json | 105 +- .../gulp-sym/node_modules/vinyl/.travis.yml | 6 - .../gulp-sym/node_modules/vinyl/README.md | 123 - .../gulp-sym/node_modules/vinyl/index.js | 128 - .../node_modules/vinyl/lib/cloneBuffer.js | 7 - .../node_modules/vinyl/lib/inspectStream.js | 12 - .../node_modules/vinyl/lib/isBuffer.js | 7 - .../gulp-sym/node_modules/vinyl/lib/isNull.js | 3 - .../gulp-sym/node_modules/vinyl/package.json | 101 - .../gulp-sym/node_modules/vinyl/test/File.js | 540 - .../node_modules/vinyl/test/cloneBuffer.js | 28 - .../node_modules/vinyl/test/inspectStream.js | 53 - .../node_modules/vinyl/test/isBuffer.js | 29 - .../node_modules/vinyl/test/isNull.js | 23 - .../node_modules/vinyl/test/isStream.js | 29 - .../gulp-sym/node_modules/xtend/package.json | 116 +- node_modules/gulp-sym/package.json | 117 +- .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../gulp-tar/node_modules/clone-stats/test.js | 36 + .../gulp-tar/node_modules/gulp-util/LICENSE | 20 + .../gulp-tar/node_modules/gulp-util/README.md | 146 + .../gulp-tar/node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/PluginError.js | 130 + .../node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/combine.js | 11 + .../node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../node_modules/gulp-util/lib/log.js | 14 + .../node_modules/gulp-util/lib/noop.js | 5 + .../node_modules/gulp-util/lib/template.js | 23 + .../gulp-util/node_modules/.bin/dateformat | 1 + .../node_modules/object-assign/index.js | 39 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 38 + .../node_modules/object-assign/readme.md | 51 + .../node_modules/gulp-util/package.json | 51 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../node_modules/lodash.template/LICENSE | 22 + .../node_modules/lodash.template/README.md | 20 + .../node_modules/lodash.template/index.js | 389 + .../node_modules/lodash.template/package.json | 30 + .../node_modules/replace-ext/.npmignore | 6 + .../node_modules/replace-ext/.travis.yml | 8 + .../gulp-tar/node_modules/replace-ext/LICENSE | 20 + .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js | 9 + .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../gulp-tar/node_modules/vinyl/LICENSE | 20 + .../gulp-tar/node_modules/vinyl/README.md | 195 + .../gulp-tar/node_modules/vinyl/index.js | 213 + .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 11 + .../node_modules/vinyl/lib/isBuffer.js | 1 + .../gulp-tar/node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl/lib/isStream.js | 0 .../gulp-tar/node_modules/vinyl/package.json | 37 + node_modules/gulp-tar/package.json | 109 +- .../gulp-typescript/node_modules/.bin/tsc | 1 + .../node_modules/.bin/tsserver | 1 + .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../node_modules/clone-stats/test.js | 36 + .../node_modules/gulp-util/LICENSE | 20 + .../node_modules/gulp-util/README.md | 146 + .../node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/PluginError.js | 130 + .../node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/combine.js | 11 + .../node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../node_modules/gulp-util/lib/log.js | 14 + .../node_modules/gulp-util/lib/noop.js | 5 + .../node_modules/gulp-util/lib/template.js | 23 + .../gulp-util/node_modules/.bin/dateformat | 1 + .../node_modules/gulp-util/package.json | 51 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../node_modules/lodash.template/LICENSE | 22 + .../node_modules/lodash.template/README.md | 20 + .../node_modules/lodash.template/index.js | 389 + .../node_modules/lodash.template/package.json | 30 + .../node_modules/object-assign/index.js | 39 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 38 + .../node_modules/object-assign/readme.md | 51 + .../node_modules/replace-ext/.npmignore | 6 + .../node_modules/replace-ext/.travis.yml | 8 + .../node_modules/replace-ext/LICENSE | 20 + .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js | 9 + .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../node_modules/vinyl/LICENSE | 20 + .../node_modules/vinyl/README.md | 195 + .../node_modules/vinyl/index.js | 213 + .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 11 + .../node_modules/vinyl/lib/isBuffer.js | 1 + .../node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl/lib/isStream.js | 5 + .../node_modules/vinyl/package.json | 37 + node_modules/gulp-typescript/package.json | 111 +- node_modules/gulp-typescript/release/file.js | 149 - .../gulp-typescript/release/filter.d.ts | 12 - .../gulp-typescript/release/filter.js | 84 - .../gulp-typescript/release/main.d.ts | 5 +- node_modules/gulp-typescript/release/main.js | 5 +- .../gulp-typescript/release/output.d.ts | 1 + .../gulp-typescript/release/output.js | 6 +- .../gulp-typescript/release/project.d.ts | 1 + .../gulp-typescript/release/reporter.d.ts | 1 + .../gulp-typescript/release/reporter.js | 2 +- .../gulp-typescript/release/tsapi.d.ts | 88 - node_modules/gulp-typescript/release/tsapi.js | 105 - .../gulp-typescript/release/tsconfig.d.ts | 5 - .../gulp-typescript/release/tsconfig.js | 1 - .../gulp-typescript/release/types.d.ts | 2 +- .../gulp-typescript/release/utils.d.ts | 1 + node_modules/gulp-typescript/release/utils.js | 4 + .../gulp-typescript/release/vinyl-file.d.ts | 4 - .../gulp-typescript/release/vinyl-file.js | 1 - node_modules/gulp-typescript/tsd.json | 30 - .../node_modules => }/gulp-util/.npmignore | 0 .../node_modules => }/gulp-util/.travis.yml | 0 node_modules/gulp-util/README.md | 32 +- node_modules/gulp-util/index.js | 14 +- .../node_modules => }/gulp-util/lib/File.js | 0 node_modules/gulp-util/lib/PluginError.js | 114 +- .../node_modules => }/gulp-util/lib/beep.js | 0 node_modules/gulp-util/lib/buffer.js | 2 +- .../node_modules => }/gulp-util/lib/colors.js | 0 .../node_modules => }/gulp-util/lib/date.js | 0 node_modules/gulp-util/lib/env.js | 2 +- node_modules/gulp-util/lib/isBuffer.js | 2 +- node_modules/gulp-util/lib/isNull.js | 2 +- node_modules/gulp-util/lib/isStream.js | 2 +- .../gulp-util/lib/linefeed.js | 0 node_modules/gulp-util/lib/log.js | 16 +- .../gulp-util/lib/replaceExtension.js | 9 + node_modules/gulp-util/lib/template.js | 14 +- .../gulp-util/node_modules/.bin/dateformat | 1 + .../node_modules/ansi-regex/index.js | 0 .../node_modules/ansi-regex/package.json | 51 + .../node_modules/ansi-regex/readme.md | 0 .../node_modules/ansi-styles/index.js | 0 .../node_modules/ansi-styles/package.json | 46 + .../node_modules/ansi-styles/readme.md | 0 .../node_modules/chalk/index.js | 0 .../chalk/node_modules/.bin/has-ansi | 1 + .../chalk/node_modules/.bin/strip-ansi | 1 + .../chalk/node_modules/.bin/supports-color | 1 + .../gulp-util/node_modules/chalk/package.json | 53 + .../node_modules/chalk/readme.md | 0 .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../node_modules/clone-stats/test.js | 36 + .../escape-string-regexp/index.js | 11 + .../node_modules/escape-string-regexp/license | 21 + .../escape-string-regexp/package.json | 41 + .../escape-string-regexp/readme.md | 27 + .../node_modules/has-ansi/cli.js | 0 .../node_modules/has-ansi/index.js | 0 .../node_modules/has-ansi/package.json | 57 + .../node_modules/has-ansi/readme.md | 0 .../gulp-util/node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../gulp-util/node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 25 + .../node_modules/minimist}/.travis.yml | 0 .../node_modules/minimist/LICENSE | 0 .../node_modules/minimist/example/parse.js | 0 .../node_modules/minimist/index.js | 0 .../node_modules/minimist/package.json | 40 + .../node_modules/minimist/readme.markdown | 0 .../node_modules/minimist/test/all_bool.js | 0 .../node_modules/minimist/test/bool.js | 0 .../node_modules/minimist/test/dash.js | 0 .../minimist/test/default_bool.js | 0 .../node_modules/minimist/test/dotted.js | 0 .../node_modules/minimist/test/long.js | 0 .../node_modules/minimist/test/num.js | 0 .../node_modules/minimist/test/parse.js | 0 .../minimist/test/parse_modified.js | 0 .../node_modules/minimist/test/short.js | 0 .../node_modules/minimist/test/whitespace.js | 0 .../node_modules/object-assign/package.json | 102 - .../node_modules/readable-stream/.npmignore | 5 + .../node_modules/readable-stream/LICENSE | 0 .../node_modules/readable-stream/README.md | 0 .../node_modules/readable-stream/duplex.js | 0 .../readable-stream/lib/_stream_duplex.js | 89 + .../lib/_stream_passthrough.js | 46 + .../readable-stream/lib/_stream_readable.js | 0 .../readable-stream/lib/_stream_transform.js | 0 .../readable-stream/lib/_stream_writable.js | 0 .../node_modules/readable-stream/package.json | 32 + .../readable-stream/passthrough.js | 0 .../node_modules/readable-stream/readable.js | 0 .../node_modules/readable-stream/transform.js | 0 .../node_modules/readable-stream/writable.js | 0 .../node_modules/strip-ansi/cli.js | 0 .../node_modules/strip-ansi/index.js | 0 .../node_modules/strip-ansi/package.json | 56 + .../node_modules/strip-ansi/readme.md | 0 .../node_modules/supports-color/cli.js | 0 .../node_modules/supports-color/index.js | 0 .../node_modules/supports-color/package.json | 50 + .../node_modules/supports-color/readme.md | 0 .../node_modules/through2/.npmignore | 0 .../node_modules/through2/LICENSE | 0 .../gulp-util/node_modules/through2/README.md | 0 .../node_modules/through2/package.json | 32 + .../node_modules/through2/through2.js | 0 .../gulp-util/node_modules/vinyl/.npmignore | 6 + .../node_modules/vinyl/.travis.yml | 0 .../gulp-util/node_modules/vinyl/LICENSE | 0 .../gulp-util/node_modules/vinyl/README.md | 158 +- .../gulp-util/node_modules/vinyl/index.js | 125 +- .../node_modules/vinyl/lib/cloneBuffer.js | 2 +- .../node_modules/vinyl/lib/inspectStream.js | 5 +- .../node_modules/vinyl/lib/isBuffer.js | 8 +- .../node_modules/vinyl/lib/isNull.js | 2 +- .../gulp-util/node_modules/vinyl/package.json | 124 +- .../node_modules/vinyl/test/File.js | 0 .../node_modules/vinyl/test/cloneBuffer.js | 0 .../node_modules/vinyl/test/inspectStream.js | 0 .../node_modules/vinyl/test/isBuffer.js | 0 .../node_modules/vinyl/test/isNull.js | 0 .../node_modules/vinyl/test/isStream.js | 0 .../node_modules/xtend/.jshintrc | 0 .../node_modules/xtend}/.npmignore | 0 .../node_modules/xtend/LICENCE | 4 +- .../node_modules/xtend/Makefile | 0 .../gulp-util/node_modules/xtend/README.md | 28 + .../gulp-util/node_modules/xtend/index.js | 17 + .../gulp-util/node_modules/xtend/mutable.js | 15 + .../gulp-util/node_modules/xtend/package.json | 60 + .../node_modules/xtend/test.js | 0 node_modules/gulp-util/package.json | 164 +- .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../gulp-zip/node_modules/clone-stats/test.js | 36 + .../gulp-zip/node_modules/gulp-util/LICENSE | 20 + .../gulp-zip/node_modules/gulp-util/README.md | 146 + .../gulp-zip/node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/PluginError.js | 130 + .../node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/combine.js | 11 + .../node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../node_modules/gulp-util/lib/log.js | 14 + .../node_modules/gulp-util/lib/noop.js | 5 + .../node_modules/gulp-util/lib/template.js | 23 + .../gulp-util/node_modules/.bin/dateformat | 1 + .../node_modules/gulp-util/package.json | 51 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../node_modules/lodash.template/LICENSE | 22 + .../node_modules/lodash.template/README.md | 20 + .../node_modules/lodash.template/index.js | 389 + .../node_modules/lodash.template/package.json | 30 + .../node_modules/object-assign/index.js | 39 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 38 + .../node_modules/object-assign/readme.md | 51 + .../node_modules/replace-ext/.npmignore | 6 + .../node_modules/replace-ext/.travis.yml | 8 + .../gulp-zip/node_modules/replace-ext/LICENSE | 20 + .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js | 9 + .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../gulp-zip/node_modules/vinyl/LICENSE | 20 + .../gulp-zip/node_modules/vinyl/README.md | 195 + .../gulp-zip/node_modules/vinyl/index.js | 213 + .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 11 + .../node_modules/vinyl/lib/isBuffer.js | 1 + .../gulp-zip/node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl/lib/isStream.js | 5 + .../gulp-zip/node_modules/vinyl/package.json | 37 + node_modules/gulp-zip/package.json | 113 +- node_modules/gulp/node_modules/.bin/semver | 1 + node_modules/gulp/node_modules/.bin/strip-bom | 1 - .../gulp/node_modules/clone-stats/LICENSE.md | 21 + .../gulp/node_modules/clone-stats/README.md | 17 + .../gulp/node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../gulp/node_modules/clone-stats/test.js | 36 + .../gulp/node_modules/clone/package.json | 189 +- .../gulp/node_modules/glob-stream/LICENSE | 20 + .../gulp/node_modules/glob-stream/README.md | 67 + .../gulp/node_modules/glob-stream/index.js | 117 + .../node_modules/glob-stream/package.json | 43 + .../node_modules/glob}/LICENSE | 0 node_modules/gulp/node_modules/glob/README.md | 369 + .../node_modules/glob/common.js | 54 +- .../node_modules/glob/glob.js | 18 +- .../gulp/node_modules/glob/package.json | 41 + .../node_modules/glob/sync.js | 11 +- .../node_modules/graceful-fs/package.json | 105 +- .../gulp/node_modules/gulp-util/LICENSE | 20 + .../gulp/node_modules/gulp-util/README.md | 146 + .../gulp/node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/PluginError.js | 130 + .../gulp/node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/combine.js | 11 + .../gulp/node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../gulp/node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../gulp/node_modules/gulp-util/lib/log.js | 14 + .../gulp/node_modules/gulp-util/lib/noop.js | 5 + .../node_modules/gulp-util/lib/template.js | 23 + .../gulp-util/node_modules/.bin/dateformat | 1 + .../gulp-util/node_modules/clone/.npmignore | 1 + .../gulp-util/node_modules/clone/.travis.yml | 3 + .../gulp-util/node_modules/clone/LICENSE | 18 + .../gulp-util/node_modules/clone/README.md | 126 + .../gulp-util/node_modules/clone/clone.js | 160 + .../gulp-util/node_modules/clone/package.json | 51 + .../node_modules/clone/test-apart-ctx.html | 22 + .../gulp-util/node_modules/clone/test.html | 148 + .../gulp-util/node_modules/clone/test.js | 372 + .../node_modules/readable-stream/.npmignore | 5 + .../node_modules/readable-stream/.travis.yml | 52 + .../node_modules/readable-stream/.zuul.yml | 1 + .../node_modules/readable-stream/LICENSE | 0 .../node_modules/readable-stream/README.md | 36 + .../readable-stream/doc/stream.markdown | 1760 ++ .../doc/wg-meetings/2015-01-30.md | 0 .../node_modules/readable-stream/duplex.js | 0 .../readable-stream/lib/_stream_duplex.js | 0 .../lib/_stream_passthrough.js | 0 .../readable-stream/lib/_stream_readable.js | 880 + .../readable-stream/lib/_stream_transform.js | 180 + .../readable-stream/lib/_stream_writable.js | 516 + .../node_modules/readable-stream/package.json | 37 + .../readable-stream/passthrough.js | 0 .../node_modules/readable-stream/readable.js | 12 + .../node_modules/readable-stream/transform.js | 0 .../node_modules/readable-stream/writable.js | 0 .../node_modules/through2/.npmignore | 3 + .../gulp-util/node_modules/through2/LICENSE | 39 + .../gulp-util/node_modules/through2/README.md | 133 + .../node_modules/through2/package.json | 32 + .../node_modules/through2/through2.js | 96 + .../gulp-util/node_modules/vinyl/LICENSE | 20 + .../gulp-util/node_modules/vinyl/README.md | 195 + .../gulp-util/node_modules/vinyl/index.js | 213 + .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 11 + .../node_modules/vinyl/lib/isBuffer.js | 1 + .../node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl/lib/isStream.js | 5 + .../gulp-util/node_modules/vinyl/package.json | 37 + .../gulp/node_modules/gulp-util/package.json | 51 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../gulp/node_modules/lodash.template/LICENSE | 22 + .../node_modules/lodash.template/README.md | 20 + .../node_modules/lodash.template/index.js | 389 + .../node_modules/lodash.template/package.json | 30 + .../node_modules/minimatch}/LICENSE | 0 .../node_modules/minimatch/README.md | 0 .../node_modules/minimatch/browser.js | 0 .../node_modules/minimatch/minimatch.js | 0 .../gulp/node_modules/minimatch/package.json | 32 + .../gulp/node_modules/object-assign/index.js | 39 + .../gulp/node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 38 + .../gulp/node_modules/object-assign/readme.md | 51 + .../ordered-read-streams/.npmignore | 0 .../ordered-read-streams/.travis.yml | 0 .../node_modules/ordered-read-streams/LICENSE | 0 .../ordered-read-streams/README.md | 0 .../ordered-read-streams/index.js | 87 + .../ordered-read-streams/package.json | 22 + .../ordered-read-streams/test/main.js | 0 .../node_modules/isarray/README.md | 54 + .../node_modules/isarray/build/build.js | 209 + .../node_modules/isarray/component.json | 0 .../node_modules/isarray/index.js | 3 + .../node_modules/isarray/package.json | 25 + .../node_modules/readable-stream/package.json | 112 +- .../gulp/node_modules/replace-ext/.npmignore | 6 + .../gulp/node_modules/replace-ext/.travis.yml | 8 + .../gulp/node_modules/replace-ext/LICENSE | 20 + .../gulp/node_modules/replace-ext/README.md | 44 + .../gulp/node_modules/replace-ext/index.js | 9 + .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../gulp/node_modules/strip-bom/package.json | 91 +- .../gulp/node_modules/through2/package.json | 103 +- .../node_modules}/unique-stream/.npmignore | 0 .../node_modules}/unique-stream/.travis.yml | 0 .../node_modules/unique-stream/LICENSE | 0 .../gulp/node_modules/unique-stream/README.md | 89 + .../gulp/node_modules/unique-stream/index.js | 54 + .../node_modules/unique-stream/package.json | 27 + .../node_modules}/unique-stream/test/index.js | 0 .../vinyl-fs/node_modules/.bin/mkdirp | 1 + .../vinyl-fs/node_modules/.bin/strip-bom | 1 + .../gulp/node_modules/vinyl-fs/package.json | 98 +- .../gulp/node_modules/vinyl/package.json | 126 +- node_modules/gulp/package.json | 146 +- node_modules/gulplog/package.json | 103 +- node_modules/has-ansi/package.json | 97 +- node_modules/has-color/package.json | 84 +- node_modules/has-gulplog/package.json | 101 +- node_modules/hosted-git-info/package.json | 101 +- node_modules/iconv-lite/package.json | 189 +- node_modules/indent-string/package.json | 89 +- node_modules/inflight/inflight.js | 34 +- node_modules/inflight/package.json | 114 +- node_modules/inherits/package.json | 119 +- node_modules/ini/package.json | 94 +- node_modules/interpret/package.json | 89 +- .../invariant/node_modules/.bin/loose-envify | 1 + node_modules/invariant/package.json | 118 +- node_modules/irregular-plurals/package.json | 94 +- node_modules/is-absolute/README.md | 44 +- .../node_modules/is-windows/LICENSE | 21 - .../node_modules/is-windows/README.md | 56 - .../node_modules/is-windows/index.js | 22 - .../node_modules/is-windows/package.json | 114 - node_modules/is-absolute/package.json | 111 +- node_modules/is-arrayish/package.json | 94 +- node_modules/is-buffer/package.json | 69 +- node_modules/is-builtin-module/package.json | 89 +- node_modules/is-dotfile/package.json | 99 +- node_modules/is-equal-shallow/package.json | 108 +- node_modules/is-extendable/package.json | 100 +- node_modules/is-extglob/package.json | 100 +- node_modules/is-finite/package.json | 94 +- node_modules/is-glob/package.json | 103 +- node_modules/is-number/package.json | 103 +- node_modules/is-path-cwd/package.json | 85 +- node_modules/is-path-in-cwd/package.json | 88 +- node_modules/is-path-inside/package.json | 88 +- node_modules/is-plain-obj/package.json | 86 +- node_modules/is-posix-bracket/package.json | 103 +- node_modules/is-primitive/package.json | 104 +- node_modules/is-regexp/package.json | 84 +- node_modules/is-relative/package.json | 100 +- node_modules/is-stream/package.json | 95 +- node_modules/is-unc-path/package.json | 99 +- node_modules/is-utf8/package.json | 88 +- node_modules/is-valid-glob/package.json | 99 +- node_modules/is-windows/package.json | 104 +- .../{bl/node_modules => }/isarray/.npmignore | 0 .../{bl/node_modules => }/isarray/.travis.yml | 0 .../node_modules => }/isarray/Makefile | 0 node_modules/isarray/README.md | 6 + node_modules/isarray/index.js | 4 +- node_modules/isarray/package.json | 111 +- .../node_modules => }/isarray/test.js | 0 node_modules/isexe/package.json | 90 +- .../isobject/node_modules/isarray/.npmignore | 1 - .../isobject/node_modules/isarray/.travis.yml | 4 - .../isobject/node_modules/isarray/Makefile | 6 - .../isobject/node_modules/isarray/README.md | 60 - .../isobject/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../isobject/node_modules/isarray/test.js | 20 - node_modules/isobject/package.json | 106 +- .../istanbul-lib-coverage/package.json | 104 +- .../7b502358b3b753fdfd3ea908241822c5.json | 1 + .../90393c02039ac688911f97e2beef256f.json | 1 + .../istanbul-lib-instrument/CHANGELOG.md | 20 + .../istanbul-lib-instrument/dist/constants.js | 19 + .../istanbul-lib-instrument/dist/index.js | 9 +- .../dist/instrumenter.js | 2 +- .../dist/read-coverage.js | 78 + .../istanbul-lib-instrument/dist/visitor.js | 15 +- .../node_modules/.bin/babylon | 1 + .../node_modules/.bin/semver | 1 + .../node_modules/semver/LICENSE | 15 + .../node_modules/semver/README.md | 350 + .../node_modules/semver/bin/semver | 133 + .../node_modules/semver/package.json | 22 + .../node_modules/semver/range.bnf | 16 + .../node_modules/semver/semver.js | 1203 ++ .../istanbul-lib-instrument/package.json | 158 +- .../jade/node_modules/commander/package.json | 103 +- .../mkdirp/{.npmignore => .gitignore} | 0 .../jade/node_modules/mkdirp/package.json | 110 +- node_modules/jade/package.json | 106 +- node_modules/js-tokens/package.json | 102 +- node_modules/jsesc/package.json | 155 +- .../json-stable-stringify/package.json | 115 +- node_modules/jsonify/package.json | 116 +- node_modules/kind-of/package.json | 114 +- .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../lazystream/node_modules/isarray/Makefile | 6 - .../lazystream/node_modules/isarray/README.md | 60 - .../lazystream/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../lazystream/node_modules/isarray/test.js | 20 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../doc/wg-meetings/2015-01-30.md | 60 - .../node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - node_modules/lazystream/package.json | 113 +- node_modules/liftoff/package.json | 130 +- node_modules/load-json-file/package.json | 97 +- node_modules/lodash._basecopy/package.json | 127 +- .../lodash._basetostring/package.json | 127 +- node_modules/lodash._basevalues/package.json | 111 +- .../lodash._escapehtmlchar/package.json | 119 +- .../lodash._escapestringchar/package.json | 114 +- node_modules/lodash._getnative/package.json | 123 +- node_modules/lodash._htmlescapes/package.json | 114 +- .../lodash._isiterateecall/package.json | 127 +- node_modules/lodash._isnative/package.json | 105 +- node_modules/lodash._objecttypes/package.json | 115 +- node_modules/lodash._reescape/package.json | 111 +- node_modules/lodash._reevaluate/package.json | 111 +- .../lodash._reinterpolate/LICENSE.txt | 6 +- node_modules/lodash._reinterpolate/README.md | 25 +- node_modules/lodash._reinterpolate/index.js | 14 +- .../lodash._reinterpolate/package.json | 131 +- .../node_modules/lodash.keys/package.json | 130 +- .../lodash._reunescapedhtml/package.json | 123 +- node_modules/lodash._root/package.json | 111 +- node_modules/lodash._shimkeys/package.json | 122 +- node_modules/lodash.assignwith/package.json | 116 +- .../node_modules/lodash.keys/package.json | 130 +- node_modules/lodash.defaults/package.json | 139 +- node_modules/lodash.escape/package.json | 122 +- node_modules/lodash.isarguments/package.json | 116 +- node_modules/lodash.isarray/package.json | 134 +- node_modules/lodash.isempty/package.json | 116 +- node_modules/lodash.isequal/package.json | 116 +- node_modules/lodash.isobject/package.json | 130 +- .../lodash.isplainobject/package.json | 117 +- node_modules/lodash.isstring/package.json | 117 +- node_modules/lodash.keys/package.json | 141 +- node_modules/lodash.mapvalues/package.json | 116 +- node_modules/lodash.pick/package.json | 116 +- node_modules/lodash.restparam/package.json | 134 +- .../LICENSE.txt | 0 node_modules/lodash.template/README.md | 25 +- node_modules/lodash.template/index.js | 387 +- .../node_modules/lodash.escape/LICENSE.txt | 0 .../node_modules/lodash.escape/README.md | 0 .../node_modules/lodash.escape/index.js | 0 .../node_modules/lodash.escape/package.json | 22 + .../node_modules/lodash.keys/LICENSE.txt | 0 .../node_modules/lodash.keys/README.md | 0 .../node_modules/lodash.keys/index.js | 0 .../node_modules/lodash.keys/package.json | 22 + .../lodash.templatesettings}/LICENSE.txt | 0 .../lodash.templatesettings/README.md | 0 .../lodash.templatesettings/index.js | 0 .../lodash.templatesettings/package.json | 21 + node_modules/lodash.template/package.json | 159 +- .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 20 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 18 + .../lodash.templatesettings/package.json | 122 +- .../node_modules/lodash.keys/package.json | 130 +- node_modules/lodash.values/package.json | 131 +- node_modules/lodash/LICENSE | 47 + node_modules/lodash/README.md | 139 +- .../node_modules => }/lodash/_DataView.js | 0 node_modules/lodash/_Hash.js | 32 + .../node_modules => }/lodash/_LazyWrapper.js | 0 node_modules/lodash/_ListCache.js | 32 + .../lodash/_LodashWrapper.js | 0 .../node_modules => }/lodash/_Map.js | 0 node_modules/lodash/_MapCache.js | 32 + .../node_modules => }/lodash/_Promise.js | 0 .../node_modules => }/lodash/_Set.js | 0 node_modules/lodash/_SetCache.js | 27 + .../node_modules => }/lodash/_Stack.js | 0 .../node_modules => }/lodash/_Symbol.js | 0 .../node_modules => }/lodash/_Uint8Array.js | 0 .../node_modules => }/lodash/_WeakMap.js | 0 .../node_modules => }/lodash/_addMapEntry.js | 0 .../node_modules => }/lodash/_addSetEntry.js | 0 .../node_modules => }/lodash/_apply.js | 0 node_modules/lodash/_arrayAggregator.js | 22 + node_modules/lodash/_arrayEach.js | 22 + node_modules/lodash/_arrayEachRight.js | 21 + node_modules/lodash/_arrayEvery.js | 23 + node_modules/lodash/_arrayFilter.js | 25 + node_modules/lodash/_arrayIncludes.js | 17 + node_modules/lodash/_arrayIncludesWith.js | 22 + .../lodash/_arrayLikeKeys.js | 0 node_modules/lodash/_arrayMap.js | 21 + .../node_modules => }/lodash/_arrayPush.js | 0 node_modules/lodash/_arrayReduce.js | 26 + node_modules/lodash/_arrayReduceRight.js | 24 + .../node_modules => }/lodash/_arraySample.js | 0 .../lodash/_arraySampleSize.js | 0 .../node_modules => }/lodash/_arrayShuffle.js | 0 node_modules/lodash/_arraySome.js | 23 + .../node_modules => }/lodash/_asciiSize.js | 0 .../node_modules => }/lodash/_asciiToArray.js | 0 .../node_modules => }/lodash/_asciiWords.js | 0 .../lodash/_assignInDefaults.js | 0 .../lodash/_assignMergeValue.js | 0 .../node_modules => }/lodash/_assignValue.js | 0 .../node_modules => }/lodash/_assocIndexOf.js | 0 .../lodash/_baseAggregator.js | 0 .../node_modules => }/lodash/_baseAssign.js | 0 .../lodash/_baseAssignValue.js | 0 node_modules/lodash/_baseAt.js | 23 + .../node_modules => }/lodash/_baseClamp.js | 0 .../node_modules => }/lodash/_baseClone.js | 0 .../node_modules => }/lodash/_baseConforms.js | 0 .../lodash/_baseConformsTo.js | 0 .../node_modules => }/lodash/_baseCreate.js | 0 .../node_modules => }/lodash/_baseDelay.js | 0 node_modules/lodash/_baseDifference.js | 67 + .../node_modules => }/lodash/_baseEach.js | 0 .../lodash/_baseEachRight.js | 0 .../node_modules => }/lodash/_baseEvery.js | 0 .../node_modules => }/lodash/_baseExtremum.js | 0 .../node_modules => }/lodash/_baseFill.js | 0 .../node_modules => }/lodash/_baseFilter.js | 0 .../lodash/_baseFindIndex.js | 0 .../node_modules => }/lodash/_baseFindKey.js | 0 .../node_modules => }/lodash/_baseFlatten.js | 0 .../node_modules => }/lodash/_baseFor.js | 0 .../node_modules => }/lodash/_baseForOwn.js | 0 .../lodash/_baseForOwnRight.js | 0 .../node_modules => }/lodash/_baseForRight.js | 0 .../lodash/_baseFunctions.js | 0 .../node_modules => }/lodash/_baseGet.js | 0 .../lodash/_baseGetAllKeys.js | 0 node_modules/lodash/_baseGetTag.js | 29 + .../node_modules => }/lodash/_baseGt.js | 0 .../node_modules => }/lodash/_baseHas.js | 0 .../node_modules => }/lodash/_baseHasIn.js | 0 .../node_modules => }/lodash/_baseInRange.js | 0 .../node_modules => }/lodash/_baseIndexOf.js | 0 .../lodash/_baseIndexOfWith.js | 0 .../lodash/_baseIntersection.js | 0 .../node_modules => }/lodash/_baseInverter.js | 0 .../node_modules => }/lodash/_baseInvoke.js | 0 node_modules/lodash/_baseIsArguments.js | 18 + node_modules/lodash/_baseIsArrayBuffer.js | 17 + node_modules/lodash/_baseIsDate.js | 18 + .../node_modules => }/lodash/_baseIsEqual.js | 0 .../lodash/_baseIsEqualDeep.js | 0 .../node_modules => }/lodash/_baseIsMap.js | 0 .../node_modules => }/lodash/_baseIsMatch.js | 0 .../node_modules => }/lodash/_baseIsNaN.js | 0 .../node_modules => }/lodash/_baseIsNative.js | 0 node_modules/lodash/_baseIsRegExp.js | 18 + .../node_modules => }/lodash/_baseIsSet.js | 0 node_modules/lodash/_baseIsTypedArray.js | 60 + .../node_modules => }/lodash/_baseIteratee.js | 0 .../node_modules => }/lodash/_baseKeys.js | 0 .../node_modules => }/lodash/_baseKeysIn.js | 0 .../node_modules => }/lodash/_baseLodash.js | 0 .../node_modules => }/lodash/_baseLt.js | 0 .../node_modules => }/lodash/_baseMap.js | 0 .../node_modules => }/lodash/_baseMatches.js | 0 .../lodash/_baseMatchesProperty.js | 0 node_modules/lodash/_baseMean.js | 20 + .../node_modules => }/lodash/_baseMerge.js | 0 .../lodash/_baseMergeDeep.js | 0 .../node_modules => }/lodash/_baseNth.js | 0 .../node_modules => }/lodash/_baseOrderBy.js | 0 .../node_modules => }/lodash/_basePick.js | 0 .../node_modules => }/lodash/_basePickBy.js | 0 .../node_modules => }/lodash/_baseProperty.js | 0 .../lodash/_basePropertyDeep.js | 0 .../lodash/_basePropertyOf.js | 0 .../node_modules => }/lodash/_basePullAll.js | 0 .../node_modules => }/lodash/_basePullAt.js | 0 .../node_modules => }/lodash/_baseRandom.js | 0 .../node_modules => }/lodash/_baseRange.js | 0 .../node_modules => }/lodash/_baseReduce.js | 0 .../node_modules => }/lodash/_baseRepeat.js | 0 .../node_modules => }/lodash/_baseRest.js | 0 .../node_modules => }/lodash/_baseSample.js | 0 .../lodash/_baseSampleSize.js | 0 .../node_modules => }/lodash/_baseSet.js | 0 .../node_modules => }/lodash/_baseSetData.js | 0 .../lodash/_baseSetToString.js | 0 .../node_modules => }/lodash/_baseShuffle.js | 0 .../node_modules => }/lodash/_baseSlice.js | 0 .../node_modules => }/lodash/_baseSome.js | 0 .../node_modules => }/lodash/_baseSortBy.js | 0 node_modules/lodash/_baseSortedIndex.js | 42 + node_modules/lodash/_baseSortedIndexBy.js | 64 + .../lodash/_baseSortedUniq.js | 0 .../node_modules => }/lodash/_baseSum.js | 0 .../node_modules => }/lodash/_baseTimes.js | 0 .../node_modules => }/lodash/_baseToNumber.js | 0 .../node_modules => }/lodash/_baseToPairs.js | 0 .../node_modules => }/lodash/_baseToString.js | 0 .../node_modules => }/lodash/_baseUnary.js | 0 .../node_modules => }/lodash/_baseUniq.js | 0 .../node_modules => }/lodash/_baseUnset.js | 0 .../node_modules => }/lodash/_baseUpdate.js | 0 .../node_modules => }/lodash/_baseValues.js | 0 .../node_modules => }/lodash/_baseWhile.js | 0 .../lodash/_baseWrapperValue.js | 0 node_modules/lodash/_baseXor.js | 36 + .../lodash/_baseZipObject.js | 0 .../node_modules => }/lodash/_cacheHas.js | 0 .../lodash/_castArrayLikeObject.js | 0 .../node_modules => }/lodash/_castFunction.js | 0 .../node_modules => }/lodash/_castPath.js | 0 .../node_modules => }/lodash/_castRest.js | 0 .../node_modules => }/lodash/_castSlice.js | 0 .../lodash/_charsEndIndex.js | 0 .../lodash/_charsStartIndex.js | 0 .../lodash/_cloneArrayBuffer.js | 0 .../node_modules => }/lodash/_cloneBuffer.js | 0 .../lodash/_cloneDataView.js | 0 .../node_modules => }/lodash/_cloneMap.js | 0 .../node_modules => }/lodash/_cloneRegExp.js | 0 .../node_modules => }/lodash/_cloneSet.js | 0 .../node_modules => }/lodash/_cloneSymbol.js | 0 .../lodash/_cloneTypedArray.js | 0 .../lodash/_compareAscending.js | 0 .../lodash/_compareMultiple.js | 0 .../node_modules => }/lodash/_composeArgs.js | 0 .../lodash/_composeArgsRight.js | 0 .../node_modules => }/lodash/_copyArray.js | 0 .../node_modules => }/lodash/_copyObject.js | 0 .../node_modules => }/lodash/_copySymbols.js | 0 .../node_modules => }/lodash/_coreJsData.js | 0 .../node_modules => }/lodash/_countHolders.js | 0 .../lodash/_createAggregator.js | 0 .../lodash/_createAssigner.js | 0 .../lodash/_createBaseEach.js | 0 .../lodash/_createBaseFor.js | 0 .../node_modules => }/lodash/_createBind.js | 0 .../lodash/_createCaseFirst.js | 0 .../lodash/_createCompounder.js | 0 .../node_modules => }/lodash/_createCtor.js | 0 .../node_modules => }/lodash/_createCurry.js | 0 .../node_modules => }/lodash/_createFind.js | 0 .../node_modules => }/lodash/_createFlow.js | 0 .../node_modules => }/lodash/_createHybrid.js | 0 .../lodash/_createInverter.js | 0 .../lodash/_createMathOperation.js | 0 .../node_modules => }/lodash/_createOver.js | 0 .../lodash/_createPadding.js | 0 .../lodash/_createPartial.js | 0 .../node_modules => }/lodash/_createRange.js | 0 .../lodash/_createRecurry.js | 0 .../lodash/_createRelationalOperation.js | 0 .../node_modules => }/lodash/_createRound.js | 0 .../node_modules => }/lodash/_createSet.js | 0 .../lodash/_createToPairs.js | 0 .../node_modules => }/lodash/_createWrap.js | 0 .../node_modules => }/lodash/_deburrLetter.js | 0 .../lodash/_defineProperty.js | 0 .../node_modules => }/lodash/_equalArrays.js | 0 .../node_modules => }/lodash/_equalByTag.js | 0 .../node_modules => }/lodash/_equalObjects.js | 0 .../lodash/_escapeHtmlChar.js | 0 .../lodash/_escapeStringChar.js | 0 .../node_modules => }/lodash/_flatRest.js | 0 .../node_modules => }/lodash/_freeGlobal.js | 0 .../node_modules => }/lodash/_getAllKeys.js | 0 .../node_modules => }/lodash/_getAllKeysIn.js | 0 .../node_modules => }/lodash/_getData.js | 0 .../node_modules => }/lodash/_getFuncName.js | 0 .../node_modules => }/lodash/_getHolder.js | 0 .../node_modules => }/lodash/_getMapData.js | 0 .../node_modules => }/lodash/_getMatchData.js | 0 .../node_modules => }/lodash/_getNative.js | 0 .../node_modules => }/lodash/_getPrototype.js | 0 node_modules/lodash/_getRawTag.js | 46 + .../node_modules => }/lodash/_getSymbols.js | 0 .../node_modules => }/lodash/_getSymbolsIn.js | 0 node_modules/lodash/_getTag.js | 58 + .../node_modules => }/lodash/_getValue.js | 0 .../node_modules => }/lodash/_getView.js | 0 .../lodash/_getWrapDetails.js | 0 node_modules/lodash/_hasPath.js | 40 + .../node_modules => }/lodash/_hasUnicode.js | 0 .../lodash/_hasUnicodeWord.js | 0 .../node_modules => }/lodash/_hashClear.js | 0 .../node_modules => }/lodash/_hashDelete.js | 0 .../node_modules => }/lodash/_hashGet.js | 0 .../node_modules => }/lodash/_hashHas.js | 0 .../node_modules => }/lodash/_hashSet.js | 0 .../lodash/_initCloneArray.js | 0 .../lodash/_initCloneByTag.js | 0 .../lodash/_initCloneObject.js | 0 .../lodash/_insertWrapDetails.js | 0 .../lodash/_isFlattenable.js | 0 .../node_modules => }/lodash/_isIndex.js | 0 .../lodash/_isIterateeCall.js | 0 .../node_modules => }/lodash/_isKey.js | 0 .../node_modules => }/lodash/_isKeyable.js | 0 .../node_modules => }/lodash/_isLaziable.js | 0 .../node_modules => }/lodash/_isMaskable.js | 0 .../node_modules => }/lodash/_isMasked.js | 0 .../node_modules => }/lodash/_isPrototype.js | 0 .../lodash/_isStrictComparable.js | 0 .../lodash/_iteratorToArray.js | 0 .../node_modules => }/lodash/_lazyClone.js | 0 .../node_modules => }/lodash/_lazyReverse.js | 0 .../node_modules => }/lodash/_lazyValue.js | 0 .../lodash/_listCacheClear.js | 0 .../lodash/_listCacheDelete.js | 0 .../node_modules => }/lodash/_listCacheGet.js | 0 .../node_modules => }/lodash/_listCacheHas.js | 0 .../node_modules => }/lodash/_listCacheSet.js | 0 .../lodash/_mapCacheClear.js | 0 .../lodash/_mapCacheDelete.js | 0 .../node_modules => }/lodash/_mapCacheGet.js | 0 .../node_modules => }/lodash/_mapCacheHas.js | 0 .../node_modules => }/lodash/_mapCacheSet.js | 0 .../node_modules => }/lodash/_mapToArray.js | 0 .../lodash/_matchesStrictComparable.js | 0 .../lodash/_memoizeCapped.js | 0 .../node_modules => }/lodash/_mergeData.js | 0 .../lodash/_mergeDefaults.js | 0 .../node_modules => }/lodash/_metaMap.js | 0 .../node_modules => }/lodash/_nativeCreate.js | 0 .../node_modules => }/lodash/_nativeKeys.js | 0 .../node_modules => }/lodash/_nativeKeysIn.js | 0 .../node_modules => }/lodash/_nodeUtil.js | 0 node_modules/lodash/_objectToString.js | 22 + .../node_modules => }/lodash/_overArg.js | 0 .../node_modules => }/lodash/_overRest.js | 0 .../node_modules => }/lodash/_parent.js | 0 .../node_modules => }/lodash/_reEscape.js | 0 .../node_modules => }/lodash/_reEvaluate.js | 0 .../lodash/_reInterpolate.js | 0 .../node_modules => }/lodash/_realNames.js | 0 .../node_modules => }/lodash/_reorder.js | 0 .../lodash/_replaceHolders.js | 0 .../node_modules => }/lodash/_root.js | 0 .../node_modules => }/lodash/_setCacheAdd.js | 0 .../node_modules => }/lodash/_setCacheHas.js | 0 .../node_modules => }/lodash/_setData.js | 0 .../node_modules => }/lodash/_setToArray.js | 0 .../node_modules => }/lodash/_setToPairs.js | 0 .../node_modules => }/lodash/_setToString.js | 0 .../lodash/_setWrapToString.js | 0 node_modules/lodash/_shortOut.js | 37 + .../node_modules => }/lodash/_shuffleSelf.js | 0 .../node_modules => }/lodash/_stackClear.js | 0 .../node_modules => }/lodash/_stackDelete.js | 0 .../node_modules => }/lodash/_stackGet.js | 0 .../node_modules => }/lodash/_stackHas.js | 0 .../node_modules => }/lodash/_stackSet.js | 0 .../lodash/_strictIndexOf.js | 0 .../lodash/_strictLastIndexOf.js | 0 .../node_modules => }/lodash/_stringSize.js | 0 .../lodash/_stringToArray.js | 0 .../node_modules => }/lodash/_stringToPath.js | 0 .../node_modules => }/lodash/_toKey.js | 0 node_modules/lodash/_toSource.js | 26 + .../lodash/_unescapeHtmlChar.js | 0 .../node_modules => }/lodash/_unicodeSize.js | 0 .../lodash/_unicodeToArray.js | 0 node_modules/lodash/_unicodeWords.js | 67 + .../lodash/_updateWrapDetails.js | 0 .../node_modules => }/lodash/_wrapperClone.js | 0 .../node_modules => }/lodash/add.js | 0 .../node_modules => }/lodash/after.js | 0 .../node_modules => }/lodash/array.js | 0 .../node_modules => }/lodash/ary.js | 0 .../node_modules => }/lodash/assign.js | 0 .../node_modules => }/lodash/assignIn.js | 0 .../node_modules => }/lodash/assignInWith.js | 0 .../node_modules => }/lodash/assignWith.js | 0 .../node_modules => }/lodash/at.js | 0 .../node_modules => }/lodash/attempt.js | 0 .../node_modules => }/lodash/before.js | 0 .../node_modules => }/lodash/bind.js | 0 .../node_modules => }/lodash/bindAll.js | 0 .../node_modules => }/lodash/bindKey.js | 0 .../node_modules => }/lodash/camelCase.js | 0 .../node_modules => }/lodash/capitalize.js | 0 .../node_modules => }/lodash/castArray.js | 0 .../node_modules => }/lodash/ceil.js | 0 .../node_modules => }/lodash/chain.js | 0 node_modules/lodash/chunk.js | 50 + .../node_modules => }/lodash/clamp.js | 0 .../node_modules => }/lodash/clone.js | 0 .../node_modules => }/lodash/cloneDeep.js | 0 node_modules/lodash/cloneDeepWith.js | 36 + node_modules/lodash/cloneWith.js | 39 + .../node_modules => }/lodash/collection.js | 0 .../node_modules => }/lodash/commit.js | 0 node_modules/lodash/compact.js | 31 + .../node_modules => }/lodash/concat.js | 0 node_modules/lodash/cond.js | 60 + .../node_modules => }/lodash/conforms.js | 0 .../node_modules => }/lodash/conformsTo.js | 0 .../node_modules => }/lodash/constant.js | 0 node_modules/lodash/core.js | 3853 ++++ node_modules/lodash/core.min.js | 29 + node_modules/lodash/countBy.js | 40 + node_modules/lodash/create.js | 43 + .../node_modules => }/lodash/curry.js | 0 .../node_modules => }/lodash/curryRight.js | 0 .../node_modules => }/lodash/date.js | 0 .../node_modules => }/lodash/debounce.js | 0 .../node_modules => }/lodash/deburr.js | 0 .../node_modules => }/lodash/defaultTo.js | 0 .../node_modules => }/lodash/defaults.js | 0 .../node_modules => }/lodash/defaultsDeep.js | 0 .../node_modules => }/lodash/defer.js | 0 .../node_modules => }/lodash/delay.js | 0 .../node_modules => }/lodash/difference.js | 0 .../node_modules => }/lodash/differenceBy.js | 0 .../lodash/differenceWith.js | 0 .../node_modules => }/lodash/divide.js | 0 node_modules/lodash/drop.js | 38 + node_modules/lodash/dropRight.js | 39 + .../lodash/dropRightWhile.js | 0 node_modules/lodash/dropWhile.js | 45 + .../node_modules => }/lodash/each.js | 0 .../node_modules => }/lodash/eachRight.js | 0 .../node_modules => }/lodash/endsWith.js | 0 .../node_modules => }/lodash/entries.js | 0 .../node_modules => }/lodash/entriesIn.js | 0 .../node_modules => }/lodash/eq.js | 0 .../node_modules => }/lodash/escape.js | 0 .../node_modules => }/lodash/escapeRegExp.js | 0 node_modules/lodash/every.js | 56 + .../node_modules => }/lodash/extend.js | 0 .../node_modules => }/lodash/extendWith.js | 0 node_modules/lodash/fill.js | 45 + node_modules/lodash/filter.js | 48 + node_modules/lodash/find.js | 42 + node_modules/lodash/findIndex.js | 55 + .../node_modules => }/lodash/findKey.js | 0 node_modules/lodash/findLast.js | 25 + node_modules/lodash/findLastIndex.js | 59 + .../node_modules => }/lodash/findLastKey.js | 0 .../node_modules => }/lodash/first.js | 0 node_modules/lodash/flatMap.js | 29 + node_modules/lodash/flatMapDeep.js | 31 + node_modules/lodash/flatMapDepth.js | 31 + node_modules/lodash/flatten.js | 22 + node_modules/lodash/flattenDeep.js | 25 + node_modules/lodash/flattenDepth.js | 33 + .../node_modules => }/lodash/flip.js | 0 .../node_modules => }/lodash/floor.js | 0 .../node_modules => }/lodash/flow.js | 0 .../node_modules => }/lodash/flowRight.js | 0 node_modules/lodash/forEach.js | 41 + node_modules/lodash/forEachRight.js | 31 + node_modules/lodash/forIn.js | 39 + node_modules/lodash/forInRight.js | 37 + node_modules/lodash/forOwn.js | 36 + node_modules/lodash/forOwnRight.js | 34 + .../node_modules => }/lodash/fp.js | 0 .../node_modules => }/lodash/fp/F.js | 0 .../node_modules => }/lodash/fp/T.js | 0 .../node_modules => }/lodash/fp/__.js | 0 node_modules/lodash/fp/_baseConvert.js | 536 + .../lodash/fp/_convertBrowser.js | 0 .../lodash/fp/_falseOptions.js | 0 .../node_modules => }/lodash/fp/_mapping.js | 0 .../node_modules => }/lodash/fp/_util.js | 0 .../node_modules => }/lodash/fp/add.js | 0 .../node_modules => }/lodash/fp/after.js | 0 .../node_modules => }/lodash/fp/all.js | 0 .../node_modules => }/lodash/fp/allPass.js | 0 .../node_modules => }/lodash/fp/always.js | 0 .../node_modules => }/lodash/fp/any.js | 0 .../node_modules => }/lodash/fp/anyPass.js | 0 .../node_modules => }/lodash/fp/apply.js | 0 .../node_modules => }/lodash/fp/array.js | 0 .../node_modules => }/lodash/fp/ary.js | 0 .../node_modules => }/lodash/fp/assign.js | 0 .../node_modules => }/lodash/fp/assignAll.js | 0 .../lodash/fp/assignAllWith.js | 0 .../node_modules => }/lodash/fp/assignIn.js | 0 .../lodash/fp/assignInAll.js | 0 .../lodash/fp/assignInAllWith.js | 0 .../lodash/fp/assignInWith.js | 0 .../node_modules => }/lodash/fp/assignWith.js | 0 .../node_modules => }/lodash/fp/assoc.js | 0 .../node_modules => }/lodash/fp/assocPath.js | 0 .../node_modules => }/lodash/fp/at.js | 0 .../node_modules => }/lodash/fp/attempt.js | 0 .../node_modules => }/lodash/fp/before.js | 0 .../node_modules => }/lodash/fp/bind.js | 0 .../node_modules => }/lodash/fp/bindAll.js | 0 .../node_modules => }/lodash/fp/bindKey.js | 0 .../node_modules => }/lodash/fp/camelCase.js | 0 .../node_modules => }/lodash/fp/capitalize.js | 0 .../node_modules => }/lodash/fp/castArray.js | 0 .../node_modules => }/lodash/fp/ceil.js | 0 .../node_modules => }/lodash/fp/chain.js | 0 .../node_modules => }/lodash/fp/chunk.js | 0 .../node_modules => }/lodash/fp/clamp.js | 0 .../node_modules => }/lodash/fp/clone.js | 0 .../node_modules => }/lodash/fp/cloneDeep.js | 0 .../lodash/fp/cloneDeepWith.js | 0 .../node_modules => }/lodash/fp/cloneWith.js | 0 .../node_modules => }/lodash/fp/collection.js | 0 .../node_modules => }/lodash/fp/commit.js | 0 .../node_modules => }/lodash/fp/compact.js | 0 .../node_modules => }/lodash/fp/complement.js | 0 .../node_modules => }/lodash/fp/compose.js | 0 .../node_modules => }/lodash/fp/concat.js | 0 .../node_modules => }/lodash/fp/cond.js | 0 .../node_modules => }/lodash/fp/conforms.js | 0 .../node_modules => }/lodash/fp/conformsTo.js | 0 .../node_modules => }/lodash/fp/constant.js | 0 .../node_modules => }/lodash/fp/contains.js | 0 .../node_modules => }/lodash/fp/convert.js | 0 .../node_modules => }/lodash/fp/countBy.js | 0 .../node_modules => }/lodash/fp/create.js | 0 .../node_modules => }/lodash/fp/curry.js | 0 .../node_modules => }/lodash/fp/curryN.js | 0 .../node_modules => }/lodash/fp/curryRight.js | 0 .../lodash/fp/curryRightN.js | 0 .../node_modules => }/lodash/fp/date.js | 0 .../node_modules => }/lodash/fp/debounce.js | 0 .../node_modules => }/lodash/fp/deburr.js | 0 .../node_modules => }/lodash/fp/defaultTo.js | 0 .../node_modules => }/lodash/fp/defaults.js | 0 .../lodash/fp/defaultsAll.js | 0 .../lodash/fp/defaultsDeep.js | 0 .../lodash/fp/defaultsDeepAll.js | 0 .../node_modules => }/lodash/fp/defer.js | 0 .../node_modules => }/lodash/fp/delay.js | 0 .../node_modules => }/lodash/fp/difference.js | 0 .../lodash/fp/differenceBy.js | 0 .../lodash/fp/differenceWith.js | 0 .../node_modules => }/lodash/fp/dissoc.js | 0 .../node_modules => }/lodash/fp/dissocPath.js | 0 .../node_modules => }/lodash/fp/divide.js | 0 .../node_modules => }/lodash/fp/drop.js | 0 .../node_modules => }/lodash/fp/dropLast.js | 0 .../lodash/fp/dropLastWhile.js | 0 .../node_modules => }/lodash/fp/dropRight.js | 0 .../lodash/fp/dropRightWhile.js | 0 .../node_modules => }/lodash/fp/dropWhile.js | 0 .../node_modules => }/lodash/fp/each.js | 0 .../node_modules => }/lodash/fp/eachRight.js | 0 .../node_modules => }/lodash/fp/endsWith.js | 0 .../node_modules => }/lodash/fp/entries.js | 0 .../node_modules => }/lodash/fp/entriesIn.js | 0 .../node_modules => }/lodash/fp/eq.js | 0 .../node_modules => }/lodash/fp/equals.js | 0 .../node_modules => }/lodash/fp/escape.js | 0 .../lodash/fp/escapeRegExp.js | 0 .../node_modules => }/lodash/fp/every.js | 0 .../node_modules => }/lodash/fp/extend.js | 0 .../node_modules => }/lodash/fp/extendAll.js | 0 .../lodash/fp/extendAllWith.js | 0 .../node_modules => }/lodash/fp/extendWith.js | 0 .../node_modules => }/lodash/fp/fill.js | 0 .../node_modules => }/lodash/fp/filter.js | 0 .../node_modules => }/lodash/fp/find.js | 0 .../node_modules => }/lodash/fp/findFrom.js | 0 .../node_modules => }/lodash/fp/findIndex.js | 0 .../lodash/fp/findIndexFrom.js | 0 .../node_modules => }/lodash/fp/findKey.js | 0 .../node_modules => }/lodash/fp/findLast.js | 0 .../lodash/fp/findLastFrom.js | 0 .../lodash/fp/findLastIndex.js | 0 .../lodash/fp/findLastIndexFrom.js | 0 .../lodash/fp/findLastKey.js | 0 .../node_modules => }/lodash/fp/first.js | 0 .../node_modules => }/lodash/fp/flatMap.js | 0 .../lodash/fp/flatMapDeep.js | 0 .../lodash/fp/flatMapDepth.js | 0 .../node_modules => }/lodash/fp/flatten.js | 0 .../lodash/fp/flattenDeep.js | 0 .../lodash/fp/flattenDepth.js | 0 .../node_modules => }/lodash/fp/flip.js | 0 .../node_modules => }/lodash/fp/floor.js | 0 .../node_modules => }/lodash/fp/flow.js | 0 .../node_modules => }/lodash/fp/flowRight.js | 0 .../node_modules => }/lodash/fp/forEach.js | 0 .../lodash/fp/forEachRight.js | 0 .../node_modules => }/lodash/fp/forIn.js | 0 .../node_modules => }/lodash/fp/forInRight.js | 0 .../node_modules => }/lodash/fp/forOwn.js | 0 .../lodash/fp/forOwnRight.js | 0 .../node_modules => }/lodash/fp/fromPairs.js | 0 .../node_modules => }/lodash/fp/function.js | 0 .../node_modules => }/lodash/fp/functions.js | 0 .../lodash/fp/functionsIn.js | 0 .../node_modules => }/lodash/fp/get.js | 0 .../node_modules => }/lodash/fp/getOr.js | 0 .../node_modules => }/lodash/fp/groupBy.js | 0 .../node_modules => }/lodash/fp/gt.js | 0 .../node_modules => }/lodash/fp/gte.js | 0 .../node_modules => }/lodash/fp/has.js | 0 .../node_modules => }/lodash/fp/hasIn.js | 0 .../node_modules => }/lodash/fp/head.js | 0 .../node_modules => }/lodash/fp/identical.js | 0 .../node_modules => }/lodash/fp/identity.js | 0 .../node_modules => }/lodash/fp/inRange.js | 0 .../node_modules => }/lodash/fp/includes.js | 0 .../lodash/fp/includesFrom.js | 0 .../node_modules => }/lodash/fp/indexBy.js | 0 .../node_modules => }/lodash/fp/indexOf.js | 0 .../lodash/fp/indexOfFrom.js | 0 .../node_modules => }/lodash/fp/init.js | 0 .../node_modules => }/lodash/fp/initial.js | 0 .../lodash/fp/intersection.js | 0 .../lodash/fp/intersectionBy.js | 0 .../lodash/fp/intersectionWith.js | 0 .../node_modules => }/lodash/fp/invert.js | 0 .../node_modules => }/lodash/fp/invertBy.js | 0 .../node_modules => }/lodash/fp/invertObj.js | 0 .../node_modules => }/lodash/fp/invoke.js | 0 .../node_modules => }/lodash/fp/invokeArgs.js | 0 .../lodash/fp/invokeArgsMap.js | 0 .../node_modules => }/lodash/fp/invokeMap.js | 0 .../lodash/fp/isArguments.js | 0 .../node_modules => }/lodash/fp/isArray.js | 0 .../lodash/fp/isArrayBuffer.js | 0 .../lodash/fp/isArrayLike.js | 0 .../lodash/fp/isArrayLikeObject.js | 0 .../node_modules => }/lodash/fp/isBoolean.js | 0 .../node_modules => }/lodash/fp/isBuffer.js | 0 .../node_modules => }/lodash/fp/isDate.js | 0 .../node_modules => }/lodash/fp/isElement.js | 0 .../node_modules => }/lodash/fp/isEmpty.js | 0 .../node_modules => }/lodash/fp/isEqual.js | 0 .../lodash/fp/isEqualWith.js | 0 .../node_modules => }/lodash/fp/isError.js | 0 .../node_modules => }/lodash/fp/isFinite.js | 0 .../node_modules => }/lodash/fp/isFunction.js | 0 .../node_modules => }/lodash/fp/isInteger.js | 0 .../node_modules => }/lodash/fp/isLength.js | 0 .../node_modules => }/lodash/fp/isMap.js | 0 .../node_modules => }/lodash/fp/isMatch.js | 0 .../lodash/fp/isMatchWith.js | 0 .../node_modules => }/lodash/fp/isNaN.js | 0 .../node_modules => }/lodash/fp/isNative.js | 0 .../node_modules => }/lodash/fp/isNil.js | 0 .../node_modules => }/lodash/fp/isNull.js | 0 .../node_modules => }/lodash/fp/isNumber.js | 0 .../node_modules => }/lodash/fp/isObject.js | 0 .../lodash/fp/isObjectLike.js | 0 .../lodash/fp/isPlainObject.js | 0 .../node_modules => }/lodash/fp/isRegExp.js | 0 .../lodash/fp/isSafeInteger.js | 0 .../node_modules => }/lodash/fp/isSet.js | 0 .../node_modules => }/lodash/fp/isString.js | 0 .../node_modules => }/lodash/fp/isSymbol.js | 0 .../lodash/fp/isTypedArray.js | 0 .../lodash/fp/isUndefined.js | 0 .../node_modules => }/lodash/fp/isWeakMap.js | 0 .../node_modules => }/lodash/fp/isWeakSet.js | 0 .../node_modules => }/lodash/fp/iteratee.js | 0 .../node_modules => }/lodash/fp/join.js | 0 .../node_modules => }/lodash/fp/juxt.js | 0 .../node_modules => }/lodash/fp/kebabCase.js | 0 .../node_modules => }/lodash/fp/keyBy.js | 0 .../node_modules => }/lodash/fp/keys.js | 0 .../node_modules => }/lodash/fp/keysIn.js | 0 .../node_modules => }/lodash/fp/lang.js | 0 .../node_modules => }/lodash/fp/last.js | 0 .../lodash/fp/lastIndexOf.js | 0 .../lodash/fp/lastIndexOfFrom.js | 0 .../node_modules => }/lodash/fp/lowerCase.js | 0 .../node_modules => }/lodash/fp/lowerFirst.js | 0 .../node_modules => }/lodash/fp/lt.js | 0 .../node_modules => }/lodash/fp/lte.js | 0 .../node_modules => }/lodash/fp/map.js | 0 .../node_modules => }/lodash/fp/mapKeys.js | 0 .../node_modules => }/lodash/fp/mapValues.js | 0 .../node_modules => }/lodash/fp/matches.js | 0 .../lodash/fp/matchesProperty.js | 0 .../node_modules => }/lodash/fp/math.js | 0 .../node_modules => }/lodash/fp/max.js | 0 .../node_modules => }/lodash/fp/maxBy.js | 0 .../node_modules => }/lodash/fp/mean.js | 0 .../node_modules => }/lodash/fp/meanBy.js | 0 .../node_modules => }/lodash/fp/memoize.js | 0 .../node_modules => }/lodash/fp/merge.js | 0 .../node_modules => }/lodash/fp/mergeAll.js | 0 .../lodash/fp/mergeAllWith.js | 0 .../node_modules => }/lodash/fp/mergeWith.js | 0 .../node_modules => }/lodash/fp/method.js | 0 .../node_modules => }/lodash/fp/methodOf.js | 0 .../node_modules => }/lodash/fp/min.js | 0 .../node_modules => }/lodash/fp/minBy.js | 0 .../node_modules => }/lodash/fp/mixin.js | 0 .../node_modules => }/lodash/fp/multiply.js | 0 .../node_modules => }/lodash/fp/nAry.js | 0 .../node_modules => }/lodash/fp/negate.js | 0 .../node_modules => }/lodash/fp/next.js | 0 .../node_modules => }/lodash/fp/noop.js | 0 .../node_modules => }/lodash/fp/now.js | 0 .../node_modules => }/lodash/fp/nth.js | 0 .../node_modules => }/lodash/fp/nthArg.js | 0 .../node_modules => }/lodash/fp/number.js | 0 .../node_modules => }/lodash/fp/object.js | 0 .../node_modules => }/lodash/fp/omit.js | 0 .../node_modules => }/lodash/fp/omitAll.js | 0 .../node_modules => }/lodash/fp/omitBy.js | 0 .../node_modules => }/lodash/fp/once.js | 0 .../node_modules => }/lodash/fp/orderBy.js | 0 .../node_modules => }/lodash/fp/over.js | 0 .../node_modules => }/lodash/fp/overArgs.js | 0 .../node_modules => }/lodash/fp/overEvery.js | 0 .../node_modules => }/lodash/fp/overSome.js | 0 .../node_modules => }/lodash/fp/pad.js | 0 .../node_modules => }/lodash/fp/padChars.js | 0 .../lodash/fp/padCharsEnd.js | 0 .../lodash/fp/padCharsStart.js | 0 .../node_modules => }/lodash/fp/padEnd.js | 0 .../node_modules => }/lodash/fp/padStart.js | 0 .../node_modules => }/lodash/fp/parseInt.js | 0 .../node_modules => }/lodash/fp/partial.js | 0 .../lodash/fp/partialRight.js | 0 .../node_modules => }/lodash/fp/partition.js | 0 .../node_modules => }/lodash/fp/path.js | 0 .../node_modules => }/lodash/fp/pathEq.js | 0 .../node_modules => }/lodash/fp/pathOr.js | 0 .../node_modules => }/lodash/fp/paths.js | 0 .../node_modules => }/lodash/fp/pick.js | 0 .../node_modules => }/lodash/fp/pickAll.js | 0 .../node_modules => }/lodash/fp/pickBy.js | 0 .../node_modules => }/lodash/fp/pipe.js | 0 .../lodash/fp/placeholder.js | 0 .../node_modules => }/lodash/fp/plant.js | 0 .../node_modules => }/lodash/fp/pluck.js | 0 .../node_modules => }/lodash/fp/prop.js | 0 .../node_modules => }/lodash/fp/propEq.js | 0 .../node_modules => }/lodash/fp/propOr.js | 0 .../node_modules => }/lodash/fp/property.js | 0 .../node_modules => }/lodash/fp/propertyOf.js | 0 .../node_modules => }/lodash/fp/props.js | 0 .../node_modules => }/lodash/fp/pull.js | 0 .../node_modules => }/lodash/fp/pullAll.js | 0 .../node_modules => }/lodash/fp/pullAllBy.js | 0 .../lodash/fp/pullAllWith.js | 0 .../node_modules => }/lodash/fp/pullAt.js | 0 .../node_modules => }/lodash/fp/random.js | 0 .../node_modules => }/lodash/fp/range.js | 0 .../node_modules => }/lodash/fp/rangeRight.js | 0 .../node_modules => }/lodash/fp/rangeStep.js | 0 .../lodash/fp/rangeStepRight.js | 0 .../node_modules => }/lodash/fp/rearg.js | 0 .../node_modules => }/lodash/fp/reduce.js | 0 .../lodash/fp/reduceRight.js | 0 .../node_modules => }/lodash/fp/reject.js | 0 .../node_modules => }/lodash/fp/remove.js | 0 .../node_modules => }/lodash/fp/repeat.js | 0 .../node_modules => }/lodash/fp/replace.js | 0 .../node_modules => }/lodash/fp/rest.js | 0 .../node_modules => }/lodash/fp/restFrom.js | 0 .../node_modules => }/lodash/fp/result.js | 0 .../node_modules => }/lodash/fp/reverse.js | 0 .../node_modules => }/lodash/fp/round.js | 0 .../node_modules => }/lodash/fp/sample.js | 0 .../node_modules => }/lodash/fp/sampleSize.js | 0 .../node_modules => }/lodash/fp/seq.js | 0 .../node_modules => }/lodash/fp/set.js | 0 .../node_modules => }/lodash/fp/setWith.js | 0 .../node_modules => }/lodash/fp/shuffle.js | 0 .../node_modules => }/lodash/fp/size.js | 0 .../node_modules => }/lodash/fp/slice.js | 0 .../node_modules => }/lodash/fp/snakeCase.js | 0 .../node_modules => }/lodash/fp/some.js | 0 .../node_modules => }/lodash/fp/sortBy.js | 0 .../lodash/fp/sortedIndex.js | 0 .../lodash/fp/sortedIndexBy.js | 0 .../lodash/fp/sortedIndexOf.js | 0 .../lodash/fp/sortedLastIndex.js | 0 .../lodash/fp/sortedLastIndexBy.js | 0 .../lodash/fp/sortedLastIndexOf.js | 0 .../node_modules => }/lodash/fp/sortedUniq.js | 0 .../lodash/fp/sortedUniqBy.js | 0 .../node_modules => }/lodash/fp/split.js | 0 .../node_modules => }/lodash/fp/spread.js | 0 .../node_modules => }/lodash/fp/spreadFrom.js | 0 .../node_modules => }/lodash/fp/startCase.js | 0 .../node_modules => }/lodash/fp/startsWith.js | 0 .../node_modules => }/lodash/fp/string.js | 0 .../node_modules => }/lodash/fp/stubArray.js | 0 .../node_modules => }/lodash/fp/stubFalse.js | 0 .../node_modules => }/lodash/fp/stubObject.js | 0 .../node_modules => }/lodash/fp/stubString.js | 0 .../node_modules => }/lodash/fp/stubTrue.js | 0 .../node_modules => }/lodash/fp/subtract.js | 0 .../node_modules => }/lodash/fp/sum.js | 0 .../node_modules => }/lodash/fp/sumBy.js | 0 .../lodash/fp/symmetricDifference.js | 0 .../lodash/fp/symmetricDifferenceBy.js | 0 .../lodash/fp/symmetricDifferenceWith.js | 0 .../node_modules => }/lodash/fp/tail.js | 0 .../node_modules => }/lodash/fp/take.js | 0 .../node_modules => }/lodash/fp/takeLast.js | 0 .../lodash/fp/takeLastWhile.js | 0 .../node_modules => }/lodash/fp/takeRight.js | 0 .../lodash/fp/takeRightWhile.js | 0 .../node_modules => }/lodash/fp/takeWhile.js | 0 .../node_modules => }/lodash/fp/tap.js | 0 .../node_modules => }/lodash/fp/template.js | 0 .../lodash/fp/templateSettings.js | 0 .../node_modules => }/lodash/fp/throttle.js | 0 .../node_modules => }/lodash/fp/thru.js | 0 .../node_modules => }/lodash/fp/times.js | 0 .../node_modules => }/lodash/fp/toArray.js | 0 .../node_modules => }/lodash/fp/toFinite.js | 0 .../node_modules => }/lodash/fp/toInteger.js | 0 .../node_modules => }/lodash/fp/toIterator.js | 0 .../node_modules => }/lodash/fp/toJSON.js | 0 .../node_modules => }/lodash/fp/toLength.js | 0 .../node_modules => }/lodash/fp/toLower.js | 0 .../node_modules => }/lodash/fp/toNumber.js | 0 .../node_modules => }/lodash/fp/toPairs.js | 0 .../node_modules => }/lodash/fp/toPairsIn.js | 0 .../node_modules => }/lodash/fp/toPath.js | 0 .../lodash/fp/toPlainObject.js | 0 .../lodash/fp/toSafeInteger.js | 0 .../node_modules => }/lodash/fp/toString.js | 0 .../node_modules => }/lodash/fp/toUpper.js | 0 .../node_modules => }/lodash/fp/transform.js | 0 .../node_modules => }/lodash/fp/trim.js | 0 .../node_modules => }/lodash/fp/trimChars.js | 0 .../lodash/fp/trimCharsEnd.js | 0 .../lodash/fp/trimCharsStart.js | 0 .../node_modules => }/lodash/fp/trimEnd.js | 0 .../node_modules => }/lodash/fp/trimStart.js | 0 .../node_modules => }/lodash/fp/truncate.js | 0 .../node_modules => }/lodash/fp/unapply.js | 0 .../node_modules => }/lodash/fp/unary.js | 0 .../node_modules => }/lodash/fp/unescape.js | 0 .../node_modules => }/lodash/fp/union.js | 0 .../node_modules => }/lodash/fp/unionBy.js | 0 .../node_modules => }/lodash/fp/unionWith.js | 0 .../node_modules => }/lodash/fp/uniq.js | 0 .../node_modules => }/lodash/fp/uniqBy.js | 0 .../node_modules => }/lodash/fp/uniqWith.js | 0 .../node_modules => }/lodash/fp/uniqueId.js | 0 .../node_modules => }/lodash/fp/unnest.js | 0 .../node_modules => }/lodash/fp/unset.js | 0 .../node_modules => }/lodash/fp/unzip.js | 0 .../node_modules => }/lodash/fp/unzipWith.js | 0 .../node_modules => }/lodash/fp/update.js | 0 .../node_modules => }/lodash/fp/updateWith.js | 0 .../node_modules => }/lodash/fp/upperCase.js | 0 .../node_modules => }/lodash/fp/upperFirst.js | 0 .../node_modules => }/lodash/fp/useWith.js | 0 .../node_modules => }/lodash/fp/util.js | 0 .../node_modules => }/lodash/fp/value.js | 0 .../node_modules => }/lodash/fp/valueOf.js | 0 .../node_modules => }/lodash/fp/values.js | 0 .../node_modules => }/lodash/fp/valuesIn.js | 0 .../node_modules => }/lodash/fp/where.js | 0 .../node_modules => }/lodash/fp/whereEq.js | 0 .../node_modules => }/lodash/fp/without.js | 0 .../node_modules => }/lodash/fp/words.js | 0 .../node_modules => }/lodash/fp/wrap.js | 0 .../node_modules => }/lodash/fp/wrapperAt.js | 0 .../lodash/fp/wrapperChain.js | 0 .../lodash/fp/wrapperLodash.js | 0 .../lodash/fp/wrapperReverse.js | 0 .../lodash/fp/wrapperValue.js | 0 .../node_modules => }/lodash/fp/xor.js | 0 .../node_modules => }/lodash/fp/xorBy.js | 0 .../node_modules => }/lodash/fp/xorWith.js | 0 .../node_modules => }/lodash/fp/zip.js | 0 .../node_modules => }/lodash/fp/zipAll.js | 0 .../node_modules => }/lodash/fp/zipObj.js | 0 .../node_modules => }/lodash/fp/zipObject.js | 0 .../lodash/fp/zipObjectDeep.js | 0 .../node_modules => }/lodash/fp/zipWith.js | 0 node_modules/lodash/fromPairs.js | 28 + .../node_modules => }/lodash/function.js | 0 .../node_modules => }/lodash/functions.js | 0 .../node_modules => }/lodash/functionsIn.js | 0 .../node_modules => }/lodash/get.js | 0 node_modules/lodash/groupBy.js | 41 + .../node_modules => }/lodash/gt.js | 0 .../node_modules => }/lodash/gte.js | 0 .../node_modules => }/lodash/has.js | 0 .../node_modules => }/lodash/hasIn.js | 0 .../node_modules => }/lodash/head.js | 0 .../node_modules => }/lodash/identity.js | 0 .../node_modules => }/lodash/inRange.js | 0 .../node_modules => }/lodash/includes.js | 0 .../node_modules => }/lodash/index.js | 0 node_modules/lodash/indexOf.js | 42 + node_modules/lodash/initial.js | 22 + .../node_modules => }/lodash/intersection.js | 0 .../lodash/intersectionBy.js | 0 node_modules/lodash/intersectionWith.js | 41 + .../node_modules => }/lodash/invert.js | 0 .../node_modules => }/lodash/invertBy.js | 0 .../node_modules => }/lodash/invoke.js | 0 .../node_modules => }/lodash/invokeMap.js | 0 .../node_modules => }/lodash/isArguments.js | 0 .../node_modules => }/lodash/isArray.js | 0 .../node_modules => }/lodash/isArrayBuffer.js | 0 .../node_modules => }/lodash/isArrayLike.js | 0 .../lodash/isArrayLikeObject.js | 0 node_modules/lodash/isBoolean.js | 29 + .../node_modules => }/lodash/isBuffer.js | 0 .../node_modules => }/lodash/isDate.js | 0 node_modules/lodash/isElement.js | 25 + node_modules/lodash/isEmpty.js | 77 + .../node_modules => }/lodash/isEqual.js | 0 .../node_modules => }/lodash/isEqualWith.js | 0 node_modules/lodash/isError.js | 36 + .../node_modules => }/lodash/isFinite.js | 0 node_modules/lodash/isFunction.js | 37 + .../node_modules => }/lodash/isInteger.js | 0 .../node_modules => }/lodash/isLength.js | 0 .../node_modules => }/lodash/isMap.js | 0 .../node_modules => }/lodash/isMatch.js | 0 .../node_modules => }/lodash/isMatchWith.js | 0 .../node_modules => }/lodash/isNaN.js | 0 .../node_modules => }/lodash/isNative.js | 0 .../node_modules => }/lodash/isNil.js | 0 .../node_modules => }/lodash/isNull.js | 0 node_modules/lodash/isNumber.js | 38 + .../node_modules => }/lodash/isObject.js | 0 .../node_modules => }/lodash/isObjectLike.js | 0 node_modules/lodash/isPlainObject.js | 62 + .../node_modules => }/lodash/isRegExp.js | 0 .../node_modules => }/lodash/isSafeInteger.js | 0 .../node_modules => }/lodash/isSet.js | 0 node_modules/lodash/isString.js | 30 + node_modules/lodash/isSymbol.js | 29 + .../node_modules => }/lodash/isTypedArray.js | 0 .../node_modules => }/lodash/isUndefined.js | 0 .../node_modules => }/lodash/isWeakMap.js | 0 node_modules/lodash/isWeakSet.js | 28 + .../node_modules => }/lodash/iteratee.js | 0 node_modules/lodash/join.js | 26 + .../node_modules => }/lodash/kebabCase.js | 0 node_modules/lodash/keyBy.js | 36 + .../node_modules => }/lodash/keys.js | 0 .../node_modules => }/lodash/keysIn.js | 0 .../node_modules => }/lodash/lang.js | 0 node_modules/lodash/last.js | 20 + node_modules/lodash/lastIndexOf.js | 46 + node_modules/lodash/lodash.js | 17018 ++++++++++++++++ node_modules/lodash/lodash.min.js | 135 + .../node_modules => }/lodash/lowerCase.js | 0 .../node_modules => }/lodash/lowerFirst.js | 0 .../node_modules => }/lodash/lt.js | 0 .../node_modules => }/lodash/lte.js | 0 .../node_modules => }/lodash/map.js | 0 .../node_modules => }/lodash/mapKeys.js | 0 .../node_modules => }/lodash/mapValues.js | 0 .../node_modules => }/lodash/matches.js | 0 .../lodash/matchesProperty.js | 0 .../node_modules => }/lodash/math.js | 0 .../node_modules => }/lodash/max.js | 0 .../node_modules => }/lodash/maxBy.js | 0 .../node_modules => }/lodash/mean.js | 0 .../node_modules => }/lodash/meanBy.js | 0 node_modules/lodash/memoize.js | 73 + .../node_modules => }/lodash/merge.js | 0 .../node_modules => }/lodash/mergeWith.js | 0 .../node_modules => }/lodash/method.js | 0 .../node_modules => }/lodash/methodOf.js | 0 .../node_modules => }/lodash/min.js | 0 .../node_modules => }/lodash/minBy.js | 0 .../node_modules => }/lodash/mixin.js | 0 .../node_modules => }/lodash/multiply.js | 0 .../node_modules => }/lodash/negate.js | 0 .../node_modules => }/lodash/next.js | 0 .../node_modules => }/lodash/noop.js | 0 .../node_modules => }/lodash/now.js | 0 .../node_modules => }/lodash/nth.js | 0 .../node_modules => }/lodash/nthArg.js | 0 .../node_modules => }/lodash/number.js | 0 .../node_modules => }/lodash/object.js | 0 .../node_modules => }/lodash/omit.js | 0 .../node_modules => }/lodash/omitBy.js | 0 .../node_modules => }/lodash/once.js | 0 .../node_modules => }/lodash/orderBy.js | 0 .../node_modules => }/lodash/over.js | 0 .../node_modules => }/lodash/overArgs.js | 0 .../node_modules => }/lodash/overEvery.js | 0 .../node_modules => }/lodash/overSome.js | 0 node_modules/lodash/package.json | 144 +- .../node_modules => }/lodash/pad.js | 0 .../node_modules => }/lodash/padEnd.js | 0 .../node_modules => }/lodash/padStart.js | 0 .../node_modules => }/lodash/parseInt.js | 0 .../node_modules => }/lodash/partial.js | 0 .../node_modules => }/lodash/partialRight.js | 0 .../node_modules => }/lodash/partition.js | 0 .../node_modules => }/lodash/pick.js | 0 .../node_modules => }/lodash/pickBy.js | 0 .../node_modules => }/lodash/plant.js | 0 .../node_modules => }/lodash/property.js | 0 .../node_modules => }/lodash/propertyOf.js | 0 .../node_modules => }/lodash/pull.js | 0 .../node_modules => }/lodash/pullAll.js | 0 node_modules/lodash/pullAllBy.js | 33 + .../node_modules => }/lodash/pullAllWith.js | 0 node_modules/lodash/pullAt.js | 43 + .../node_modules => }/lodash/random.js | 0 .../node_modules => }/lodash/range.js | 0 .../node_modules => }/lodash/rangeRight.js | 0 .../node_modules => }/lodash/rearg.js | 0 .../node_modules => }/lodash/reduce.js | 0 .../node_modules => }/lodash/reduceRight.js | 0 .../node_modules => }/lodash/reject.js | 0 node_modules/lodash/remove.js | 53 + .../node_modules => }/lodash/repeat.js | 0 .../node_modules => }/lodash/replace.js | 0 .../node_modules => }/lodash/rest.js | 0 .../node_modules => }/lodash/result.js | 0 node_modules/lodash/reverse.js | 34 + .../node_modules => }/lodash/round.js | 0 .../node_modules => }/lodash/sample.js | 0 .../node_modules => }/lodash/sampleSize.js | 0 .../node_modules => }/lodash/seq.js | 0 .../node_modules => }/lodash/set.js | 0 .../node_modules => }/lodash/setWith.js | 0 .../node_modules => }/lodash/shuffle.js | 0 .../node_modules => }/lodash/size.js | 0 node_modules/lodash/slice.js | 37 + .../node_modules => }/lodash/snakeCase.js | 0 .../node_modules => }/lodash/some.js | 0 .../node_modules => }/lodash/sortBy.js | 0 .../node_modules => }/lodash/sortedIndex.js | 0 node_modules/lodash/sortedIndexBy.js | 33 + node_modules/lodash/sortedIndexOf.js | 31 + .../lodash/sortedLastIndex.js | 0 node_modules/lodash/sortedLastIndexBy.js | 33 + node_modules/lodash/sortedLastIndexOf.js | 31 + .../node_modules => }/lodash/sortedUniq.js | 0 .../node_modules => }/lodash/sortedUniqBy.js | 0 .../node_modules => }/lodash/split.js | 0 .../node_modules => }/lodash/spread.js | 0 .../node_modules => }/lodash/startCase.js | 0 .../node_modules => }/lodash/startsWith.js | 0 .../node_modules => }/lodash/string.js | 0 .../node_modules => }/lodash/stubArray.js | 0 .../node_modules => }/lodash/stubFalse.js | 0 .../node_modules => }/lodash/stubObject.js | 0 .../node_modules => }/lodash/stubString.js | 0 .../node_modules => }/lodash/stubTrue.js | 0 .../node_modules => }/lodash/subtract.js | 0 .../node_modules => }/lodash/sum.js | 0 .../node_modules => }/lodash/sumBy.js | 0 node_modules/lodash/tail.js | 22 + .../node_modules => }/lodash/take.js | 0 node_modules/lodash/takeRight.js | 39 + node_modules/lodash/takeRightWhile.js | 45 + node_modules/lodash/takeWhile.js | 45 + .../node_modules => }/lodash/tap.js | 0 .../node_modules => }/lodash/template.js | 0 .../lodash/templateSettings.js | 0 .../node_modules => }/lodash/throttle.js | 0 .../node_modules => }/lodash/thru.js | 0 node_modules/lodash/times.js | 51 + node_modules/lodash/toArray.js | 58 + .../node_modules => }/lodash/toFinite.js | 0 .../node_modules => }/lodash/toInteger.js | 0 .../node_modules => }/lodash/toIterator.js | 0 .../node_modules => }/lodash/toJSON.js | 0 .../node_modules => }/lodash/toLength.js | 0 .../node_modules => }/lodash/toLower.js | 0 .../node_modules => }/lodash/toNumber.js | 0 .../node_modules => }/lodash/toPairs.js | 0 .../node_modules => }/lodash/toPairsIn.js | 0 .../node_modules => }/lodash/toPath.js | 0 .../node_modules => }/lodash/toPlainObject.js | 0 .../node_modules => }/lodash/toSafeInteger.js | 0 .../node_modules => }/lodash/toString.js | 0 .../node_modules => }/lodash/toUpper.js | 0 .../node_modules => }/lodash/transform.js | 0 .../node_modules => }/lodash/trim.js | 0 .../node_modules => }/lodash/trimEnd.js | 0 .../node_modules => }/lodash/trimStart.js | 0 .../node_modules => }/lodash/truncate.js | 0 .../node_modules => }/lodash/unary.js | 0 .../node_modules => }/lodash/unescape.js | 0 .../node_modules => }/lodash/union.js | 0 node_modules/lodash/unionBy.js | 39 + node_modules/lodash/unionWith.js | 34 + node_modules/lodash/uniq.js | 25 + node_modules/lodash/uniqBy.js | 31 + node_modules/lodash/uniqWith.js | 28 + .../node_modules => }/lodash/uniqueId.js | 0 .../node_modules => }/lodash/unset.js | 0 .../node_modules => }/lodash/unzip.js | 0 .../node_modules => }/lodash/unzipWith.js | 0 .../node_modules => }/lodash/update.js | 0 .../node_modules => }/lodash/updateWith.js | 0 .../node_modules => }/lodash/upperCase.js | 0 .../node_modules => }/lodash/upperFirst.js | 0 .../node_modules => }/lodash/util.js | 0 .../node_modules => }/lodash/value.js | 0 .../node_modules => }/lodash/valueOf.js | 0 node_modules/lodash/values.js | 34 + .../node_modules => }/lodash/valuesIn.js | 0 .../node_modules => }/lodash/without.js | 0 .../node_modules => }/lodash/words.js | 0 node_modules/lodash/wrap.js | 30 + .../node_modules => }/lodash/wrapperAt.js | 0 .../node_modules => }/lodash/wrapperChain.js | 0 .../node_modules => }/lodash/wrapperLodash.js | 0 .../lodash/wrapperReverse.js | 0 .../node_modules => }/lodash/wrapperValue.js | 0 .../node_modules => }/lodash/xor.js | 0 node_modules/lodash/xorBy.js | 39 + node_modules/lodash/xorWith.js | 34 + .../node_modules => }/lodash/zip.js | 0 .../node_modules => }/lodash/zipObject.js | 0 .../node_modules => }/lodash/zipObjectDeep.js | 0 node_modules/lodash/zipWith.js | 32 + node_modules/loose-envify/LICENSE | 21 + node_modules/loose-envify/cli.js | 1 + node_modules/loose-envify/custom.js | 2 + node_modules/loose-envify/index.js | 2 + .../node_modules/js-tokens/LICENSE | 21 - .../node_modules/js-tokens/changelog.md | 71 - .../node_modules/js-tokens/index.js | 19 - .../node_modules/js-tokens/package.json | 100 - .../node_modules/js-tokens/readme.md | 217 - node_modules/loose-envify/package.json | 97 +- node_modules/loud-rejection/package.json | 119 +- node_modules/lru-cache/package.json | 92 +- node_modules/map-cache/package.json | 103 +- node_modules/map-obj/package.json | 87 +- node_modules/map-stream/package.json | 91 +- node_modules/meow/package.json | 113 +- .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../node_modules/isarray/Makefile | 6 - .../node_modules/isarray/README.md | 60 - .../node_modules/isarray/component.json | 19 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../merge-stream/node_modules/isarray/test.js | 20 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../doc/wg-meetings/2015-01-30.md | 60 - .../node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - node_modules/merge-stream/package.json | 103 +- node_modules/micromatch/package.json | 113 +- node_modules/minimatch/package.json | 105 +- node_modules/minimist/package.json | 107 +- .../mkdirp/node_modules/minimist/package.json | 135 +- node_modules/mkdirp/package.json | 97 +- node_modules/mocha/node_modules/.bin/jade | 1 + node_modules/mocha/node_modules/.bin/mkdirp | 1 + .../mocha/node_modules/.bin/supports-color | 2 +- .../escape-string-regexp/index.js | 11 - .../escape-string-regexp/package.json | 103 - .../escape-string-regexp/readme.md | 27 - .../mocha/node_modules/glob/package.json | 89 +- .../mocha/node_modules/minimatch/package.json | 89 +- .../node_modules/supports-color/index.js | 39 - .../node_modules/supports-color/package.json | 119 - .../node_modules/supports-color/readme.md | 44 - node_modules/mocha/package.json | 1582 +- node_modules/ms/package.json | 86 +- node_modules/multipipe/package.json | 77 +- node_modules/natives/package.json | 99 +- .../nomnom/node_modules/.bin/strip-ansi | 1 - .../node_modules/ansi-styles/package.json | 93 +- .../chalk/node_modules/.bin/strip-ansi | 1 + .../nomnom/node_modules/chalk/package.json | 91 +- .../node_modules/strip-ansi/package.json | 88 +- node_modules/nomnom/package.json | 93 +- .../node_modules}/.bin/semver | 0 .../node_modules/semver/LICENSE | 15 + .../node_modules/semver/README.md | 350 + .../node_modules/semver/bin/semver | 133 + .../node_modules/semver/package.json | 22 + .../node_modules/semver/range.bnf | 16 + .../node_modules/semver/semver.js | 1203 ++ .../normalize-package-data/package.json | 118 +- node_modules/normalize-path/package.json | 105 +- node_modules/number-is-nan/package.json | 90 +- node_modules/object-assign/package.json | 107 +- node_modules/object-keys/package.json | 152 +- node_modules/object.omit/LICENSE | 2 +- node_modules/object.omit/README.md | 56 +- node_modules/object.omit/index.js | 4 +- node_modules/object.omit/package.json | 140 +- node_modules/once/package.json | 98 +- node_modules/options/.npmignore | 7 + node_modules/options/Makefile | 12 + node_modules/options/README.md | 69 + node_modules/options/lib/options.js | 86 + node_modules/options/package.json | 21 + node_modules/orchestrator/package.json | 102 +- node_modules/ordered-read-streams/index.js | 34 +- .../ordered-read-streams/package.json | 100 +- node_modules/os-homedir/package.json | 96 +- node_modules/os-tmpdir/package.json | 92 +- node_modules/osenv/package.json | 98 +- node_modules/parse-filepath/package.json | 106 +- node_modules/parse-glob/package.json | 100 +- node_modules/parse-json/package.json | 89 +- node_modules/path-dirname/index.js | 143 + node_modules/path-dirname/license | 22 + node_modules/path-dirname/package.json | 29 + node_modules/path-dirname/readme.md | 53 + node_modules/path-exists/package.json | 91 +- node_modules/path-is-absolute/package.json | 91 +- node_modules/path-is-inside/package.json | 112 +- node_modules/path-root-regex/package.json | 103 +- node_modules/path-root/package.json | 108 +- node_modules/path-type/package.json | 93 +- node_modules/pify/package.json | 97 +- node_modules/pinkie-promise/package.json | 98 +- node_modules/pinkie/package.json | 106 +- node_modules/plur/package.json | 91 +- node_modules/po2json/.gitignore | 2 + node_modules/po2json/lib/parse.js | 2 + node_modules/po2json/package.json | 114 +- .../po2json/test/fixtures/ja-jed1.x.json | 1 + node_modules/po2json/test/fixtures/ja.json | 3 +- node_modules/po2json/test/fixtures/ja.po | 5 + node_modules/po2json/test/po2json_test.js | 14 + node_modules/preserve/package.json | 98 +- node_modules/pretty-hrtime/package.json | 120 +- .../process-nextick-args/package.json | 106 +- node_modules/promise/package.json | 116 +- node_modules/randomatic/package.json | 92 +- node_modules/read-pkg-up/package.json | 93 +- node_modules/read-pkg/package.json | 95 +- node_modules/readable-stream/.npmignore | 5 +- .../readable-stream/.travis.yml | 0 node_modules/readable-stream/README.md | 35 +- .../readable-stream/doc/stream.md | 0 .../doc/wg-meetings/2015-01-30.md | 0 .../readable-stream/lib/_stream_duplex.js | 74 +- .../lib/_stream_passthrough.js | 30 +- .../readable-stream/lib/_stream_readable.js | 678 +- .../readable-stream/lib/_stream_transform.js | 91 +- .../readable-stream/lib/_stream_writable.js | 367 +- .../lib/internal/streams/BufferList.js | 0 node_modules/readable-stream/package.json | 129 +- node_modules/readable-stream/readable.js | 12 +- node_modules/rechoir/package.json | 104 +- .../redent/node_modules/.bin/strip-indent | 1 + node_modules/redent/package.json | 93 +- node_modules/regenerator-runtime/package.json | 75 +- node_modules/regex-cache/package.json | 108 +- .../remove-trailing-separator/package.json | 109 +- node_modules/repeat-element/package.json | 102 +- node_modules/repeat-string/README.md | 110 +- node_modules/repeat-string/index.js | 12 +- node_modules/repeat-string/package.json | 138 +- node_modules/repeating/package.json | 95 +- node_modules/replace-ext/LICENSE | 35 +- node_modules/replace-ext/README.md | 62 +- node_modules/replace-ext/index.js | 19 +- node_modules/replace-ext/package.json | 125 +- node_modules/resolve-dir/package.json | 112 +- node_modules/resolve/package.json | 94 +- node_modules/rimraf/package.json | 102 +- node_modules/sax/AUTHORS | 10 + node_modules/sax/LICENSE | 57 + node_modules/sax/LICENSE-W3C.html | 188 + node_modules/sax/README.md | 216 + node_modules/sax/examples/big-not-pretty.xml | 8002 ++++++++ node_modules/sax/examples/example.js | 29 + node_modules/sax/examples/get-products.js | 58 + node_modules/sax/examples/hello-world.js | 4 + node_modules/sax/examples/not-pretty.xml | 8 + node_modules/sax/examples/pretty-print.js | 74 + node_modules/sax/examples/shopping.xml | 2 + node_modules/sax/examples/strict.dtd | 870 + node_modules/sax/examples/test.html | 15 + node_modules/sax/examples/test.xml | 1254 ++ node_modules/sax/lib/sax.js | 1410 ++ node_modules/sax/package.json | 12 + node_modules/sax/test/attribute-name.js | 33 + node_modules/sax/test/attribute-no-space.js | 75 + node_modules/sax/test/buffer-overrun.js | 26 + node_modules/sax/test/case.js | 50 + node_modules/sax/test/cdata-chunked.js | 11 + node_modules/sax/test/cdata-end-split.js | 15 + node_modules/sax/test/cdata-fake-end.js | 28 + node_modules/sax/test/cdata-multiple.js | 15 + node_modules/sax/test/cdata.js | 10 + node_modules/sax/test/cyrillic.js | 8 + node_modules/sax/test/duplicate-attribute.js | 13 + node_modules/sax/test/emoji.js | 12 + node_modules/sax/test/end_empty_stream.js | 5 + node_modules/sax/test/entities.js | 10 + node_modules/sax/test/entity-mega.js | 16 + node_modules/sax/test/flush.js | 13 + node_modules/sax/test/index.js | 86 + node_modules/sax/test/issue-23.js | 43 + node_modules/sax/test/issue-30.js | 24 + node_modules/sax/test/issue-35.js | 15 + node_modules/sax/test/issue-47.js | 12 + node_modules/sax/test/issue-49.js | 31 + node_modules/sax/test/issue-84.js | 13 + node_modules/sax/test/parser-position.js | 28 + node_modules/sax/test/script-close-better.js | 12 + node_modules/sax/test/script.js | 12 + .../sax/test/self-closing-child-strict.js | 44 + node_modules/sax/test/self-closing-child.js | 44 + node_modules/sax/test/self-closing-tag.js | 25 + node_modules/sax/test/stray-ending.js | 17 + .../sax/test/trailing-attribute-no-value.js | 10 + .../sax/test/trailing-non-whitespace.js | 18 + node_modules/sax/test/unclosed-root.js | 11 + node_modules/sax/test/unquoted.js | 18 + node_modules/sax/test/utf8-split.js | 32 + node_modules/sax/test/xmlns-as-tag-name.js | 15 + node_modules/sax/test/xmlns-issue-41.js | 68 + node_modules/sax/test/xmlns-rebinding.js | 63 + node_modules/sax/test/xmlns-strict.js | 74 + .../sax/test/xmlns-unbound-element.js | 33 + node_modules/sax/test/xmlns-unbound.js | 15 + node_modules/sax/test/xmlns-xml-default-ns.js | 31 + .../xmlns-xml-default-prefix-attribute.js | 36 + .../sax/test/xmlns-xml-default-prefix.js | 21 + .../sax/test/xmlns-xml-default-redefine.js | 41 + node_modules/selenium-webdriver/.npmignore | 2 + node_modules/selenium-webdriver/CHANGES.md | 660 + node_modules/selenium-webdriver/LICENSE | 202 + node_modules/selenium-webdriver/NOTICE | 2 + node_modules/selenium-webdriver/README.md | 239 + node_modules/selenium-webdriver/chrome.js | 749 + node_modules/selenium-webdriver/edge.js | 305 + .../example/chrome_android.js | 38 + .../example/chrome_mobile_emulation.js | 39 + .../example/google_search.js | 50 + .../example/google_search_generator.js | 45 + .../example/google_search_test.js | 47 + .../selenium-webdriver/example/logging.js | 43 + .../example/parallel_flows.js | 51 + .../selenium-webdriver/firefox/binary.js | 270 + .../selenium-webdriver/firefox/extension.js | 187 + .../selenium-webdriver/firefox/index.js | 679 + .../selenium-webdriver/firefox/profile.js | 409 + node_modules/selenium-webdriver/http/index.js | 255 + node_modules/selenium-webdriver/http/util.js | 139 + node_modules/selenium-webdriver/ie.js | 445 + node_modules/selenium-webdriver/index.js | 622 + node_modules/selenium-webdriver/io/exec.js | 153 + node_modules/selenium-webdriver/io/index.js | 300 + node_modules/selenium-webdriver/lib/README | 6 + .../selenium-webdriver/lib/actions.js | 596 + node_modules/selenium-webdriver/lib/by.js | 277 + .../selenium-webdriver/lib/capabilities.js | 450 + .../selenium-webdriver/lib/command.js | 243 + .../selenium-webdriver/lib/devmode.js | 34 + node_modules/selenium-webdriver/lib/error.js | 555 + node_modules/selenium-webdriver/lib/events.js | 210 + .../lib/firefox/amd64/libnoblur64.so | Bin 0 -> 41262 bytes .../lib/firefox/i386/libnoblur.so | Bin 0 -> 30887 bytes .../lib/firefox/webdriver.json | 69 + .../lib/firefox/webdriver.xpi | Bin 0 -> 706947 bytes node_modules/selenium-webdriver/lib/http.js | 456 + node_modules/selenium-webdriver/lib/input.js | 171 + .../selenium-webdriver/lib/logging.js | 670 + .../selenium-webdriver/lib/promise.js | 3039 +++ node_modules/selenium-webdriver/lib/proxy.js | 127 + .../selenium-webdriver/lib/safari/client.js | 56 + .../selenium-webdriver/lib/session.js | 80 + .../selenium-webdriver/lib/symbols.js | 38 + .../selenium-webdriver/lib/test/build.js | 153 + ...kTest_testClicksASurroundingStrongTag.html | 11 + .../lib/test/data/Page.aspx | 17 + .../lib/test/data/Page.aspx.cs | 22 + .../lib/test/data/Redirect.aspx | 11 + .../lib/test/data/Redirect.aspx.cs | 9 + .../lib/test/data/Settings.StyleCop | 759 + .../lib/test/data/Web.Config | 59 + .../lib/test/data/actualXhtmlPage.xhtml | 14 + .../lib/test/data/ajaxy_page.html | 81 + .../lib/test/data/alerts.html | 85 + .../lib/test/data/banner.gif | Bin 0 -> 2109 bytes .../lib/test/data/beach.jpg | Bin 0 -> 14085 bytes .../lib/test/data/blank.html | 1 + .../lib/test/data/bodyTypingTest.html | 41 + .../lib/test/data/booleanAttributes.html | 19 + .../lib/test/data/child/childPage.html | 8 + .../data/child/grandchild/grandchildPage.html | 8 + .../lib/test/data/clickEventPage.html | 26 + .../lib/test/data/click_frames.html | 10 + .../lib/test/data/click_jacker.html | 38 + .../lib/test/data/click_out_of_bounds.html | 23 + .../data/click_out_of_bounds_overflow.html | 85 + .../lib/test/data/click_rtl.html | 19 + .../lib/test/data/click_source.html | 18 + .../test/data/click_tests/click_iframe.html | 6 + .../data/click_tests/click_in_iframe.html | 8 + .../click_tests/disappearing_element.html | 62 + .../lib/test/data/click_tests/google_map.html | 15 + .../lib/test/data/click_tests/google_map.png | Bin 0 -> 26209 bytes .../click_tests/html5_submit_buttons.html | 16 + .../lib/test/data/click_tests/issue5237.html | 9 + .../data/click_tests/issue5237_frame.html | 1 + .../data/click_tests/issue5237_target.html | 10 + .../data/click_tests/link_that_wraps.html | 11 + .../test/data/click_tests/mapped_page1.html | 9 + .../test/data/click_tests/mapped_page2.html | 9 + .../test/data/click_tests/mapped_page3.html | 9 + .../click_tests/overlapping_elements.html | 70 + .../partially_overlapping_elements.html | 124 + .../data/click_tests/span_that_wraps.html | 11 + .../test/data/click_tests/submitted_page.html | 9 + .../wrapped_overlapping_elements.html | 13 + .../lib/test/data/click_too_big.html | 10 + .../lib/test/data/click_too_big_in_frame.html | 11 + .../lib/test/data/clicks.html | 35 + .../lib/test/data/closeable_window.html | 8 + .../lib/test/data/cn-test.html | 156 + .../lib/test/data/colorPage.html | 20 + .../lib/test/data/cookies.html | 30 + .../coordinates_tests/element_in_frame.html | 9 + .../element_in_nested_frame.html | 9 + .../page_with_element_out_of_view.html | 11 + .../page_with_empty_element.html | 10 + .../page_with_fixed_element.html | 12 + .../page_with_hidden_element.html | 10 + .../page_with_invisible_element.html | 10 + .../page_with_transparent_element.html | 10 + .../data/coordinates_tests/simple_page.html | 10 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui-lightness/jquery-ui-1.8.10.custom.css | 573 + .../lib/test/data/cssTransform.html | 61 + .../lib/test/data/cssTransform2.html | 20 + .../test/data/document_write_in_onload.html | 13 + .../data/dragAndDropInsideScrolledDiv.html | 67 + .../lib/test/data/dragAndDropTest.html | 102 + .../lib/test/data/dragDropOverflow.html | 104 + .../lib/test/data/draggableLists.html | 67 + .../lib/test/data/droppableItems.html | 65 + .../lib/test/data/dynamic.html | 39 + .../test/data/dynamicallyModifiedPage.html | 42 + .../lib/test/data/errors.html | 15 + .../lib/test/data/firefox/jetpack-sample.xpi | Bin 0 -> 7289 bytes .../lib/test/data/firefox/sample.xpi | Bin 0 -> 1551 bytes .../lib/test/data/fixedFooterNoScroll.html | 13 + .../data/fixedFooterNoScrollQuirksMode.html | 12 + .../lib/test/data/formPage.html | 174 + .../lib/test/data/formSelectionPage.html | 46 + .../test/data/form_handling_js_submit.html | 30 + .../lib/test/data/framePage3.html | 7 + .../lib/test/data/frameScrollChild.html | 26 + .../lib/test/data/frameScrollPage.html | 14 + .../lib/test/data/frameScrollParent.html | 11 + .../lib/test/data/frameWithAnimals.html | 11 + .../data/frame_switching_tests/bug4876.html | 9 + .../frame_switching_tests/bug4876_iframe.html | 9 + .../frame_switching_tests/deletingFrame.html | 29 + .../deletingFrame_iframe.html | 8 + .../deletingFrame_iframe2.html | 7 + .../lib/test/data/frameset.html | 14 + .../lib/test/data/framesetPage2.html | 7 + .../lib/test/data/framesetPage3.html | 4 + .../lib/test/data/globalscope.html | 15 + .../lib/test/data/hidden.html | 5 + .../lib/test/data/hidden_partially.html | 45 + .../lib/test/data/html5/blue.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/database.js | 84 + .../lib/test/data/html5/geolocation.js | 18 + .../lib/test/data/html5/green.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/red.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5/status.html | 1 + .../lib/test/data/html5/test.appcache | 11 + .../lib/test/data/html5/yellow.jpg | Bin 0 -> 92 bytes .../lib/test/data/html5Page.html | 32 + .../selenium-webdriver/lib/test/data/icon.gif | Bin 0 -> 127 bytes .../lib/test/data/idElements.html | 2 + .../lib/test/data/iframeAtBottom.html | 15 + .../lib/test/data/iframeWithAlert.html | 1 + .../lib/test/data/iframeWithIframe.html | 1 + .../lib/test/data/iframes.html | 11 + .../lib/test/data/injectableContent.html | 22 + .../lib/test/data/javascriptEnhancedForm.html | 30 + .../lib/test/data/javascriptPage.html | 285 + .../lib/test/data/jquery-1.3.2.js | 4376 ++++ .../lib/test/data/js/jquery-1.4.4.min.js | 167 + .../data/js/jquery-ui-1.8.10.custom.min.js | 782 + .../js/skins/lightgray/content.inline.min.css | 1 + .../data/js/skins/lightgray/content.min.css | 1 + .../data/js/skins/lightgray/fonts/readme.md | 1 + .../lightgray/fonts/tinymce-small.dev.svg | 175 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 10316 bytes .../skins/lightgray/fonts/tinymce-small.svg | 62 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 10128 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 7848 bytes .../js/skins/lightgray/fonts/tinymce.dev.svg | 153 + .../data/js/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 10024 bytes .../data/js/skins/lightgray/fonts/tinymce.svg | 63 + .../data/js/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 9860 bytes .../js/skins/lightgray/fonts/tinymce.woff | Bin 0 -> 7664 bytes .../data/js/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../data/js/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../data/js/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../data/js/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../data/js/skins/lightgray/skin.ie7.min.css | 1 + .../test/data/js/skins/lightgray/skin.min.css | 1 + .../test/data/js/themes/modern/theme.min.js | 1 + .../lib/test/data/js/tinymce.min.js | 10 + .../data/key_tests/remove_on_keypress.html | 36 + .../lib/test/data/keyboard_shortcut.html | 36 + .../lib/test/data/linked_image.html | 16 + .../boolean_attribute_selected.html | 13 + .../boolean_attribute_selected_html4.html | 13 + .../lib/test/data/longContentPage.html | 55 + .../lib/test/data/macbeth.html | 5255 +++++ .../selenium-webdriver/lib/test/data/map.png | Bin 0 -> 26209 bytes .../lib/test/data/map_visibility.html | 8 + .../lib/test/data/markerTransparent.png | Bin 0 -> 260 bytes .../lib/test/data/messages.html | 15 + .../lib/test/data/meta-redirect.html | 11 + .../lib/test/data/missedJsReference.html | 11 + .../lib/test/data/modal_dialogs/modal_1.html | 21 + .../lib/test/data/modal_dialogs/modal_2.html | 21 + .../lib/test/data/modal_dialogs/modal_3.html | 15 + .../test/data/modal_dialogs/modalindex.html | 21 + .../lib/test/data/mouseOver.html | 17 + .../lib/test/data/mousePositionTracker.html | 33 + .../lib/test/data/nestedElements.html | 155 + .../lib/test/data/overflow-body.html | 15 + .../lib/test/data/overflow/x_auto_y_auto.html | 30 + .../test/data/overflow/x_auto_y_hidden.html | 30 + .../test/data/overflow/x_auto_y_scroll.html | 30 + .../test/data/overflow/x_hidden_y_auto.html | 30 + .../test/data/overflow/x_hidden_y_hidden.html | 30 + .../test/data/overflow/x_hidden_y_scroll.html | 30 + .../test/data/overflow/x_scroll_y_auto.html | 30 + .../test/data/overflow/x_scroll_y_hidden.html | 30 + .../test/data/overflow/x_scroll_y_scroll.html | 30 + .../data/pageWithOnBeforeUnloadMessage.html | 20 + .../lib/test/data/pageWithOnLoad.html | 6 + .../lib/test/data/pageWithOnUnload.html | 6 + .../page_with_link_to_slow_loading_page.html | 6 + .../lib/test/data/plain.txt | 1 + .../lib/test/data/proxy/page1.html | 20 + .../lib/test/data/proxy/page2.html | 24 + .../lib/test/data/proxy/page3.html | 5 + .../lib/test/data/readOnlyPage.html | 24 + .../lib/test/data/rectangles.html | 40 + .../lib/test/data/resultPage.html | 25 + .../lib/test/data/rich_text.html | 161 + .../test/data/safari/frames_benchmark.html | 31 + .../lib/test/data/screen/screen.css | 19 + .../lib/test/data/screen/screen.html | 72 + .../lib/test/data/screen/screen.js | 7 + .../lib/test/data/screen/screen_frame1.html | 72 + .../lib/test/data/screen/screen_frame2.html | 72 + .../lib/test/data/screen/screen_frames.html | 11 + .../lib/test/data/screen/screen_iframes.html | 12 + .../lib/test/data/screen/screen_too_long.html | 68 + .../lib/test/data/screen/screen_x_long.html | 72 + .../test/data/screen/screen_x_too_long.html | 72 + .../lib/test/data/screen/screen_y_long.html | 72 + .../test/data/screen/screen_y_too_long.html | 72 + .../lib/test/data/scroll.html | 27 + .../lib/test/data/scroll2.html | 21 + .../lib/test/data/scroll3.html | 8 + .../lib/test/data/scroll4.html | 7 + .../lib/test/data/scroll5.html | 18 + .../frame_with_height_above_200.html | 26 + .../frame_with_height_above_2000.html | 26 + .../frame_with_nested_scrolling_frame.html | 11 + ...th_nested_scrolling_frame_out_of_view.html | 12 + .../frame_with_small_height.html | 10 + .../page_with_double_overflow_auto.html | 19 + .../page_with_frame_out_of_view.html | 12 + .../page_with_nested_scrolling_frames.html | 11 + ...h_nested_scrolling_frames_out_of_view.html | 12 + .../page_with_non_scrolling_frame.html | 11 + .../page_with_scrolling_frame.html | 11 + ...page_with_scrolling_frame_out_of_view.html | 12 + .../scrolling_tests/page_with_tall_frame.html | 11 + .../page_with_y_overflow_auto.html | 14 + .../data/scrolling_tests/target_page.html | 9 + .../lib/test/data/selectPage.html | 58 + .../lib/test/data/selectableItems.html | 65 + .../lib/test/data/sessionCookie.html | 21 + .../lib/test/data/sessionCookieDest.html | 34 + .../lib/test/data/simple.xml | 5 + .../lib/test/data/simpleTest.html | 98 + .../lib/test/data/slowLoadingAlert.html | 10 + .../test/data/slowLoadingResourcePage.html | 12 + .../lib/test/data/slow_loading_iframes.html | 14 + .../lib/test/data/styledPage.html | 28 + .../lib/test/data/svgPiechart.xhtml | 81 + .../lib/test/data/svgTest.svg | 4 + .../lib/test/data/tables.html | 36 + .../lib/test/data/tinymce.html | 10 + .../lib/test/data/transformable.xml | 11 + .../lib/test/data/transformable.xsl | 37 + .../lib/test/data/transparentUpload.html | 70 + .../lib/test/data/underscore.html | 9 + .../lib/test/data/unicode_ltr.html | 8 + .../lib/test/data/upload.html | 45 + .../lib/test/data/userDefinedProperty.html | 8 + .../lib/test/data/veryLargeCanvas.html | 81 + .../lib/test/data/visibility-css.html | 21 + .../lib/test/data/win32frameset.html | 8 + .../page_with_frame.html | 12 + .../window_switching_tests/simple_page.html | 9 + .../lib/test/data/xhtmlFormPage.xhtml | 17 + .../lib/test/data/xhtmlTest.html | 76 + .../selenium-webdriver/lib/test/fileserver.js | 319 + .../selenium-webdriver/lib/test/httpserver.js | 122 + .../selenium-webdriver/lib/test/index.js | 301 + .../selenium-webdriver/lib/test/resources.js | 44 + node_modules/selenium-webdriver/lib/until.js | 427 + .../selenium-webdriver/lib/webdriver.js | 2459 +++ node_modules/selenium-webdriver/net/index.js | 117 + .../selenium-webdriver/net/portprober.js | 205 + .../node_modules/.bin/rimraf | 1 + node_modules/selenium-webdriver/opera.js | 402 + node_modules/selenium-webdriver/package.json | 43 + node_modules/selenium-webdriver/phantomjs.js | 289 + node_modules/selenium-webdriver/proxy.js | 32 + .../selenium-webdriver/remote/index.js | 593 + node_modules/selenium-webdriver/safari.js | 700 + .../selenium-webdriver/test/actions_test.js | 54 + .../test/chrome/options_test.js | 227 + .../test/chrome/service_test.js | 45 + .../selenium-webdriver/test/cookie_test.js | 214 + .../test/element_finding_test.js | 410 + .../test/execute_script_test.js | 352 + .../test/fingerprint_test.js | 57 + .../test/firefox/extension_test.js | 96 + .../test/firefox/firefox_test.js | 188 + .../test/firefox/profile_test.js | 186 + .../selenium-webdriver/test/http/http_test.js | 205 + .../selenium-webdriver/test/http/util_test.js | 184 + .../selenium-webdriver/test/io_test.js | 321 + .../selenium-webdriver/test/lib/by_test.js | 139 + .../test/lib/capabilities_test.js | 111 + .../selenium-webdriver/test/lib/error_test.js | 286 + .../test/lib/events_test.js | 177 + .../selenium-webdriver/test/lib/http_test.js | 655 + .../test/lib/logging_test.js | 272 + .../test/lib/promise_aplus_test.js | 74 + .../test/lib/promise_error_test.js | 880 + .../test/lib/promise_flow_test.js | 2284 +++ .../test/lib/promise_generator_test.js | 308 + .../test/lib/promise_test.js | 1067 + .../selenium-webdriver/test/lib/testutil.js | 90 + .../selenium-webdriver/test/lib/until_test.js | 463 + .../test/lib/webdriver_test.js | 2177 ++ .../selenium-webdriver/test/logging_test.js | 169 + .../selenium-webdriver/test/net/index_test.js | 60 + .../test/net/portprober_test.js | 129 + .../test/page_loading_test.js | 166 + .../test/phantomjs/execute_phantomjs_test.js | 73 + .../selenium-webdriver/test/proxy_test.js | 180 + .../selenium-webdriver/test/remote_test.js | 117 + .../selenium-webdriver/test/safari_test.js | 112 + .../selenium-webdriver/test/session_test.js | 53 + .../test/stale_element_test.js | 61 + .../selenium-webdriver/test/tag_name_test.js | 34 + .../test/testing/assert_test.js | 374 + .../test/testing/index_test.js | 178 + .../selenium-webdriver/test/upload_test.js | 86 + .../selenium-webdriver/test/window_test.js | 175 + .../selenium-webdriver/testing/assert.js | 378 + .../selenium-webdriver/testing/index.js | 277 + node_modules/semver/package.json | 95 +- node_modules/sequencify/package.json | 97 +- node_modules/sigmund/package.json | 96 +- node_modules/signal-exit/package.json | 114 +- node_modules/source-map/package.json | 293 +- node_modules/sparkles/package.json | 106 +- node_modules/spdx-correct/package.json | 83 +- .../spdx-expression-parse/package.json | 108 +- node_modules/spdx-license-ids/package.json | 121 +- node_modules/stream-consume/package.json | 84 +- node_modules/stream-shift/package.json | 91 +- node_modules/stream-to-array/package.json | 82 +- node_modules/string_decoder/package.json | 104 +- node_modules/stringify-object/package.json | 115 +- node_modules/strip-ansi/package.json | 104 +- node_modules/strip-bom-stream/package.json | 93 +- node_modules/strip-bom/package.json | 92 +- node_modules/strip-indent/package.json | 89 +- .../node_modules => }/supports-color/cli.js | 0 node_modules/supports-color/index.js | 25 +- node_modules/supports-color/package.json | 102 +- node_modules/supports-color/readme.md | 20 +- .../systemjs/dist/system-csp-production.js | 4 +- .../dist/system-csp-production.js.map | 2 +- .../dist/system-csp-production.src.js | 8 +- .../systemjs/dist/system-register-only.js | 4 +- .../systemjs/dist/system-register-only.src.js | 4 +- node_modules/systemjs/dist/system.js | 6 +- node_modules/systemjs/dist/system.js.map | 2 +- node_modules/systemjs/dist/system.src.js | 34 +- node_modules/systemjs/package.json | 96 +- .../node_modules/end-of-stream/package.json | 87 +- .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../tar-stream/node_modules/isarray/Makefile | 6 - .../tar-stream/node_modules/isarray/README.md | 60 - .../node_modules/isarray/component.json | 19 - .../tar-stream/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../tar-stream/node_modules/isarray/test.js | 20 - .../tar-stream/node_modules/once/package.json | 91 +- .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../doc/wg-meetings/2015-01-30.md | 60 - .../node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - node_modules/tar-stream/package.json | 114 +- node_modules/through2-filter/package.json | 118 +- .../through2/node_modules/isarray/.npmignore | 1 - .../through2/node_modules/isarray/.travis.yml | 4 - .../through2/node_modules/isarray/Makefile | 6 - .../through2/node_modules/isarray/README.md | 60 - .../node_modules/isarray/component.json | 19 - .../through2/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../through2/node_modules/isarray/test.js | 20 - .../node_modules/readable-stream/package.json | 106 +- node_modules/through2/package.json | 126 +- node_modules/tildify/package.json | 96 +- node_modules/time-stamp/package.json | 103 +- node_modules/tmp/.npmignore | 2 + node_modules/tmp/.travis.yml | 5 + node_modules/tmp/README.md | 162 + node_modules/tmp/domain-test.js | 13 + node_modules/tmp/lib/tmp.js | 307 + node_modules/tmp/package.json | 41 + node_modules/tmp/test-all.sh | 9 + node_modules/tmp/test.js | 6 + node_modules/tmp/test/base.js | 74 + node_modules/tmp/test/dir-test.js | 196 + node_modules/tmp/test/file-test.js | 177 + node_modules/tmp/test/graceful.js | 15 + node_modules/tmp/test/keep.js | 11 + node_modules/tmp/test/name-test.js | 82 + node_modules/tmp/test/spawn.js | 32 + node_modules/tmp/test/symlinkme/file.js | 0 node_modules/tmp/test/unsafe.js | 30 + node_modules/to-absolute-glob/package.json | 96 +- node_modules/to-fast-properties/package.json | 90 +- node_modules/to-iso-string/package.json | 85 +- node_modules/trim-newlines/package.json | 88 +- node_modules/typedarray/package.json | 88 +- node_modules/typescript/Gulpfile.ts | 62 +- .../typescript/lib/cancellationToken.js | 41 + node_modules/typescript/lib/protocol.d.ts | 1700 ++ node_modules/typescript/lib/tsc.js | 1367 +- node_modules/typescript/lib/tsserver.js | 8109 +++++--- .../typescript/lib/tsserverlibrary.d.ts | 1884 +- .../typescript/lib/tsserverlibrary.js | 7925 ++++--- node_modules/typescript/lib/typescript.d.ts | 122 +- node_modules/typescript/lib/typescript.js | 2559 ++- .../typescript/lib/typescriptServices.d.ts | 122 +- .../typescript/lib/typescriptServices.js | 2559 ++- .../typescript/lib/typingsInstaller.js | 6192 ++++++ node_modules/typescript/package.json | 255 +- node_modules/typescript/test.config | 1 - .../package.json | 124 +- node_modules/ultron/.npmignore | 3 + node_modules/ultron/.travis.yml | 21 + node_modules/ultron/LICENSE | 22 + node_modules/ultron/README.md | 97 + node_modules/ultron/index.js | 129 + node_modules/ultron/package.json | 41 + node_modules/ultron/test.js | 327 + node_modules/unc-path-regex/package.json | 108 +- node_modules/underscore/package.json | 100 +- node_modules/unique-stream/README.md | 50 +- node_modules/unique-stream/index.js | 64 +- node_modules/unique-stream/package.json | 99 +- node_modules/user-home/package.json | 90 +- node_modules/util-deprecate/package.json | 102 +- .../v8flags/node_modules/.bin/user-home | 1 + node_modules/v8flags/package.json | 112 +- node_modules/vali-date/package.json | 89 +- .../validate-npm-package-license/package.json | 83 +- .../vinyl-fs/node_modules/.bin/mkdirp | 1 + .../node_modules/clone-stats/LICENSE.md | 21 + .../node_modules/clone-stats/README.md | 17 + .../node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 31 + .../vinyl-fs/node_modules/clone-stats/test.js | 36 + .../node_modules/glob-parent/package.json | 97 - .../vinyl-fs/node_modules/glob-parent/test.js | 66 - .../vinyl-fs/node_modules/glob-stream/LICENSE | 21 - .../node_modules/glob-stream/README.md | 95 - .../node_modules/glob-stream/index.js | 209 - .../node_modules/isarray/component.json | 19 - .../node_modules/isarray/package.json | 98 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/duplex.js | 1 - .../node_modules/readable-stream/package.json | 112 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - .../node_modules/through2/README.md | 132 - .../node_modules/through2/package.json | 98 - .../node_modules/glob-stream/package.json | 134 - .../vinyl-fs/node_modules/glob/README.md | 377 - .../vinyl-fs/node_modules/glob/package.json | 106 - .../node_modules/is-extglob/README.md | 107 - .../vinyl-fs/node_modules/is-extglob/index.js | 19 - .../node_modules/is-extglob/package.json | 138 - .../vinyl-fs/node_modules/is-glob/README.md | 135 - .../vinyl-fs/node_modules/is-glob/index.js | 23 - .../node_modules/is-glob/package.json | 160 - .../vinyl-fs/node_modules/isarray/.npmignore | 1 - .../vinyl-fs/node_modules/isarray/.travis.yml | 4 - .../vinyl-fs/node_modules/isarray/Makefile | 6 - .../vinyl-fs/node_modules/isarray/README.md | 60 - .../node_modules/isarray/component.json | 19 - .../vinyl-fs/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../vinyl-fs/node_modules/isarray/test.js | 20 - .../ordered-read-streams/index.js | 81 - .../ordered-read-streams/package.json | 91 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../doc/wg-meetings/2015-01-30.md | 60 - .../node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 126 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - .../node_modules/replace-ext/.npmignore | 6 + .../node_modules/replace-ext/.travis.yml | 8 + .../vinyl-fs/node_modules/replace-ext/LICENSE | 20 + .../node_modules/replace-ext/README.md | 44 + .../node_modules/replace-ext/index.js | 9 + .../node_modules/replace-ext/package.json | 35 + .../node_modules/replace-ext/test/main.js | 51 + .../node_modules/unique-stream/README.md | 133 - .../node_modules/unique-stream/index.js | 48 - .../node_modules/unique-stream/package.json | 108 - .../vinyl-fs/node_modules/vinyl/package.json | 112 +- node_modules/vinyl-fs/package.json | 132 +- .../node_modules/clone-stats/package.json | 95 - .../vinyl/node_modules/replace-ext/LICENSE | 21 - .../vinyl/node_modules/replace-ext/README.md | 50 - .../vinyl/node_modules/replace-ext/index.js | 18 - .../node_modules/replace-ext/package.json | 129 - node_modules/vinyl/package.json | 135 +- node_modules/when/package.json | 150 +- node_modules/which/package.json | 100 +- node_modules/wrappy/package.json | 109 +- node_modules/ws/.npmignore | 11 + node_modules/ws/.travis.yml | 15 + node_modules/ws/Makefile | 45 + node_modules/ws/README.md | 235 + node_modules/ws/SECURITY.md | 33 + node_modules/ws/index.js | 49 + node_modules/ws/lib/BufferPool.js | 63 + node_modules/ws/lib/BufferUtil.fallback.js | 47 + node_modules/ws/lib/BufferUtil.js | 13 + node_modules/ws/lib/ErrorCodes.js | 24 + node_modules/ws/lib/Extensions.js | 70 + node_modules/ws/lib/PerMessageDeflate.js | 337 + node_modules/ws/lib/Receiver.hixie.js | 194 + node_modules/ws/lib/Receiver.js | 793 + node_modules/ws/lib/Sender.hixie.js | 124 + node_modules/ws/lib/Sender.js | 324 + node_modules/ws/lib/Validation.fallback.js | 11 + node_modules/ws/lib/Validation.js | 13 + node_modules/ws/lib/WebSocket.js | 987 + node_modules/ws/lib/WebSocketServer.js | 554 + node_modules/ws/package.json | 40 + node_modules/xml2js/.npmignore | 6 + node_modules/xml2js/.travis.yml | 5 + node_modules/xml2js/83.coffee | 6 + node_modules/xml2js/CONTRIBUTING.md | 19 + node_modules/xml2js/LICENSE | 19 + node_modules/xml2js/README.md | 343 + node_modules/xml2js/canon.xml | 482 + node_modules/xml2js/incompat.coffee | 5 + node_modules/xml2js/incompat2.js | 7 + node_modules/xml2js/lib/bom.js | 15 + node_modules/xml2js/lib/processors.js | 19 + node_modules/xml2js/lib/xml2js.js | 436 + node_modules/xml2js/package.json | 63 + node_modules/xml2js/text.coffee | 11 + node_modules/xml2js/text.xml | 485 + node_modules/xml2js/x.js | 24 + node_modules/xmlbuilder/.npmignore | 5 + node_modules/xmlbuilder/CHANGELOG.md | 395 + node_modules/xmlbuilder/LICENSE | 21 + node_modules/xmlbuilder/README.md | 85 + node_modules/xmlbuilder/lib/Utility.js | 139 + node_modules/xmlbuilder/lib/XMLAttribute.js | 31 + node_modules/xmlbuilder/lib/XMLCData.js | 32 + node_modules/xmlbuilder/lib/XMLComment.js | 32 + node_modules/xmlbuilder/lib/XMLDTDAttList.js | 50 + node_modules/xmlbuilder/lib/XMLDTDElement.js | 35 + node_modules/xmlbuilder/lib/XMLDTDEntity.js | 56 + node_modules/xmlbuilder/lib/XMLDTDNotation.js | 37 + node_modules/xmlbuilder/lib/XMLDeclaration.js | 40 + node_modules/xmlbuilder/lib/XMLDocType.js | 107 + node_modules/xmlbuilder/lib/XMLDocument.js | 48 + node_modules/xmlbuilder/lib/XMLDocumentCB.js | 402 + node_modules/xmlbuilder/lib/XMLElement.js | 111 + node_modules/xmlbuilder/lib/XMLNode.js | 432 + .../lib/XMLProcessingInstruction.js | 35 + node_modules/xmlbuilder/lib/XMLRaw.js | 32 + .../xmlbuilder/lib/XMLStreamWriter.js | 278 + .../xmlbuilder/lib/XMLStringWriter.js | 302 + node_modules/xmlbuilder/lib/XMLStringifier.js | 192 + node_modules/xmlbuilder/lib/XMLText.js | 32 + node_modules/xmlbuilder/lib/XMLWriterBase.js | 68 + node_modules/xmlbuilder/lib/index.js | 53 + node_modules/xmlbuilder/package.json | 37 + node_modules/xtend/package.json | 118 +- node_modules/yazl/README.md | 16 +- node_modules/yazl/index.js | 5 +- node_modules/yazl/package.json | 105 +- .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../zip-stream/node_modules/isarray/Makefile | 6 - .../zip-stream/node_modules/isarray/README.md | 60 - .../node_modules/isarray/component.json | 19 - .../zip-stream/node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 104 - .../zip-stream/node_modules/isarray/test.js | 20 - .../zip-stream/node_modules/lodash/LICENSE | 47 - .../zip-stream/node_modules/lodash/README.md | 39 - .../node_modules/lodash/_DataView.js | 7 - .../zip-stream/node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_LazyWrapper.js | 28 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../zip-stream/node_modules/lodash/_Map.js | 7 - .../node_modules/lodash/_MapCache.js | 32 - .../node_modules/lodash/_Promise.js | 7 - .../zip-stream/node_modules/lodash/_Set.js | 7 - .../node_modules/lodash/_SetCache.js | 27 - .../zip-stream/node_modules/lodash/_Stack.js | 27 - .../zip-stream/node_modules/lodash/_Symbol.js | 6 - .../node_modules/lodash/_Uint8Array.js | 6 - .../node_modules/lodash/_WeakMap.js | 7 - .../node_modules/lodash/_addMapEntry.js | 15 - .../node_modules/lodash/_addSetEntry.js | 15 - .../zip-stream/node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayPush.js | 20 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../zip-stream/node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseClamp.js | 22 - .../node_modules/lodash/_baseClone.js | 133 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../node_modules/lodash/_baseCreate.js | 30 - .../node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../node_modules/lodash/_baseFill.js | 32 - .../node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../node_modules/lodash/_baseFindKey.js | 23 - .../node_modules/lodash/_baseFlatten.js | 38 - .../node_modules/lodash/_baseFor.js | 16 - .../node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../node_modules/lodash/_baseGet.js | 25 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../node_modules/lodash/_baseGetTag.js | 22 - .../zip-stream/node_modules/lodash/_baseGt.js | 14 - .../node_modules/lodash/_baseHas.js | 19 - .../node_modules/lodash/_baseHasIn.js | 13 - .../node_modules/lodash/_baseInRange.js | 18 - .../node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../node_modules/lodash/_baseInvoke.js | 28 - .../node_modules/lodash/_baseIsArguments.js | 27 - .../node_modules/lodash/_baseIsArrayBuffer.js | 26 - .../node_modules/lodash/_baseIsDate.js | 27 - .../node_modules/lodash/_baseIsEqual.js | 30 - .../node_modules/lodash/_baseIsEqualDeep.js | 89 - .../node_modules/lodash/_baseIsMap.js | 18 - .../node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 27 - .../node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 69 - .../node_modules/lodash/_baseIteratee.js | 31 - .../node_modules/lodash/_baseKeys.js | 30 - .../node_modules/lodash/_baseKeysIn.js | 33 - .../node_modules/lodash/_baseLodash.js | 10 - .../zip-stream/node_modules/lodash/_baseLt.js | 14 - .../node_modules/lodash/_baseMap.js | 22 - .../node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../node_modules/lodash/_baseNth.js | 20 - .../node_modules/lodash/_baseOrderBy.js | 34 - .../node_modules/lodash/_basePick.js | 19 - .../node_modules/lodash/_basePickBy.js | 28 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../node_modules/lodash/_basePullAll.js | 51 - .../node_modules/lodash/_basePullAt.js | 50 - .../node_modules/lodash/_baseRandom.js | 18 - .../node_modules/lodash/_baseRange.js | 28 - .../node_modules/lodash/_baseReduce.js | 23 - .../node_modules/lodash/_baseRepeat.js | 35 - .../node_modules/lodash/_baseRest.js | 17 - .../node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../node_modules/lodash/_baseSet.js | 48 - .../node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../node_modules/lodash/_baseShuffle.js | 15 - .../node_modules/lodash/_baseSlice.js | 31 - .../node_modules/lodash/_baseSome.js | 22 - .../node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../node_modules/lodash/_baseSum.js | 24 - .../node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../node_modules/lodash/_baseUnary.js | 14 - .../node_modules/lodash/_baseUniq.js | 72 - .../node_modules/lodash/_baseUnset.js | 29 - .../node_modules/lodash/_baseUpdate.js | 18 - .../node_modules/lodash/_baseValues.js | 19 - .../node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../node_modules/lodash/_baseXor.js | 30 - .../node_modules/lodash/_baseZipObject.js | 23 - .../node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../node_modules/lodash/_castPath.js | 15 - .../node_modules/lodash/_castRest.js | 14 - .../node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../node_modules/lodash/_cloneMap.js | 19 - .../node_modules/lodash/_cloneRegExp.js | 17 - .../node_modules/lodash/_cloneSet.js | 19 - .../node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../node_modules/lodash/_copyArray.js | 20 - .../node_modules/lodash/_copyObject.js | 40 - .../node_modules/lodash/_copySymbols.js | 16 - .../node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtor.js | 37 - .../node_modules/lodash/_createCurry.js | 46 - .../node_modules/lodash/_createFind.js | 25 - .../node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../node_modules/lodash/_createRound.js | 33 - .../node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrap.js | 107 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../node_modules/lodash/_equalArrays.js | 84 - .../node_modules/lodash/_equalByTag.js | 113 - .../node_modules/lodash/_equalObjects.js | 90 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../node_modules/lodash/_flatRest.js | 16 - .../node_modules/lodash/_freeGlobal.js | 4 - .../node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../node_modules/lodash/_getData.js | 15 - .../node_modules/lodash/_getFuncName.js | 31 - .../node_modules/lodash/_getHolder.js | 13 - .../node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 26 - .../zip-stream/node_modules/lodash/_getTag.js | 68 - .../node_modules/lodash/_getValue.js | 13 - .../node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../node_modules/lodash/_hasPath.js | 40 - .../node_modules/lodash/_hasUnicode.js | 24 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../node_modules/lodash/_hashClear.js | 15 - .../node_modules/lodash/_hashDelete.js | 17 - .../node_modules/lodash/_hashGet.js | 30 - .../node_modules/lodash/_hashHas.js | 23 - .../node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../zip-stream/node_modules/lodash/_isKey.js | 29 - .../node_modules/lodash/_isKeyable.js | 15 - .../node_modules/lodash/_isLaziable.js | 28 - .../node_modules/lodash/_isMaskable.js | 14 - .../node_modules/lodash/_isMasked.js | 20 - .../node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../node_modules/lodash/_lazyClone.js | 23 - .../node_modules/lodash/_lazyReverse.js | 23 - .../node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../node_modules/lodash/_mapCacheGet.js | 16 - .../node_modules/lodash/_mapCacheHas.js | 16 - .../node_modules/lodash/_mapCacheSet.js | 22 - .../node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../node_modules/lodash/_nodeUtil.js | 22 - .../node_modules/lodash/_overArg.js | 15 - .../node_modules/lodash/_overRest.js | 36 - .../zip-stream/node_modules/lodash/_parent.js | 16 - .../node_modules/lodash/_reEscape.js | 4 - .../node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../node_modules/lodash/_realNames.js | 4 - .../node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../zip-stream/node_modules/lodash/_root.js | 9 - .../node_modules/lodash/_setCacheAdd.js | 19 - .../node_modules/lodash/_setCacheHas.js | 14 - .../node_modules/lodash/_setData.js | 20 - .../node_modules/lodash/_setToArray.js | 18 - .../node_modules/lodash/_setToPairs.js | 18 - .../node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_shuffleSelf.js | 28 - .../node_modules/lodash/_stackClear.js | 15 - .../node_modules/lodash/_stackDelete.js | 18 - .../node_modules/lodash/_stackGet.js | 14 - .../node_modules/lodash/_stackHas.js | 14 - .../node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 31 - .../zip-stream/node_modules/lodash/_toKey.js | 21 - .../node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../node_modules/lodash/_unicodeSize.js | 42 - .../node_modules/lodash/_unicodeToArray.js | 38 - .../node_modules/lodash/_unicodeWords.js | 63 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - .../zip-stream/node_modules/lodash/add.js | 22 - .../zip-stream/node_modules/lodash/after.js | 42 - .../zip-stream/node_modules/lodash/array.js | 67 - .../zip-stream/node_modules/lodash/ary.js | 29 - .../zip-stream/node_modules/lodash/assign.js | 58 - .../node_modules/lodash/assignIn.js | 40 - .../node_modules/lodash/assignInWith.js | 38 - .../node_modules/lodash/assignWith.js | 37 - .../zip-stream/node_modules/lodash/at.js | 23 - .../zip-stream/node_modules/lodash/attempt.js | 35 - .../zip-stream/node_modules/lodash/before.js | 40 - .../zip-stream/node_modules/lodash/bind.js | 57 - .../zip-stream/node_modules/lodash/bindAll.js | 41 - .../zip-stream/node_modules/lodash/bindKey.js | 68 - .../node_modules/lodash/camelCase.js | 29 - .../node_modules/lodash/capitalize.js | 23 - .../node_modules/lodash/castArray.js | 44 - .../zip-stream/node_modules/lodash/ceil.js | 26 - .../zip-stream/node_modules/lodash/chain.js | 38 - .../zip-stream/node_modules/lodash/chunk.js | 50 - .../zip-stream/node_modules/lodash/clamp.js | 39 - .../zip-stream/node_modules/lodash/clone.js | 33 - .../node_modules/lodash/cloneDeep.js | 25 - .../node_modules/lodash/cloneDeepWith.js | 35 - .../node_modules/lodash/cloneWith.js | 38 - .../node_modules/lodash/collection.js | 30 - .../zip-stream/node_modules/lodash/commit.js | 33 - .../zip-stream/node_modules/lodash/compact.js | 31 - .../zip-stream/node_modules/lodash/concat.js | 43 - .../zip-stream/node_modules/lodash/cond.js | 60 - .../node_modules/lodash/conforms.js | 32 - .../node_modules/lodash/conformsTo.js | 32 - .../node_modules/lodash/constant.js | 26 - .../zip-stream/node_modules/lodash/core.js | 3831 ---- .../node_modules/lodash/core.min.js | 29 - .../zip-stream/node_modules/lodash/countBy.js | 41 - .../zip-stream/node_modules/lodash/create.js | 43 - .../zip-stream/node_modules/lodash/curry.js | 57 - .../node_modules/lodash/curryRight.js | 54 - .../zip-stream/node_modules/lodash/date.js | 3 - .../node_modules/lodash/debounce.js | 188 - .../zip-stream/node_modules/lodash/deburr.js | 43 - .../node_modules/lodash/defaultTo.js | 25 - .../node_modules/lodash/defaults.js | 32 - .../node_modules/lodash/defaultsDeep.js | 30 - .../zip-stream/node_modules/lodash/defer.js | 26 - .../zip-stream/node_modules/lodash/delay.js | 28 - .../node_modules/lodash/difference.js | 33 - .../node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../zip-stream/node_modules/lodash/divide.js | 22 - .../zip-stream/node_modules/lodash/drop.js | 38 - .../node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../node_modules/lodash/dropWhile.js | 46 - .../zip-stream/node_modules/lodash/each.js | 1 - .../node_modules/lodash/eachRight.js | 1 - .../node_modules/lodash/endsWith.js | 43 - .../zip-stream/node_modules/lodash/entries.js | 1 - .../node_modules/lodash/entriesIn.js | 1 - .../zip-stream/node_modules/lodash/eq.js | 37 - .../zip-stream/node_modules/lodash/escape.js | 43 - .../node_modules/lodash/escapeRegExp.js | 32 - .../zip-stream/node_modules/lodash/every.js | 57 - .../zip-stream/node_modules/lodash/extend.js | 1 - .../node_modules/lodash/extendWith.js | 1 - .../zip-stream/node_modules/lodash/fill.js | 45 - .../zip-stream/node_modules/lodash/filter.js | 49 - .../zip-stream/node_modules/lodash/find.js | 43 - .../node_modules/lodash/findIndex.js | 56 - .../zip-stream/node_modules/lodash/findKey.js | 44 - .../node_modules/lodash/findLast.js | 26 - .../node_modules/lodash/findLastIndex.js | 60 - .../node_modules/lodash/findLastKey.js | 44 - .../zip-stream/node_modules/lodash/first.js | 1 - .../zip-stream/node_modules/lodash/flatMap.js | 30 - .../node_modules/lodash/flatMapDeep.js | 32 - .../node_modules/lodash/flatMapDepth.js | 32 - .../zip-stream/node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../zip-stream/node_modules/lodash/flip.js | 28 - .../zip-stream/node_modules/lodash/floor.js | 26 - .../zip-stream/node_modules/lodash/flow.js | 27 - .../node_modules/lodash/flowRight.js | 26 - .../zip-stream/node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../zip-stream/node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../zip-stream/node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../zip-stream/node_modules/lodash/fp.js | 2 - .../zip-stream/node_modules/lodash/fp/F.js | 1 - .../zip-stream/node_modules/lodash/fp/T.js | 1 - .../zip-stream/node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 535 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../node_modules/lodash/fp/_mapping.js | 367 - .../node_modules/lodash/fp/_util.js | 15 - .../zip-stream/node_modules/lodash/fp/add.js | 5 - .../node_modules/lodash/fp/after.js | 5 - .../zip-stream/node_modules/lodash/fp/all.js | 1 - .../node_modules/lodash/fp/allPass.js | 1 - .../node_modules/lodash/fp/always.js | 1 - .../zip-stream/node_modules/lodash/fp/any.js | 1 - .../node_modules/lodash/fp/anyPass.js | 1 - .../node_modules/lodash/fp/apply.js | 1 - .../node_modules/lodash/fp/array.js | 2 - .../zip-stream/node_modules/lodash/fp/ary.js | 5 - .../node_modules/lodash/fp/assign.js | 5 - .../node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../node_modules/lodash/fp/assoc.js | 1 - .../node_modules/lodash/fp/assocPath.js | 1 - .../zip-stream/node_modules/lodash/fp/at.js | 5 - .../node_modules/lodash/fp/attempt.js | 5 - .../node_modules/lodash/fp/before.js | 5 - .../zip-stream/node_modules/lodash/fp/bind.js | 5 - .../node_modules/lodash/fp/bindAll.js | 5 - .../node_modules/lodash/fp/bindKey.js | 5 - .../node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../node_modules/lodash/fp/castArray.js | 5 - .../zip-stream/node_modules/lodash/fp/ceil.js | 5 - .../node_modules/lodash/fp/chain.js | 5 - .../node_modules/lodash/fp/chunk.js | 5 - .../node_modules/lodash/fp/clamp.js | 5 - .../node_modules/lodash/fp/clone.js | 5 - .../node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../node_modules/lodash/fp/commit.js | 5 - .../node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../node_modules/lodash/fp/compose.js | 1 - .../node_modules/lodash/fp/concat.js | 5 - .../zip-stream/node_modules/lodash/fp/cond.js | 5 - .../node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../node_modules/lodash/fp/constant.js | 5 - .../node_modules/lodash/fp/contains.js | 1 - .../node_modules/lodash/fp/convert.js | 18 - .../node_modules/lodash/fp/countBy.js | 5 - .../node_modules/lodash/fp/create.js | 5 - .../node_modules/lodash/fp/curry.js | 5 - .../node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../zip-stream/node_modules/lodash/fp/date.js | 2 - .../node_modules/lodash/fp/debounce.js | 5 - .../node_modules/lodash/fp/deburr.js | 5 - .../node_modules/lodash/fp/defaultTo.js | 5 - .../node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../node_modules/lodash/fp/defer.js | 5 - .../node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../node_modules/lodash/fp/divide.js | 5 - .../zip-stream/node_modules/lodash/fp/drop.js | 5 - .../node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../node_modules/lodash/fp/dropWhile.js | 5 - .../zip-stream/node_modules/lodash/fp/each.js | 1 - .../node_modules/lodash/fp/eachRight.js | 1 - .../node_modules/lodash/fp/endsWith.js | 5 - .../node_modules/lodash/fp/entries.js | 1 - .../node_modules/lodash/fp/entriesIn.js | 1 - .../zip-stream/node_modules/lodash/fp/eq.js | 5 - .../node_modules/lodash/fp/equals.js | 1 - .../node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../node_modules/lodash/fp/every.js | 5 - .../node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../zip-stream/node_modules/lodash/fp/fill.js | 5 - .../node_modules/lodash/fp/filter.js | 5 - .../zip-stream/node_modules/lodash/fp/find.js | 5 - .../node_modules/lodash/fp/findFrom.js | 5 - .../node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../node_modules/lodash/fp/findKey.js | 5 - .../node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../node_modules/lodash/fp/first.js | 1 - .../node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../zip-stream/node_modules/lodash/fp/flip.js | 5 - .../node_modules/lodash/fp/floor.js | 5 - .../zip-stream/node_modules/lodash/fp/flow.js | 5 - .../node_modules/lodash/fp/flowRight.js | 5 - .../node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../node_modules/lodash/fp/fromPairs.js | 5 - .../node_modules/lodash/fp/function.js | 2 - .../node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../zip-stream/node_modules/lodash/fp/get.js | 5 - .../node_modules/lodash/fp/getOr.js | 5 - .../node_modules/lodash/fp/groupBy.js | 5 - .../zip-stream/node_modules/lodash/fp/gt.js | 5 - .../zip-stream/node_modules/lodash/fp/gte.js | 5 - .../zip-stream/node_modules/lodash/fp/has.js | 5 - .../node_modules/lodash/fp/hasIn.js | 5 - .../zip-stream/node_modules/lodash/fp/head.js | 5 - .../node_modules/lodash/fp/identical.js | 1 - .../node_modules/lodash/fp/identity.js | 5 - .../node_modules/lodash/fp/inRange.js | 5 - .../node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../node_modules/lodash/fp/indexBy.js | 1 - .../node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../zip-stream/node_modules/lodash/fp/init.js | 1 - .../node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../node_modules/lodash/fp/invert.js | 5 - .../node_modules/lodash/fp/invertBy.js | 5 - .../node_modules/lodash/fp/invertObj.js | 1 - .../node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../node_modules/lodash/fp/isBoolean.js | 5 - .../node_modules/lodash/fp/isBuffer.js | 5 - .../node_modules/lodash/fp/isDate.js | 5 - .../node_modules/lodash/fp/isElement.js | 5 - .../node_modules/lodash/fp/isEmpty.js | 5 - .../node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../node_modules/lodash/fp/isError.js | 5 - .../node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../node_modules/lodash/fp/isInteger.js | 5 - .../node_modules/lodash/fp/isLength.js | 5 - .../node_modules/lodash/fp/isMap.js | 5 - .../node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../node_modules/lodash/fp/isNaN.js | 5 - .../node_modules/lodash/fp/isNative.js | 5 - .../node_modules/lodash/fp/isNil.js | 5 - .../node_modules/lodash/fp/isNull.js | 5 - .../node_modules/lodash/fp/isNumber.js | 5 - .../node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../node_modules/lodash/fp/isSet.js | 5 - .../node_modules/lodash/fp/isString.js | 5 - .../node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../node_modules/lodash/fp/isWeakMap.js | 5 - .../node_modules/lodash/fp/isWeakSet.js | 5 - .../node_modules/lodash/fp/iteratee.js | 5 - .../zip-stream/node_modules/lodash/fp/join.js | 5 - .../zip-stream/node_modules/lodash/fp/juxt.js | 1 - .../node_modules/lodash/fp/kebabCase.js | 5 - .../node_modules/lodash/fp/keyBy.js | 5 - .../zip-stream/node_modules/lodash/fp/keys.js | 5 - .../node_modules/lodash/fp/keysIn.js | 5 - .../zip-stream/node_modules/lodash/fp/lang.js | 2 - .../zip-stream/node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../zip-stream/node_modules/lodash/fp/lt.js | 5 - .../zip-stream/node_modules/lodash/fp/lte.js | 5 - .../zip-stream/node_modules/lodash/fp/map.js | 5 - .../node_modules/lodash/fp/mapKeys.js | 5 - .../node_modules/lodash/fp/mapValues.js | 5 - .../node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../zip-stream/node_modules/lodash/fp/math.js | 2 - .../zip-stream/node_modules/lodash/fp/max.js | 5 - .../node_modules/lodash/fp/maxBy.js | 5 - .../zip-stream/node_modules/lodash/fp/mean.js | 5 - .../node_modules/lodash/fp/meanBy.js | 5 - .../node_modules/lodash/fp/memoize.js | 5 - .../node_modules/lodash/fp/merge.js | 5 - .../node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../node_modules/lodash/fp/mergeWith.js | 5 - .../node_modules/lodash/fp/method.js | 5 - .../node_modules/lodash/fp/methodOf.js | 5 - .../zip-stream/node_modules/lodash/fp/min.js | 5 - .../node_modules/lodash/fp/minBy.js | 5 - .../node_modules/lodash/fp/mixin.js | 5 - .../node_modules/lodash/fp/multiply.js | 5 - .../zip-stream/node_modules/lodash/fp/nAry.js | 1 - .../node_modules/lodash/fp/negate.js | 5 - .../zip-stream/node_modules/lodash/fp/next.js | 5 - .../zip-stream/node_modules/lodash/fp/noop.js | 5 - .../zip-stream/node_modules/lodash/fp/now.js | 5 - .../zip-stream/node_modules/lodash/fp/nth.js | 5 - .../node_modules/lodash/fp/nthArg.js | 5 - .../node_modules/lodash/fp/number.js | 2 - .../node_modules/lodash/fp/object.js | 2 - .../zip-stream/node_modules/lodash/fp/omit.js | 5 - .../node_modules/lodash/fp/omitAll.js | 1 - .../node_modules/lodash/fp/omitBy.js | 5 - .../zip-stream/node_modules/lodash/fp/once.js | 5 - .../node_modules/lodash/fp/orderBy.js | 5 - .../zip-stream/node_modules/lodash/fp/over.js | 5 - .../node_modules/lodash/fp/overArgs.js | 5 - .../node_modules/lodash/fp/overEvery.js | 5 - .../node_modules/lodash/fp/overSome.js | 5 - .../zip-stream/node_modules/lodash/fp/pad.js | 5 - .../node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../node_modules/lodash/fp/padEnd.js | 5 - .../node_modules/lodash/fp/padStart.js | 5 - .../node_modules/lodash/fp/parseInt.js | 5 - .../node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../node_modules/lodash/fp/partition.js | 5 - .../zip-stream/node_modules/lodash/fp/path.js | 1 - .../node_modules/lodash/fp/pathEq.js | 1 - .../node_modules/lodash/fp/pathOr.js | 1 - .../node_modules/lodash/fp/paths.js | 1 - .../zip-stream/node_modules/lodash/fp/pick.js | 5 - .../node_modules/lodash/fp/pickAll.js | 1 - .../node_modules/lodash/fp/pickBy.js | 5 - .../zip-stream/node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../node_modules/lodash/fp/plant.js | 5 - .../node_modules/lodash/fp/pluck.js | 1 - .../zip-stream/node_modules/lodash/fp/prop.js | 1 - .../node_modules/lodash/fp/propEq.js | 1 - .../node_modules/lodash/fp/propOr.js | 1 - .../node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../node_modules/lodash/fp/props.js | 1 - .../zip-stream/node_modules/lodash/fp/pull.js | 5 - .../node_modules/lodash/fp/pullAll.js | 5 - .../node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../node_modules/lodash/fp/pullAt.js | 5 - .../node_modules/lodash/fp/random.js | 5 - .../node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../node_modules/lodash/fp/rearg.js | 5 - .../node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../node_modules/lodash/fp/reject.js | 5 - .../node_modules/lodash/fp/remove.js | 5 - .../node_modules/lodash/fp/repeat.js | 5 - .../node_modules/lodash/fp/replace.js | 5 - .../zip-stream/node_modules/lodash/fp/rest.js | 5 - .../node_modules/lodash/fp/restFrom.js | 5 - .../node_modules/lodash/fp/result.js | 5 - .../node_modules/lodash/fp/reverse.js | 5 - .../node_modules/lodash/fp/round.js | 5 - .../node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../zip-stream/node_modules/lodash/fp/seq.js | 2 - .../zip-stream/node_modules/lodash/fp/set.js | 5 - .../node_modules/lodash/fp/setWith.js | 5 - .../node_modules/lodash/fp/shuffle.js | 5 - .../zip-stream/node_modules/lodash/fp/size.js | 5 - .../node_modules/lodash/fp/slice.js | 5 - .../node_modules/lodash/fp/snakeCase.js | 5 - .../zip-stream/node_modules/lodash/fp/some.js | 5 - .../node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../node_modules/lodash/fp/split.js | 5 - .../node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../node_modules/lodash/fp/string.js | 2 - .../node_modules/lodash/fp/stubArray.js | 5 - .../node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../node_modules/lodash/fp/stubTrue.js | 5 - .../node_modules/lodash/fp/subtract.js | 5 - .../zip-stream/node_modules/lodash/fp/sum.js | 5 - .../node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../zip-stream/node_modules/lodash/fp/tail.js | 5 - .../zip-stream/node_modules/lodash/fp/take.js | 5 - .../node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../node_modules/lodash/fp/takeWhile.js | 5 - .../zip-stream/node_modules/lodash/fp/tap.js | 5 - .../node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../node_modules/lodash/fp/throttle.js | 5 - .../zip-stream/node_modules/lodash/fp/thru.js | 5 - .../node_modules/lodash/fp/times.js | 5 - .../node_modules/lodash/fp/toArray.js | 5 - .../node_modules/lodash/fp/toFinite.js | 5 - .../node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../node_modules/lodash/fp/toJSON.js | 5 - .../node_modules/lodash/fp/toLength.js | 5 - .../node_modules/lodash/fp/toLower.js | 5 - .../node_modules/lodash/fp/toNumber.js | 5 - .../node_modules/lodash/fp/toPairs.js | 5 - .../node_modules/lodash/fp/toPairsIn.js | 5 - .../node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../node_modules/lodash/fp/toString.js | 5 - .../node_modules/lodash/fp/toUpper.js | 5 - .../node_modules/lodash/fp/transform.js | 5 - .../zip-stream/node_modules/lodash/fp/trim.js | 5 - .../node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../node_modules/lodash/fp/trimEnd.js | 5 - .../node_modules/lodash/fp/trimStart.js | 5 - .../node_modules/lodash/fp/truncate.js | 5 - .../node_modules/lodash/fp/unapply.js | 1 - .../node_modules/lodash/fp/unary.js | 5 - .../node_modules/lodash/fp/unescape.js | 5 - .../node_modules/lodash/fp/union.js | 5 - .../node_modules/lodash/fp/unionBy.js | 5 - .../node_modules/lodash/fp/unionWith.js | 5 - .../zip-stream/node_modules/lodash/fp/uniq.js | 5 - .../node_modules/lodash/fp/uniqBy.js | 5 - .../node_modules/lodash/fp/uniqWith.js | 5 - .../node_modules/lodash/fp/uniqueId.js | 5 - .../node_modules/lodash/fp/unnest.js | 1 - .../node_modules/lodash/fp/unset.js | 5 - .../node_modules/lodash/fp/unzip.js | 5 - .../node_modules/lodash/fp/unzipWith.js | 5 - .../node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../node_modules/lodash/fp/useWith.js | 1 - .../zip-stream/node_modules/lodash/fp/util.js | 2 - .../node_modules/lodash/fp/value.js | 5 - .../node_modules/lodash/fp/valueOf.js | 5 - .../node_modules/lodash/fp/values.js | 5 - .../node_modules/lodash/fp/valuesIn.js | 5 - .../node_modules/lodash/fp/where.js | 1 - .../node_modules/lodash/fp/whereEq.js | 1 - .../node_modules/lodash/fp/without.js | 5 - .../node_modules/lodash/fp/words.js | 5 - .../zip-stream/node_modules/lodash/fp/wrap.js | 5 - .../node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../zip-stream/node_modules/lodash/fp/xor.js | 5 - .../node_modules/lodash/fp/xorBy.js | 5 - .../node_modules/lodash/fp/xorWith.js | 5 - .../zip-stream/node_modules/lodash/fp/zip.js | 5 - .../node_modules/lodash/fp/zipAll.js | 5 - .../node_modules/lodash/fp/zipObj.js | 1 - .../node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../node_modules/lodash/fp/zipWith.js | 5 - .../node_modules/lodash/fromPairs.js | 28 - .../node_modules/lodash/function.js | 25 - .../node_modules/lodash/functions.js | 31 - .../node_modules/lodash/functionsIn.js | 31 - .../zip-stream/node_modules/lodash/get.js | 33 - .../zip-stream/node_modules/lodash/groupBy.js | 42 - .../zip-stream/node_modules/lodash/gt.js | 29 - .../zip-stream/node_modules/lodash/gte.js | 30 - .../zip-stream/node_modules/lodash/has.js | 35 - .../zip-stream/node_modules/lodash/hasIn.js | 34 - .../zip-stream/node_modules/lodash/head.js | 23 - .../node_modules/lodash/identity.js | 21 - .../zip-stream/node_modules/lodash/inRange.js | 55 - .../node_modules/lodash/includes.js | 53 - .../zip-stream/node_modules/lodash/index.js | 1 - .../zip-stream/node_modules/lodash/indexOf.js | 42 - .../zip-stream/node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 42 - .../zip-stream/node_modules/lodash/invert.js | 27 - .../node_modules/lodash/invertBy.js | 44 - .../zip-stream/node_modules/lodash/invoke.js | 24 - .../node_modules/lodash/invokeMap.js | 44 - .../node_modules/lodash/isArguments.js | 36 - .../zip-stream/node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../node_modules/lodash/isBoolean.js | 38 - .../node_modules/lodash/isBuffer.js | 38 - .../zip-stream/node_modules/lodash/isDate.js | 27 - .../node_modules/lodash/isElement.js | 25 - .../zip-stream/node_modules/lodash/isEmpty.js | 74 - .../zip-stream/node_modules/lodash/isEqual.js | 35 - .../node_modules/lodash/isEqualWith.js | 41 - .../zip-stream/node_modules/lodash/isError.js | 42 - .../node_modules/lodash/isFinite.js | 36 - .../node_modules/lodash/isFunction.js | 42 - .../node_modules/lodash/isInteger.js | 33 - .../node_modules/lodash/isLength.js | 35 - .../zip-stream/node_modules/lodash/isMap.js | 27 - .../zip-stream/node_modules/lodash/isMatch.js | 36 - .../node_modules/lodash/isMatchWith.js | 41 - .../zip-stream/node_modules/lodash/isNaN.js | 38 - .../node_modules/lodash/isNative.js | 40 - .../zip-stream/node_modules/lodash/isNil.js | 25 - .../zip-stream/node_modules/lodash/isNull.js | 22 - .../node_modules/lodash/isNumber.js | 47 - .../node_modules/lodash/isObject.js | 31 - .../node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 68 - .../node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../zip-stream/node_modules/lodash/isSet.js | 27 - .../node_modules/lodash/isString.js | 39 - .../node_modules/lodash/isSymbol.js | 38 - .../node_modules/lodash/isTypedArray.js | 27 - .../node_modules/lodash/isUndefined.js | 22 - .../node_modules/lodash/isWeakMap.js | 28 - .../node_modules/lodash/isWeakSet.js | 37 - .../node_modules/lodash/iteratee.js | 50 - .../zip-stream/node_modules/lodash/join.js | 26 - .../node_modules/lodash/kebabCase.js | 28 - .../zip-stream/node_modules/lodash/keyBy.js | 37 - .../zip-stream/node_modules/lodash/keys.js | 37 - .../zip-stream/node_modules/lodash/keysIn.js | 32 - .../zip-stream/node_modules/lodash/lang.js | 58 - .../zip-stream/node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../zip-stream/node_modules/lodash/lodash.js | 16982 --------------- .../node_modules/lodash/lodash.min.js | 134 - .../node_modules/lodash/lowerCase.js | 27 - .../node_modules/lodash/lowerFirst.js | 22 - .../zip-stream/node_modules/lodash/lt.js | 29 - .../zip-stream/node_modules/lodash/lte.js | 30 - .../zip-stream/node_modules/lodash/map.js | 53 - .../zip-stream/node_modules/lodash/mapKeys.js | 36 - .../node_modules/lodash/mapValues.js | 43 - .../zip-stream/node_modules/lodash/matches.js | 36 - .../node_modules/lodash/matchesProperty.js | 34 - .../zip-stream/node_modules/lodash/math.js | 17 - .../zip-stream/node_modules/lodash/max.js | 29 - .../zip-stream/node_modules/lodash/maxBy.js | 34 - .../zip-stream/node_modules/lodash/mean.js | 22 - .../zip-stream/node_modules/lodash/meanBy.js | 31 - .../zip-stream/node_modules/lodash/memoize.js | 73 - .../zip-stream/node_modules/lodash/merge.js | 39 - .../node_modules/lodash/mergeWith.js | 39 - .../zip-stream/node_modules/lodash/method.js | 34 - .../node_modules/lodash/methodOf.js | 33 - .../zip-stream/node_modules/lodash/min.js | 29 - .../zip-stream/node_modules/lodash/minBy.js | 34 - .../zip-stream/node_modules/lodash/mixin.js | 74 - .../node_modules/lodash/multiply.js | 22 - .../zip-stream/node_modules/lodash/negate.js | 40 - .../zip-stream/node_modules/lodash/next.js | 35 - .../zip-stream/node_modules/lodash/noop.js | 17 - .../zip-stream/node_modules/lodash/now.js | 23 - .../zip-stream/node_modules/lodash/nth.js | 29 - .../zip-stream/node_modules/lodash/nthArg.js | 32 - .../zip-stream/node_modules/lodash/number.js | 5 - .../zip-stream/node_modules/lodash/object.js | 49 - .../zip-stream/node_modules/lodash/omit.js | 35 - .../zip-stream/node_modules/lodash/omitBy.js | 29 - .../zip-stream/node_modules/lodash/once.js | 25 - .../zip-stream/node_modules/lodash/orderBy.js | 47 - .../zip-stream/node_modules/lodash/over.js | 24 - .../node_modules/lodash/overArgs.js | 61 - .../node_modules/lodash/overEvery.js | 30 - .../node_modules/lodash/overSome.js | 30 - .../node_modules/lodash/package.json | 115 - .../zip-stream/node_modules/lodash/pad.js | 49 - .../zip-stream/node_modules/lodash/padEnd.js | 39 - .../node_modules/lodash/padStart.js | 39 - .../node_modules/lodash/parseInt.js | 43 - .../zip-stream/node_modules/lodash/partial.js | 50 - .../node_modules/lodash/partialRight.js | 49 - .../node_modules/lodash/partition.js | 43 - .../zip-stream/node_modules/lodash/pick.js | 27 - .../zip-stream/node_modules/lodash/pickBy.js | 27 - .../zip-stream/node_modules/lodash/plant.js | 48 - .../node_modules/lodash/property.js | 32 - .../node_modules/lodash/propertyOf.js | 30 - .../zip-stream/node_modules/lodash/pull.js | 29 - .../zip-stream/node_modules/lodash/pullAll.js | 29 - .../node_modules/lodash/pullAllBy.js | 34 - .../node_modules/lodash/pullAllWith.js | 32 - .../zip-stream/node_modules/lodash/pullAt.js | 43 - .../zip-stream/node_modules/lodash/random.js | 82 - .../zip-stream/node_modules/lodash/range.js | 46 - .../node_modules/lodash/rangeRight.js | 41 - .../zip-stream/node_modules/lodash/rearg.js | 33 - .../zip-stream/node_modules/lodash/reduce.js | 51 - .../node_modules/lodash/reduceRight.js | 36 - .../zip-stream/node_modules/lodash/reject.js | 46 - .../zip-stream/node_modules/lodash/remove.js | 54 - .../zip-stream/node_modules/lodash/repeat.js | 37 - .../zip-stream/node_modules/lodash/replace.js | 29 - .../zip-stream/node_modules/lodash/rest.js | 40 - .../zip-stream/node_modules/lodash/result.js | 57 - .../zip-stream/node_modules/lodash/reverse.js | 34 - .../zip-stream/node_modules/lodash/round.js | 26 - .../zip-stream/node_modules/lodash/sample.js | 24 - .../node_modules/lodash/sampleSize.js | 37 - .../zip-stream/node_modules/lodash/seq.js | 16 - .../zip-stream/node_modules/lodash/set.js | 35 - .../zip-stream/node_modules/lodash/setWith.js | 32 - .../zip-stream/node_modules/lodash/shuffle.js | 25 - .../zip-stream/node_modules/lodash/size.js | 46 - .../zip-stream/node_modules/lodash/slice.js | 37 - .../node_modules/lodash/snakeCase.js | 28 - .../zip-stream/node_modules/lodash/some.js | 51 - .../zip-stream/node_modules/lodash/sortBy.js | 48 - .../node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 34 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 34 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/sortedUniq.js | 24 - .../node_modules/lodash/sortedUniqBy.js | 26 - .../zip-stream/node_modules/lodash/split.js | 52 - .../zip-stream/node_modules/lodash/spread.js | 63 - .../node_modules/lodash/startCase.js | 29 - .../node_modules/lodash/startsWith.js | 36 - .../zip-stream/node_modules/lodash/string.js | 33 - .../node_modules/lodash/stubArray.js | 23 - .../node_modules/lodash/stubFalse.js | 18 - .../node_modules/lodash/stubObject.js | 23 - .../node_modules/lodash/stubString.js | 18 - .../node_modules/lodash/stubTrue.js | 18 - .../node_modules/lodash/subtract.js | 22 - .../zip-stream/node_modules/lodash/sum.js | 24 - .../zip-stream/node_modules/lodash/sumBy.js | 33 - .../zip-stream/node_modules/lodash/tail.js | 22 - .../zip-stream/node_modules/lodash/take.js | 37 - .../node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 46 - .../node_modules/lodash/takeWhile.js | 46 - .../zip-stream/node_modules/lodash/tap.js | 29 - .../node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../node_modules/lodash/throttle.js | 69 - .../zip-stream/node_modules/lodash/thru.js | 28 - .../zip-stream/node_modules/lodash/times.js | 51 - .../zip-stream/node_modules/lodash/toArray.js | 58 - .../node_modules/lodash/toFinite.js | 42 - .../node_modules/lodash/toInteger.js | 36 - .../node_modules/lodash/toIterator.js | 23 - .../zip-stream/node_modules/lodash/toJSON.js | 1 - .../node_modules/lodash/toLength.js | 38 - .../zip-stream/node_modules/lodash/toLower.js | 28 - .../node_modules/lodash/toNumber.js | 66 - .../zip-stream/node_modules/lodash/toPairs.js | 30 - .../node_modules/lodash/toPairsIn.js | 30 - .../zip-stream/node_modules/lodash/toPath.js | 32 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../node_modules/lodash/toString.js | 28 - .../zip-stream/node_modules/lodash/toUpper.js | 28 - .../node_modules/lodash/transform.js | 65 - .../zip-stream/node_modules/lodash/trim.js | 49 - .../zip-stream/node_modules/lodash/trimEnd.js | 43 - .../node_modules/lodash/trimStart.js | 43 - .../node_modules/lodash/truncate.js | 111 - .../zip-stream/node_modules/lodash/unary.js | 22 - .../node_modules/lodash/unescape.js | 34 - .../zip-stream/node_modules/lodash/union.js | 26 - .../zip-stream/node_modules/lodash/unionBy.js | 40 - .../node_modules/lodash/unionWith.js | 36 - .../zip-stream/node_modules/lodash/uniq.js | 27 - .../zip-stream/node_modules/lodash/uniqBy.js | 34 - .../node_modules/lodash/uniqWith.js | 29 - .../node_modules/lodash/uniqueId.js | 28 - .../zip-stream/node_modules/lodash/unset.js | 34 - .../zip-stream/node_modules/lodash/unzip.js | 45 - .../node_modules/lodash/unzipWith.js | 39 - .../zip-stream/node_modules/lodash/update.js | 35 - .../node_modules/lodash/updateWith.js | 33 - .../node_modules/lodash/upperCase.js | 27 - .../node_modules/lodash/upperFirst.js | 22 - .../zip-stream/node_modules/lodash/util.js | 34 - .../zip-stream/node_modules/lodash/value.js | 1 - .../zip-stream/node_modules/lodash/valueOf.js | 1 - .../zip-stream/node_modules/lodash/values.js | 34 - .../node_modules/lodash/valuesIn.js | 32 - .../zip-stream/node_modules/lodash/without.js | 31 - .../zip-stream/node_modules/lodash/words.js | 35 - .../zip-stream/node_modules/lodash/wrap.js | 31 - .../node_modules/lodash/wrapperAt.js | 48 - .../node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../node_modules/lodash/wrapperValue.js | 21 - .../zip-stream/node_modules/lodash/xor.js | 28 - .../zip-stream/node_modules/lodash/xorBy.js | 40 - .../zip-stream/node_modules/lodash/xorWith.js | 36 - .../zip-stream/node_modules/lodash/zip.js | 22 - .../node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../zip-stream/node_modules/lodash/zipWith.js | 31 - .../node_modules/readable-stream/.npmignore | 8 - .../node_modules/readable-stream/.travis.yml | 49 - .../node_modules/readable-stream/LICENSE | 18 - .../node_modules/readable-stream/README.md | 36 - .../readable-stream/doc/stream.md | 2015 -- .../doc/wg-meetings/2015-01-30.md | 60 - .../node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 75 - .../lib/_stream_passthrough.js | 26 - .../readable-stream/lib/_stream_readable.js | 937 - .../readable-stream/lib/_stream_transform.js | 180 - .../readable-stream/lib/_stream_writable.js | 526 - .../lib/internal/streams/BufferList.js | 64 - .../node_modules/readable-stream/package.json | 125 - .../readable-stream/passthrough.js | 1 - .../node_modules/readable-stream/readable.js | 16 - .../node_modules/readable-stream/transform.js | 1 - .../node_modules/readable-stream/writable.js | 1 - node_modules/zip-stream/package.json | 171 +- yarn.lock | 2298 +++ 10780 files changed, 186808 insertions(+), 442235 deletions(-) delete mode 120000 node_modules/.bin/babylon delete mode 120000 node_modules/.bin/dateformat delete mode 120000 node_modules/.bin/detect-indent delete mode 120000 node_modules/.bin/jade delete mode 120000 node_modules/.bin/jsesc delete mode 120000 node_modules/.bin/loose-envify delete mode 120000 node_modules/.bin/mkdirp delete mode 120000 node_modules/.bin/rimraf delete mode 120000 node_modules/.bin/strip-indent delete mode 120000 node_modules/.bin/user-home delete mode 120000 node_modules/.bin/which create mode 100644 node_modules/.yarn-integrity create mode 100644 node_modules/adm-zip/.idea/scopes/scope_settings.xml create mode 100644 node_modules/adm-zip/MIT-LICENSE.txt create mode 100644 node_modules/adm-zip/README.md create mode 100644 node_modules/adm-zip/adm-zip.js create mode 100644 node_modules/adm-zip/headers/entryHeader.js create mode 100644 node_modules/adm-zip/headers/index.js create mode 100644 node_modules/adm-zip/headers/mainHeader.js create mode 100644 node_modules/adm-zip/methods/deflater.js create mode 100644 node_modules/adm-zip/methods/index.js create mode 100644 node_modules/adm-zip/methods/inflater.js create mode 100644 node_modules/adm-zip/package.json create mode 100644 node_modules/adm-zip/test/assets/attributes_test.zip create mode 100644 node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt create mode 100644 node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt create mode 100644 node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt create mode 100644 node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt create mode 100644 node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt create mode 100644 node_modules/adm-zip/test/assets/attributes_test/blank file.txt create mode 100644 node_modules/adm-zip/test/assets/fast.zip create mode 100644 node_modules/adm-zip/test/assets/fastest.zip create mode 100644 node_modules/adm-zip/test/assets/linux_arc.zip create mode 100644 node_modules/adm-zip/test/assets/maximum.zip create mode 100644 node_modules/adm-zip/test/assets/normal.zip create mode 100644 node_modules/adm-zip/test/assets/store.zip create mode 100644 node_modules/adm-zip/test/assets/ultra.zip create mode 100644 node_modules/adm-zip/test/index.js create mode 100644 node_modules/adm-zip/util/constants.js create mode 100644 node_modules/adm-zip/util/errors.js create mode 100644 node_modules/adm-zip/util/fattr.js create mode 100644 node_modules/adm-zip/util/index.js create mode 100644 node_modules/adm-zip/util/utils.js create mode 100644 node_modules/adm-zip/zipEntry.js create mode 100644 node_modules/adm-zip/zipFile.js delete mode 100644 node_modules/archiver-utils/node_modules/isarray/package.json delete mode 100644 node_modules/archiver-utils/node_modules/lodash/LICENSE delete mode 100644 node_modules/archiver-utils/node_modules/lodash/README.md delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_Hash.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_getTag.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_toSource.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/chunk.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/compact.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/cond.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/core.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/core.min.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/countBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/create.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/drop.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/dropRight.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/every.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/fill.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/filter.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/find.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/findIndex.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/findLast.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/flatMap.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/flatten.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/forEach.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/forIn.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/forInRight.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/forOwn.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/groupBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/indexOf.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/initial.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isElement.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isError.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isFunction.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isNumber.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isString.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/join.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/keyBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/last.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/lodash.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/memoize.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/package.json delete mode 100644 node_modules/archiver-utils/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/pullAt.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/remove.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/reverse.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/slice.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/tail.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/takeRight.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/times.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/toArray.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/unionBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/unionWith.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/uniq.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/values.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/wrap.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/xorBy.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/xorWith.js delete mode 100644 node_modules/archiver-utils/node_modules/lodash/zipWith.js delete mode 100644 node_modules/archiver-utils/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/archiver-utils/node_modules/readable-stream/README.md delete mode 100644 node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/archiver-utils/node_modules/readable-stream/package.json delete mode 100644 node_modules/archiver-utils/node_modules/readable-stream/readable.js delete mode 100644 node_modules/archiver/node_modules/isarray/README.md delete mode 100644 node_modules/archiver/node_modules/isarray/index.js delete mode 100644 node_modules/archiver/node_modules/isarray/package.json delete mode 100644 node_modules/archiver/node_modules/lodash/LICENSE delete mode 100644 node_modules/archiver/node_modules/lodash/README.md delete mode 100644 node_modules/archiver/node_modules/lodash/_DataView.js delete mode 100644 node_modules/archiver/node_modules/lodash/_Hash.js delete mode 100644 node_modules/archiver/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/archiver/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/archiver/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/archiver/node_modules/lodash/_Map.js delete mode 100644 node_modules/archiver/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/archiver/node_modules/lodash/_Promise.js delete mode 100644 node_modules/archiver/node_modules/lodash/_Set.js delete mode 100644 node_modules/archiver/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/archiver/node_modules/lodash/_Stack.js delete mode 100644 node_modules/archiver/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/archiver/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/archiver/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/archiver/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/archiver/node_modules/lodash/_apply.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arraySample.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/archiver/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/archiver/node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/archiver/node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/archiver/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/archiver/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/_basePick.js delete mode 100644 node_modules/archiver/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/archiver/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseRest.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSample.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/archiver/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/archiver/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/archiver/node_modules/lodash/_castPath.js delete mode 100644 node_modules/archiver/node_modules/lodash/_castRest.js delete mode 100644 node_modules/archiver/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/archiver/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/archiver/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/archiver/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/archiver/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/archiver/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/archiver/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/archiver/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createBind.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createCtor.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createCurry.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createFind.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createOver.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createPartial.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createRange.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createRound.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/archiver/node_modules/lodash/_createWrap.js delete mode 100644 node_modules/archiver/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/archiver/node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/archiver/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/archiver/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/archiver/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/archiver/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/archiver/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/archiver/node_modules/lodash/_flatRest.js delete mode 100644 node_modules/archiver/node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getData.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getNative.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getTag.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getView.js delete mode 100644 node_modules/archiver/node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/archiver/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/archiver/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/archiver/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/archiver/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/archiver/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/archiver/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/archiver/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/archiver/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/archiver/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/archiver/node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/archiver/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/archiver/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/archiver/node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/archiver/node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/archiver/node_modules/lodash/_overArg.js delete mode 100644 node_modules/archiver/node_modules/lodash/_overRest.js delete mode 100644 node_modules/archiver/node_modules/lodash/_parent.js delete mode 100644 node_modules/archiver/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/archiver/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/archiver/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/archiver/node_modules/lodash/_realNames.js delete mode 100644 node_modules/archiver/node_modules/lodash/_reorder.js delete mode 100644 node_modules/archiver/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/archiver/node_modules/lodash/_root.js delete mode 100644 node_modules/archiver/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/archiver/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/archiver/node_modules/lodash/_setData.js delete mode 100644 node_modules/archiver/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/archiver/node_modules/lodash/_setToString.js delete mode 100644 node_modules/archiver/node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/archiver/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/archiver/node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/archiver/node_modules/lodash/_toKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/_toSource.js delete mode 100644 node_modules/archiver/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/archiver/node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/archiver/node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/archiver/node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/archiver/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/archiver/node_modules/lodash/add.js delete mode 100644 node_modules/archiver/node_modules/lodash/after.js delete mode 100644 node_modules/archiver/node_modules/lodash/array.js delete mode 100644 node_modules/archiver/node_modules/lodash/ary.js delete mode 100644 node_modules/archiver/node_modules/lodash/assign.js delete mode 100644 node_modules/archiver/node_modules/lodash/assignIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/assignWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/at.js delete mode 100644 node_modules/archiver/node_modules/lodash/attempt.js delete mode 100644 node_modules/archiver/node_modules/lodash/before.js delete mode 100644 node_modules/archiver/node_modules/lodash/bind.js delete mode 100644 node_modules/archiver/node_modules/lodash/bindAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/bindKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/camelCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/capitalize.js delete mode 100644 node_modules/archiver/node_modules/lodash/castArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/ceil.js delete mode 100644 node_modules/archiver/node_modules/lodash/chain.js delete mode 100644 node_modules/archiver/node_modules/lodash/chunk.js delete mode 100644 node_modules/archiver/node_modules/lodash/clamp.js delete mode 100644 node_modules/archiver/node_modules/lodash/clone.js delete mode 100644 node_modules/archiver/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/collection.js delete mode 100644 node_modules/archiver/node_modules/lodash/commit.js delete mode 100644 node_modules/archiver/node_modules/lodash/compact.js delete mode 100644 node_modules/archiver/node_modules/lodash/concat.js delete mode 100644 node_modules/archiver/node_modules/lodash/cond.js delete mode 100644 node_modules/archiver/node_modules/lodash/conforms.js delete mode 100644 node_modules/archiver/node_modules/lodash/conformsTo.js delete mode 100644 node_modules/archiver/node_modules/lodash/constant.js delete mode 100644 node_modules/archiver/node_modules/lodash/core.js delete mode 100644 node_modules/archiver/node_modules/lodash/core.min.js delete mode 100644 node_modules/archiver/node_modules/lodash/countBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/create.js delete mode 100644 node_modules/archiver/node_modules/lodash/curry.js delete mode 100644 node_modules/archiver/node_modules/lodash/curryRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/date.js delete mode 100644 node_modules/archiver/node_modules/lodash/debounce.js delete mode 100644 node_modules/archiver/node_modules/lodash/deburr.js delete mode 100644 node_modules/archiver/node_modules/lodash/defaultTo.js delete mode 100644 node_modules/archiver/node_modules/lodash/defaults.js delete mode 100644 node_modules/archiver/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/defer.js delete mode 100644 node_modules/archiver/node_modules/lodash/delay.js delete mode 100644 node_modules/archiver/node_modules/lodash/difference.js delete mode 100644 node_modules/archiver/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/divide.js delete mode 100644 node_modules/archiver/node_modules/lodash/drop.js delete mode 100644 node_modules/archiver/node_modules/lodash/dropRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/each.js delete mode 100644 node_modules/archiver/node_modules/lodash/eachRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/endsWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/entries.js delete mode 100644 node_modules/archiver/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/eq.js delete mode 100644 node_modules/archiver/node_modules/lodash/escape.js delete mode 100644 node_modules/archiver/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/archiver/node_modules/lodash/every.js delete mode 100644 node_modules/archiver/node_modules/lodash/extend.js delete mode 100644 node_modules/archiver/node_modules/lodash/extendWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fill.js delete mode 100644 node_modules/archiver/node_modules/lodash/filter.js delete mode 100644 node_modules/archiver/node_modules/lodash/find.js delete mode 100644 node_modules/archiver/node_modules/lodash/findIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/findKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/findLast.js delete mode 100644 node_modules/archiver/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/first.js delete mode 100644 node_modules/archiver/node_modules/lodash/flatMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/archiver/node_modules/lodash/flatten.js delete mode 100644 node_modules/archiver/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/archiver/node_modules/lodash/flip.js delete mode 100644 node_modules/archiver/node_modules/lodash/floor.js delete mode 100644 node_modules/archiver/node_modules/lodash/flow.js delete mode 100644 node_modules/archiver/node_modules/lodash/flowRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/forEach.js delete mode 100644 node_modules/archiver/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/forIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/forInRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/forOwn.js delete mode 100644 node_modules/archiver/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/F.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/T.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/__.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/add.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/after.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/all.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/always.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/any.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/array.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/at.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/before.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/create.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/date.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/each.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/every.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/find.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/first.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/function.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/get.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/has.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/head.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/init.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/join.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/last.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/map.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/math.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/max.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/method.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/min.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/next.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/now.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/number.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/object.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/once.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/over.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/path.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/property.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/props.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/random.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/range.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/result.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/round.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/set.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/size.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/some.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/split.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/string.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/take.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/template.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/times.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/union.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/update.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/util.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/value.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/values.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/where.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/without.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/words.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/archiver/node_modules/lodash/function.js delete mode 100644 node_modules/archiver/node_modules/lodash/functions.js delete mode 100644 node_modules/archiver/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/get.js delete mode 100644 node_modules/archiver/node_modules/lodash/groupBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/gt.js delete mode 100644 node_modules/archiver/node_modules/lodash/gte.js delete mode 100644 node_modules/archiver/node_modules/lodash/has.js delete mode 100644 node_modules/archiver/node_modules/lodash/hasIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/head.js delete mode 100644 node_modules/archiver/node_modules/lodash/identity.js delete mode 100644 node_modules/archiver/node_modules/lodash/inRange.js delete mode 100644 node_modules/archiver/node_modules/lodash/includes.js delete mode 100644 node_modules/archiver/node_modules/lodash/index.js delete mode 100644 node_modules/archiver/node_modules/lodash/indexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/initial.js delete mode 100644 node_modules/archiver/node_modules/lodash/intersection.js delete mode 100644 node_modules/archiver/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/invert.js delete mode 100644 node_modules/archiver/node_modules/lodash/invertBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/invoke.js delete mode 100644 node_modules/archiver/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/isArguments.js delete mode 100644 node_modules/archiver/node_modules/lodash/isArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/archiver/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/archiver/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/archiver/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/archiver/node_modules/lodash/isDate.js delete mode 100644 node_modules/archiver/node_modules/lodash/isElement.js delete mode 100644 node_modules/archiver/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/archiver/node_modules/lodash/isEqual.js delete mode 100644 node_modules/archiver/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/isError.js delete mode 100644 node_modules/archiver/node_modules/lodash/isFinite.js delete mode 100644 node_modules/archiver/node_modules/lodash/isFunction.js delete mode 100644 node_modules/archiver/node_modules/lodash/isInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/isLength.js delete mode 100644 node_modules/archiver/node_modules/lodash/isMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/isMatch.js delete mode 100644 node_modules/archiver/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/isNaN.js delete mode 100644 node_modules/archiver/node_modules/lodash/isNative.js delete mode 100644 node_modules/archiver/node_modules/lodash/isNil.js delete mode 100644 node_modules/archiver/node_modules/lodash/isNull.js delete mode 100644 node_modules/archiver/node_modules/lodash/isNumber.js delete mode 100644 node_modules/archiver/node_modules/lodash/isObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/archiver/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/archiver/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/isSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/isString.js delete mode 100644 node_modules/archiver/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/archiver/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/archiver/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/archiver/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/archiver/node_modules/lodash/iteratee.js delete mode 100644 node_modules/archiver/node_modules/lodash/join.js delete mode 100644 node_modules/archiver/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/keyBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/keys.js delete mode 100644 node_modules/archiver/node_modules/lodash/keysIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/lang.js delete mode 100644 node_modules/archiver/node_modules/lodash/last.js delete mode 100644 node_modules/archiver/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/lodash.js delete mode 100644 node_modules/archiver/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/archiver/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/archiver/node_modules/lodash/lt.js delete mode 100644 node_modules/archiver/node_modules/lodash/lte.js delete mode 100644 node_modules/archiver/node_modules/lodash/map.js delete mode 100644 node_modules/archiver/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/archiver/node_modules/lodash/mapValues.js delete mode 100644 node_modules/archiver/node_modules/lodash/matches.js delete mode 100644 node_modules/archiver/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/archiver/node_modules/lodash/math.js delete mode 100644 node_modules/archiver/node_modules/lodash/max.js delete mode 100644 node_modules/archiver/node_modules/lodash/maxBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/mean.js delete mode 100644 node_modules/archiver/node_modules/lodash/meanBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/memoize.js delete mode 100644 node_modules/archiver/node_modules/lodash/merge.js delete mode 100644 node_modules/archiver/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/method.js delete mode 100644 node_modules/archiver/node_modules/lodash/methodOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/min.js delete mode 100644 node_modules/archiver/node_modules/lodash/minBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/mixin.js delete mode 100644 node_modules/archiver/node_modules/lodash/multiply.js delete mode 100644 node_modules/archiver/node_modules/lodash/negate.js delete mode 100644 node_modules/archiver/node_modules/lodash/next.js delete mode 100644 node_modules/archiver/node_modules/lodash/noop.js delete mode 100644 node_modules/archiver/node_modules/lodash/now.js delete mode 100644 node_modules/archiver/node_modules/lodash/nth.js delete mode 100644 node_modules/archiver/node_modules/lodash/nthArg.js delete mode 100644 node_modules/archiver/node_modules/lodash/number.js delete mode 100644 node_modules/archiver/node_modules/lodash/object.js delete mode 100644 node_modules/archiver/node_modules/lodash/omit.js delete mode 100644 node_modules/archiver/node_modules/lodash/omitBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/once.js delete mode 100644 node_modules/archiver/node_modules/lodash/orderBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/over.js delete mode 100644 node_modules/archiver/node_modules/lodash/overArgs.js delete mode 100644 node_modules/archiver/node_modules/lodash/overEvery.js delete mode 100644 node_modules/archiver/node_modules/lodash/overSome.js delete mode 100644 node_modules/archiver/node_modules/lodash/package.json delete mode 100644 node_modules/archiver/node_modules/lodash/pad.js delete mode 100644 node_modules/archiver/node_modules/lodash/padEnd.js delete mode 100644 node_modules/archiver/node_modules/lodash/padStart.js delete mode 100644 node_modules/archiver/node_modules/lodash/parseInt.js delete mode 100644 node_modules/archiver/node_modules/lodash/partial.js delete mode 100644 node_modules/archiver/node_modules/lodash/partialRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/partition.js delete mode 100644 node_modules/archiver/node_modules/lodash/pick.js delete mode 100644 node_modules/archiver/node_modules/lodash/pickBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/plant.js delete mode 100644 node_modules/archiver/node_modules/lodash/property.js delete mode 100644 node_modules/archiver/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/pull.js delete mode 100644 node_modules/archiver/node_modules/lodash/pullAll.js delete mode 100644 node_modules/archiver/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/pullAt.js delete mode 100644 node_modules/archiver/node_modules/lodash/random.js delete mode 100644 node_modules/archiver/node_modules/lodash/range.js delete mode 100644 node_modules/archiver/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/rearg.js delete mode 100644 node_modules/archiver/node_modules/lodash/reduce.js delete mode 100644 node_modules/archiver/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/reject.js delete mode 100644 node_modules/archiver/node_modules/lodash/remove.js delete mode 100644 node_modules/archiver/node_modules/lodash/repeat.js delete mode 100644 node_modules/archiver/node_modules/lodash/replace.js delete mode 100644 node_modules/archiver/node_modules/lodash/rest.js delete mode 100644 node_modules/archiver/node_modules/lodash/result.js delete mode 100644 node_modules/archiver/node_modules/lodash/reverse.js delete mode 100644 node_modules/archiver/node_modules/lodash/round.js delete mode 100644 node_modules/archiver/node_modules/lodash/sample.js delete mode 100644 node_modules/archiver/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/archiver/node_modules/lodash/seq.js delete mode 100644 node_modules/archiver/node_modules/lodash/set.js delete mode 100644 node_modules/archiver/node_modules/lodash/setWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/shuffle.js delete mode 100644 node_modules/archiver/node_modules/lodash/size.js delete mode 100644 node_modules/archiver/node_modules/lodash/slice.js delete mode 100644 node_modules/archiver/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/some.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/archiver/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/split.js delete mode 100644 node_modules/archiver/node_modules/lodash/spread.js delete mode 100644 node_modules/archiver/node_modules/lodash/startCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/startsWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/string.js delete mode 100644 node_modules/archiver/node_modules/lodash/stubArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/archiver/node_modules/lodash/stubObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/stubString.js delete mode 100644 node_modules/archiver/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/archiver/node_modules/lodash/subtract.js delete mode 100644 node_modules/archiver/node_modules/lodash/sum.js delete mode 100644 node_modules/archiver/node_modules/lodash/sumBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/tail.js delete mode 100644 node_modules/archiver/node_modules/lodash/take.js delete mode 100644 node_modules/archiver/node_modules/lodash/takeRight.js delete mode 100644 node_modules/archiver/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/archiver/node_modules/lodash/tap.js delete mode 100644 node_modules/archiver/node_modules/lodash/template.js delete mode 100644 node_modules/archiver/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/archiver/node_modules/lodash/throttle.js delete mode 100644 node_modules/archiver/node_modules/lodash/thru.js delete mode 100644 node_modules/archiver/node_modules/lodash/times.js delete mode 100644 node_modules/archiver/node_modules/lodash/toArray.js delete mode 100644 node_modules/archiver/node_modules/lodash/toFinite.js delete mode 100644 node_modules/archiver/node_modules/lodash/toInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/toIterator.js delete mode 100644 node_modules/archiver/node_modules/lodash/toJSON.js delete mode 100644 node_modules/archiver/node_modules/lodash/toLength.js delete mode 100644 node_modules/archiver/node_modules/lodash/toLower.js delete mode 100644 node_modules/archiver/node_modules/lodash/toNumber.js delete mode 100644 node_modules/archiver/node_modules/lodash/toPairs.js delete mode 100644 node_modules/archiver/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/toPath.js delete mode 100644 node_modules/archiver/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/archiver/node_modules/lodash/toString.js delete mode 100644 node_modules/archiver/node_modules/lodash/toUpper.js delete mode 100644 node_modules/archiver/node_modules/lodash/transform.js delete mode 100644 node_modules/archiver/node_modules/lodash/trim.js delete mode 100644 node_modules/archiver/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/archiver/node_modules/lodash/trimStart.js delete mode 100644 node_modules/archiver/node_modules/lodash/truncate.js delete mode 100644 node_modules/archiver/node_modules/lodash/unary.js delete mode 100644 node_modules/archiver/node_modules/lodash/unescape.js delete mode 100644 node_modules/archiver/node_modules/lodash/union.js delete mode 100644 node_modules/archiver/node_modules/lodash/unionBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/unionWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/uniq.js delete mode 100644 node_modules/archiver/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/archiver/node_modules/lodash/unset.js delete mode 100644 node_modules/archiver/node_modules/lodash/unzip.js delete mode 100644 node_modules/archiver/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/update.js delete mode 100644 node_modules/archiver/node_modules/lodash/updateWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/upperCase.js delete mode 100644 node_modules/archiver/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/archiver/node_modules/lodash/util.js delete mode 100644 node_modules/archiver/node_modules/lodash/value.js delete mode 100644 node_modules/archiver/node_modules/lodash/valueOf.js delete mode 100644 node_modules/archiver/node_modules/lodash/values.js delete mode 100644 node_modules/archiver/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/archiver/node_modules/lodash/without.js delete mode 100644 node_modules/archiver/node_modules/lodash/words.js delete mode 100644 node_modules/archiver/node_modules/lodash/wrap.js delete mode 100644 node_modules/archiver/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/archiver/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/archiver/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/archiver/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/archiver/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/archiver/node_modules/lodash/xor.js delete mode 100644 node_modules/archiver/node_modules/lodash/xorBy.js delete mode 100644 node_modules/archiver/node_modules/lodash/xorWith.js delete mode 100644 node_modules/archiver/node_modules/lodash/zip.js delete mode 100644 node_modules/archiver/node_modules/lodash/zipObject.js delete mode 100644 node_modules/archiver/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/archiver/node_modules/lodash/zipWith.js delete mode 100644 node_modules/archiver/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/archiver/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/archiver/node_modules/readable-stream/README.md delete mode 100644 node_modules/archiver/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/archiver/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/archiver/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/archiver/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/archiver/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/archiver/node_modules/readable-stream/package.json delete mode 100644 node_modules/archiver/node_modules/readable-stream/readable.js create mode 100644 node_modules/async/internal/breakLoop.js delete mode 100644 node_modules/async/node_modules/lodash/LICENSE delete mode 100644 node_modules/async/node_modules/lodash/README.md delete mode 100644 node_modules/async/node_modules/lodash/_DataView.js delete mode 100644 node_modules/async/node_modules/lodash/_Hash.js delete mode 100644 node_modules/async/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/async/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/async/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/async/node_modules/lodash/_Map.js delete mode 100644 node_modules/async/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/async/node_modules/lodash/_Promise.js delete mode 100644 node_modules/async/node_modules/lodash/_Set.js delete mode 100644 node_modules/async/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/async/node_modules/lodash/_Stack.js delete mode 100644 node_modules/async/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/async/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/async/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/async/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/async/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/async/node_modules/lodash/_apply.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/async/node_modules/lodash/_arraySample.js delete mode 100644 node_modules/async/node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/async/node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/async/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/async/node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/async/node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/async/node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/async/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/async/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/async/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/async/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/async/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/async/node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/async/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/async/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/async/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/async/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/async/node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/async/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/async/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/async/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/async/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/async/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/async/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/async/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/async/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/async/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/async/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/async/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/async/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/async/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/async/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/async/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/async/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/async/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/async/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/async/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/async/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/async/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/async/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/async/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/async/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/async/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/async/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/async/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/async/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/async/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/async/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/async/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/async/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/async/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/async/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/async/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/async/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/async/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/async/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/async/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/async/node_modules/lodash/_basePick.js delete mode 100644 node_modules/async/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/async/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/async/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/async/node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/async/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/async/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/async/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/async/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/async/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/async/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/async/node_modules/lodash/_baseRest.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSample.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/async/node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/async/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/async/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/async/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/async/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/async/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/async/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/async/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/async/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/async/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/async/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/async/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/async/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/async/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/async/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/async/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/async/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/async/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/async/node_modules/lodash/_castPath.js delete mode 100644 node_modules/async/node_modules/lodash/_castRest.js delete mode 100644 node_modules/async/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/async/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/async/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/async/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/async/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/async/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/async/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/async/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/async/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/async/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/async/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/async/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/async/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/async/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/async/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/async/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/async/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/async/node_modules/lodash/_createBind.js delete mode 100644 node_modules/async/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/async/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/async/node_modules/lodash/_createCtor.js delete mode 100644 node_modules/async/node_modules/lodash/_createCurry.js delete mode 100644 node_modules/async/node_modules/lodash/_createFind.js delete mode 100644 node_modules/async/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/async/node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/async/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/async/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/async/node_modules/lodash/_createOver.js delete mode 100644 node_modules/async/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/async/node_modules/lodash/_createPartial.js delete mode 100644 node_modules/async/node_modules/lodash/_createRange.js delete mode 100644 node_modules/async/node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/async/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/async/node_modules/lodash/_createRound.js delete mode 100644 node_modules/async/node_modules/lodash/_createSet.js delete mode 100644 node_modules/async/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/async/node_modules/lodash/_createWrap.js delete mode 100644 node_modules/async/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/async/node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/async/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/async/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/async/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/async/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/async/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/async/node_modules/lodash/_flatRest.js delete mode 100644 node_modules/async/node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/async/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/async/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/async/node_modules/lodash/_getData.js delete mode 100644 node_modules/async/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/async/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/async/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/async/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/async/node_modules/lodash/_getNative.js delete mode 100644 node_modules/async/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/async/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/async/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/async/node_modules/lodash/_getTag.js delete mode 100644 node_modules/async/node_modules/lodash/_getValue.js delete mode 100644 node_modules/async/node_modules/lodash/_getView.js delete mode 100644 node_modules/async/node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/async/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/async/node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/async/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/async/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/async/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/async/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/async/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/async/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/async/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/async/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/async/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/async/node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/async/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/async/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/async/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/async/node_modules/lodash/_isKey.js delete mode 100644 node_modules/async/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/async/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/async/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/async/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/async/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/async/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/async/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/async/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/async/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/async/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/async/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/async/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/async/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/async/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/async/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/async/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/async/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/async/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/async/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/async/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/async/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/async/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/async/node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/async/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/async/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/async/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/async/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/async/node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/async/node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/async/node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/async/node_modules/lodash/_overArg.js delete mode 100644 node_modules/async/node_modules/lodash/_overRest.js delete mode 100644 node_modules/async/node_modules/lodash/_parent.js delete mode 100644 node_modules/async/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/async/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/async/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/async/node_modules/lodash/_realNames.js delete mode 100644 node_modules/async/node_modules/lodash/_reorder.js delete mode 100644 node_modules/async/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/async/node_modules/lodash/_root.js delete mode 100644 node_modules/async/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/async/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/async/node_modules/lodash/_setData.js delete mode 100644 node_modules/async/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/async/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/async/node_modules/lodash/_setToString.js delete mode 100644 node_modules/async/node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/async/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/async/node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/async/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/async/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/async/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/async/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/async/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/async/node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/async/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/async/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/async/node_modules/lodash/_toKey.js delete mode 100644 node_modules/async/node_modules/lodash/_toSource.js delete mode 100644 node_modules/async/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/async/node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/async/node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/async/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/async/node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/async/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/async/node_modules/lodash/add.js delete mode 100644 node_modules/async/node_modules/lodash/after.js delete mode 100644 node_modules/async/node_modules/lodash/array.js delete mode 100644 node_modules/async/node_modules/lodash/ary.js delete mode 100644 node_modules/async/node_modules/lodash/assign.js delete mode 100644 node_modules/async/node_modules/lodash/assignIn.js delete mode 100644 node_modules/async/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/async/node_modules/lodash/assignWith.js delete mode 100644 node_modules/async/node_modules/lodash/at.js delete mode 100644 node_modules/async/node_modules/lodash/attempt.js delete mode 100644 node_modules/async/node_modules/lodash/before.js delete mode 100644 node_modules/async/node_modules/lodash/bind.js delete mode 100644 node_modules/async/node_modules/lodash/bindAll.js delete mode 100644 node_modules/async/node_modules/lodash/bindKey.js delete mode 100644 node_modules/async/node_modules/lodash/camelCase.js delete mode 100644 node_modules/async/node_modules/lodash/capitalize.js delete mode 100644 node_modules/async/node_modules/lodash/castArray.js delete mode 100644 node_modules/async/node_modules/lodash/ceil.js delete mode 100644 node_modules/async/node_modules/lodash/chain.js delete mode 100644 node_modules/async/node_modules/lodash/chunk.js delete mode 100644 node_modules/async/node_modules/lodash/clamp.js delete mode 100644 node_modules/async/node_modules/lodash/clone.js delete mode 100644 node_modules/async/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/async/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/async/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/async/node_modules/lodash/collection.js delete mode 100644 node_modules/async/node_modules/lodash/commit.js delete mode 100644 node_modules/async/node_modules/lodash/compact.js delete mode 100644 node_modules/async/node_modules/lodash/concat.js delete mode 100644 node_modules/async/node_modules/lodash/cond.js delete mode 100644 node_modules/async/node_modules/lodash/conforms.js delete mode 100644 node_modules/async/node_modules/lodash/conformsTo.js delete mode 100644 node_modules/async/node_modules/lodash/constant.js delete mode 100644 node_modules/async/node_modules/lodash/core.js delete mode 100644 node_modules/async/node_modules/lodash/core.min.js delete mode 100644 node_modules/async/node_modules/lodash/countBy.js delete mode 100644 node_modules/async/node_modules/lodash/create.js delete mode 100644 node_modules/async/node_modules/lodash/curry.js delete mode 100644 node_modules/async/node_modules/lodash/curryRight.js delete mode 100644 node_modules/async/node_modules/lodash/date.js delete mode 100644 node_modules/async/node_modules/lodash/debounce.js delete mode 100644 node_modules/async/node_modules/lodash/deburr.js delete mode 100644 node_modules/async/node_modules/lodash/defaultTo.js delete mode 100644 node_modules/async/node_modules/lodash/defaults.js delete mode 100644 node_modules/async/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/async/node_modules/lodash/defer.js delete mode 100644 node_modules/async/node_modules/lodash/delay.js delete mode 100644 node_modules/async/node_modules/lodash/difference.js delete mode 100644 node_modules/async/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/async/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/async/node_modules/lodash/divide.js delete mode 100644 node_modules/async/node_modules/lodash/drop.js delete mode 100644 node_modules/async/node_modules/lodash/dropRight.js delete mode 100644 node_modules/async/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/async/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/async/node_modules/lodash/each.js delete mode 100644 node_modules/async/node_modules/lodash/eachRight.js delete mode 100644 node_modules/async/node_modules/lodash/endsWith.js delete mode 100644 node_modules/async/node_modules/lodash/entries.js delete mode 100644 node_modules/async/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/async/node_modules/lodash/eq.js delete mode 100644 node_modules/async/node_modules/lodash/escape.js delete mode 100644 node_modules/async/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/async/node_modules/lodash/every.js delete mode 100644 node_modules/async/node_modules/lodash/extend.js delete mode 100644 node_modules/async/node_modules/lodash/extendWith.js delete mode 100644 node_modules/async/node_modules/lodash/fill.js delete mode 100644 node_modules/async/node_modules/lodash/filter.js delete mode 100644 node_modules/async/node_modules/lodash/find.js delete mode 100644 node_modules/async/node_modules/lodash/findIndex.js delete mode 100644 node_modules/async/node_modules/lodash/findKey.js delete mode 100644 node_modules/async/node_modules/lodash/findLast.js delete mode 100644 node_modules/async/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/async/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/async/node_modules/lodash/first.js delete mode 100644 node_modules/async/node_modules/lodash/flatMap.js delete mode 100644 node_modules/async/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/async/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/async/node_modules/lodash/flatten.js delete mode 100644 node_modules/async/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/async/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/async/node_modules/lodash/flip.js delete mode 100644 node_modules/async/node_modules/lodash/floor.js delete mode 100644 node_modules/async/node_modules/lodash/flow.js delete mode 100644 node_modules/async/node_modules/lodash/flowRight.js delete mode 100644 node_modules/async/node_modules/lodash/forEach.js delete mode 100644 node_modules/async/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/async/node_modules/lodash/forIn.js delete mode 100644 node_modules/async/node_modules/lodash/forInRight.js delete mode 100644 node_modules/async/node_modules/lodash/forOwn.js delete mode 100644 node_modules/async/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp.js delete mode 100644 node_modules/async/node_modules/lodash/fp/F.js delete mode 100644 node_modules/async/node_modules/lodash/fp/T.js delete mode 100644 node_modules/async/node_modules/lodash/fp/__.js delete mode 100644 node_modules/async/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/async/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/async/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/async/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/async/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/async/node_modules/lodash/fp/add.js delete mode 100644 node_modules/async/node_modules/lodash/fp/after.js delete mode 100644 node_modules/async/node_modules/lodash/fp/all.js delete mode 100644 node_modules/async/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/async/node_modules/lodash/fp/always.js delete mode 100644 node_modules/async/node_modules/lodash/fp/any.js delete mode 100644 node_modules/async/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/async/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/async/node_modules/lodash/fp/array.js delete mode 100644 node_modules/async/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/async/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/async/node_modules/lodash/fp/at.js delete mode 100644 node_modules/async/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/async/node_modules/lodash/fp/before.js delete mode 100644 node_modules/async/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/async/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/async/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/async/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/async/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/async/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/async/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/async/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/async/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/async/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/async/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/async/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/async/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/async/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/async/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/async/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/async/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/async/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/async/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/async/node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/async/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/async/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/async/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/async/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/create.js delete mode 100644 node_modules/async/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/async/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/async/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/async/node_modules/lodash/fp/date.js delete mode 100644 node_modules/async/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/async/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/async/node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/async/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/async/node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/async/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/async/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/async/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/async/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/async/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/async/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/async/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/async/node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/async/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/async/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/async/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/async/node_modules/lodash/fp/each.js delete mode 100644 node_modules/async/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/async/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/async/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/async/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/async/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/async/node_modules/lodash/fp/every.js delete mode 100644 node_modules/async/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/async/node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/async/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/async/node_modules/lodash/fp/find.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/async/node_modules/lodash/fp/first.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/async/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/async/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/async/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/async/node_modules/lodash/fp/function.js delete mode 100644 node_modules/async/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/async/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/get.js delete mode 100644 node_modules/async/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/async/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/async/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/async/node_modules/lodash/fp/has.js delete mode 100644 node_modules/async/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/head.js delete mode 100644 node_modules/async/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/async/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/async/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/async/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/async/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/async/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/init.js delete mode 100644 node_modules/async/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/async/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/async/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/async/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/async/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/async/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/async/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/async/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/async/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/async/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/async/node_modules/lodash/fp/join.js delete mode 100644 node_modules/async/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/async/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/async/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/async/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/async/node_modules/lodash/fp/last.js delete mode 100644 node_modules/async/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/async/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/async/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/async/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/async/node_modules/lodash/fp/map.js delete mode 100644 node_modules/async/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/async/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/async/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/async/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/async/node_modules/lodash/fp/math.js delete mode 100644 node_modules/async/node_modules/lodash/fp/max.js delete mode 100644 node_modules/async/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/async/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/async/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/async/node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/method.js delete mode 100644 node_modules/async/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/async/node_modules/lodash/fp/min.js delete mode 100644 node_modules/async/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/async/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/async/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/async/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/async/node_modules/lodash/fp/next.js delete mode 100644 node_modules/async/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/async/node_modules/lodash/fp/now.js delete mode 100644 node_modules/async/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/async/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/async/node_modules/lodash/fp/number.js delete mode 100644 node_modules/async/node_modules/lodash/fp/object.js delete mode 100644 node_modules/async/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/async/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/once.js delete mode 100644 node_modules/async/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/over.js delete mode 100644 node_modules/async/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/async/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/async/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/async/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/async/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/async/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/async/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/async/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/async/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/async/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/async/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/async/node_modules/lodash/fp/path.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/async/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/async/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/async/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/async/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/async/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/async/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/async/node_modules/lodash/fp/property.js delete mode 100644 node_modules/async/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/async/node_modules/lodash/fp/props.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/async/node_modules/lodash/fp/random.js delete mode 100644 node_modules/async/node_modules/lodash/fp/range.js delete mode 100644 node_modules/async/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/async/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/async/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/async/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/async/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/async/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/async/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/async/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/async/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/result.js delete mode 100644 node_modules/async/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/async/node_modules/lodash/fp/round.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/async/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/async/node_modules/lodash/fp/set.js delete mode 100644 node_modules/async/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/async/node_modules/lodash/fp/size.js delete mode 100644 node_modules/async/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/async/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/async/node_modules/lodash/fp/some.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/split.js delete mode 100644 node_modules/async/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/async/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/async/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/async/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/string.js delete mode 100644 node_modules/async/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/async/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/async/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/async/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/async/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/async/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/async/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/async/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/async/node_modules/lodash/fp/take.js delete mode 100644 node_modules/async/node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/async/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/async/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/async/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/async/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/async/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/async/node_modules/lodash/fp/template.js delete mode 100644 node_modules/async/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/async/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/async/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/async/node_modules/lodash/fp/times.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/async/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/async/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/async/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/async/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/async/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/async/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/async/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/async/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/async/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/async/node_modules/lodash/fp/union.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/async/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/async/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/update.js delete mode 100644 node_modules/async/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/async/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/async/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/util.js delete mode 100644 node_modules/async/node_modules/lodash/fp/value.js delete mode 100644 node_modules/async/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/async/node_modules/lodash/fp/values.js delete mode 100644 node_modules/async/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/async/node_modules/lodash/fp/where.js delete mode 100644 node_modules/async/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/async/node_modules/lodash/fp/without.js delete mode 100644 node_modules/async/node_modules/lodash/fp/words.js delete mode 100644 node_modules/async/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/async/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/async/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/async/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/async/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/async/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/async/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/async/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/async/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/async/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/async/node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/async/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/async/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/async/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/async/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/async/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/async/node_modules/lodash/function.js delete mode 100644 node_modules/async/node_modules/lodash/functions.js delete mode 100644 node_modules/async/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/async/node_modules/lodash/get.js delete mode 100644 node_modules/async/node_modules/lodash/groupBy.js delete mode 100644 node_modules/async/node_modules/lodash/gt.js delete mode 100644 node_modules/async/node_modules/lodash/gte.js delete mode 100644 node_modules/async/node_modules/lodash/has.js delete mode 100644 node_modules/async/node_modules/lodash/hasIn.js delete mode 100644 node_modules/async/node_modules/lodash/head.js delete mode 100644 node_modules/async/node_modules/lodash/identity.js delete mode 100644 node_modules/async/node_modules/lodash/inRange.js delete mode 100644 node_modules/async/node_modules/lodash/includes.js delete mode 100644 node_modules/async/node_modules/lodash/index.js delete mode 100644 node_modules/async/node_modules/lodash/indexOf.js delete mode 100644 node_modules/async/node_modules/lodash/initial.js delete mode 100644 node_modules/async/node_modules/lodash/intersection.js delete mode 100644 node_modules/async/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/async/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/async/node_modules/lodash/invert.js delete mode 100644 node_modules/async/node_modules/lodash/invertBy.js delete mode 100644 node_modules/async/node_modules/lodash/invoke.js delete mode 100644 node_modules/async/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/async/node_modules/lodash/isArguments.js delete mode 100644 node_modules/async/node_modules/lodash/isArray.js delete mode 100644 node_modules/async/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/async/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/async/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/async/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/async/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/async/node_modules/lodash/isDate.js delete mode 100644 node_modules/async/node_modules/lodash/isElement.js delete mode 100644 node_modules/async/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/async/node_modules/lodash/isEqual.js delete mode 100644 node_modules/async/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/async/node_modules/lodash/isError.js delete mode 100644 node_modules/async/node_modules/lodash/isFinite.js delete mode 100644 node_modules/async/node_modules/lodash/isFunction.js delete mode 100644 node_modules/async/node_modules/lodash/isInteger.js delete mode 100644 node_modules/async/node_modules/lodash/isLength.js delete mode 100644 node_modules/async/node_modules/lodash/isMap.js delete mode 100644 node_modules/async/node_modules/lodash/isMatch.js delete mode 100644 node_modules/async/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/async/node_modules/lodash/isNaN.js delete mode 100644 node_modules/async/node_modules/lodash/isNative.js delete mode 100644 node_modules/async/node_modules/lodash/isNil.js delete mode 100644 node_modules/async/node_modules/lodash/isNull.js delete mode 100644 node_modules/async/node_modules/lodash/isNumber.js delete mode 100644 node_modules/async/node_modules/lodash/isObject.js delete mode 100644 node_modules/async/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/async/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/async/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/async/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/async/node_modules/lodash/isSet.js delete mode 100644 node_modules/async/node_modules/lodash/isString.js delete mode 100644 node_modules/async/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/async/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/async/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/async/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/async/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/async/node_modules/lodash/iteratee.js delete mode 100644 node_modules/async/node_modules/lodash/join.js delete mode 100644 node_modules/async/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/async/node_modules/lodash/keyBy.js delete mode 100644 node_modules/async/node_modules/lodash/keys.js delete mode 100644 node_modules/async/node_modules/lodash/keysIn.js delete mode 100644 node_modules/async/node_modules/lodash/lang.js delete mode 100644 node_modules/async/node_modules/lodash/last.js delete mode 100644 node_modules/async/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/lodash.js delete mode 100644 node_modules/async/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/async/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/async/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/async/node_modules/lodash/lt.js delete mode 100644 node_modules/async/node_modules/lodash/lte.js delete mode 100644 node_modules/async/node_modules/lodash/map.js delete mode 100644 node_modules/async/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/async/node_modules/lodash/mapValues.js delete mode 100644 node_modules/async/node_modules/lodash/matches.js delete mode 100644 node_modules/async/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/async/node_modules/lodash/math.js delete mode 100644 node_modules/async/node_modules/lodash/max.js delete mode 100644 node_modules/async/node_modules/lodash/maxBy.js delete mode 100644 node_modules/async/node_modules/lodash/mean.js delete mode 100644 node_modules/async/node_modules/lodash/meanBy.js delete mode 100644 node_modules/async/node_modules/lodash/memoize.js delete mode 100644 node_modules/async/node_modules/lodash/merge.js delete mode 100644 node_modules/async/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/async/node_modules/lodash/method.js delete mode 100644 node_modules/async/node_modules/lodash/methodOf.js delete mode 100644 node_modules/async/node_modules/lodash/min.js delete mode 100644 node_modules/async/node_modules/lodash/minBy.js delete mode 100644 node_modules/async/node_modules/lodash/mixin.js delete mode 100644 node_modules/async/node_modules/lodash/multiply.js delete mode 100644 node_modules/async/node_modules/lodash/negate.js delete mode 100644 node_modules/async/node_modules/lodash/next.js delete mode 100644 node_modules/async/node_modules/lodash/noop.js delete mode 100644 node_modules/async/node_modules/lodash/now.js delete mode 100644 node_modules/async/node_modules/lodash/nth.js delete mode 100644 node_modules/async/node_modules/lodash/nthArg.js delete mode 100644 node_modules/async/node_modules/lodash/number.js delete mode 100644 node_modules/async/node_modules/lodash/object.js delete mode 100644 node_modules/async/node_modules/lodash/omit.js delete mode 100644 node_modules/async/node_modules/lodash/omitBy.js delete mode 100644 node_modules/async/node_modules/lodash/once.js delete mode 100644 node_modules/async/node_modules/lodash/orderBy.js delete mode 100644 node_modules/async/node_modules/lodash/over.js delete mode 100644 node_modules/async/node_modules/lodash/overArgs.js delete mode 100644 node_modules/async/node_modules/lodash/overEvery.js delete mode 100644 node_modules/async/node_modules/lodash/overSome.js delete mode 100644 node_modules/async/node_modules/lodash/package.json delete mode 100644 node_modules/async/node_modules/lodash/pad.js delete mode 100644 node_modules/async/node_modules/lodash/padEnd.js delete mode 100644 node_modules/async/node_modules/lodash/padStart.js delete mode 100644 node_modules/async/node_modules/lodash/parseInt.js delete mode 100644 node_modules/async/node_modules/lodash/partial.js delete mode 100644 node_modules/async/node_modules/lodash/partialRight.js delete mode 100644 node_modules/async/node_modules/lodash/partition.js delete mode 100644 node_modules/async/node_modules/lodash/pick.js delete mode 100644 node_modules/async/node_modules/lodash/pickBy.js delete mode 100644 node_modules/async/node_modules/lodash/plant.js delete mode 100644 node_modules/async/node_modules/lodash/property.js delete mode 100644 node_modules/async/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/async/node_modules/lodash/pull.js delete mode 100644 node_modules/async/node_modules/lodash/pullAll.js delete mode 100644 node_modules/async/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/async/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/async/node_modules/lodash/pullAt.js delete mode 100644 node_modules/async/node_modules/lodash/random.js delete mode 100644 node_modules/async/node_modules/lodash/range.js delete mode 100644 node_modules/async/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/async/node_modules/lodash/rearg.js delete mode 100644 node_modules/async/node_modules/lodash/reduce.js delete mode 100644 node_modules/async/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/async/node_modules/lodash/reject.js delete mode 100644 node_modules/async/node_modules/lodash/remove.js delete mode 100644 node_modules/async/node_modules/lodash/repeat.js delete mode 100644 node_modules/async/node_modules/lodash/replace.js delete mode 100644 node_modules/async/node_modules/lodash/rest.js delete mode 100644 node_modules/async/node_modules/lodash/result.js delete mode 100644 node_modules/async/node_modules/lodash/reverse.js delete mode 100644 node_modules/async/node_modules/lodash/round.js delete mode 100644 node_modules/async/node_modules/lodash/sample.js delete mode 100644 node_modules/async/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/async/node_modules/lodash/seq.js delete mode 100644 node_modules/async/node_modules/lodash/set.js delete mode 100644 node_modules/async/node_modules/lodash/setWith.js delete mode 100644 node_modules/async/node_modules/lodash/shuffle.js delete mode 100644 node_modules/async/node_modules/lodash/size.js delete mode 100644 node_modules/async/node_modules/lodash/slice.js delete mode 100644 node_modules/async/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/async/node_modules/lodash/some.js delete mode 100644 node_modules/async/node_modules/lodash/sortBy.js delete mode 100644 node_modules/async/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/async/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/async/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/async/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/async/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/async/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/async/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/async/node_modules/lodash/split.js delete mode 100644 node_modules/async/node_modules/lodash/spread.js delete mode 100644 node_modules/async/node_modules/lodash/startCase.js delete mode 100644 node_modules/async/node_modules/lodash/startsWith.js delete mode 100644 node_modules/async/node_modules/lodash/string.js delete mode 100644 node_modules/async/node_modules/lodash/stubArray.js delete mode 100644 node_modules/async/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/async/node_modules/lodash/stubObject.js delete mode 100644 node_modules/async/node_modules/lodash/stubString.js delete mode 100644 node_modules/async/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/async/node_modules/lodash/subtract.js delete mode 100644 node_modules/async/node_modules/lodash/sum.js delete mode 100644 node_modules/async/node_modules/lodash/sumBy.js delete mode 100644 node_modules/async/node_modules/lodash/tail.js delete mode 100644 node_modules/async/node_modules/lodash/take.js delete mode 100644 node_modules/async/node_modules/lodash/takeRight.js delete mode 100644 node_modules/async/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/async/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/async/node_modules/lodash/tap.js delete mode 100644 node_modules/async/node_modules/lodash/template.js delete mode 100644 node_modules/async/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/async/node_modules/lodash/throttle.js delete mode 100644 node_modules/async/node_modules/lodash/thru.js delete mode 100644 node_modules/async/node_modules/lodash/times.js delete mode 100644 node_modules/async/node_modules/lodash/toArray.js delete mode 100644 node_modules/async/node_modules/lodash/toFinite.js delete mode 100644 node_modules/async/node_modules/lodash/toInteger.js delete mode 100644 node_modules/async/node_modules/lodash/toIterator.js delete mode 100644 node_modules/async/node_modules/lodash/toJSON.js delete mode 100644 node_modules/async/node_modules/lodash/toLength.js delete mode 100644 node_modules/async/node_modules/lodash/toLower.js delete mode 100644 node_modules/async/node_modules/lodash/toNumber.js delete mode 100644 node_modules/async/node_modules/lodash/toPairs.js delete mode 100644 node_modules/async/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/async/node_modules/lodash/toPath.js delete mode 100644 node_modules/async/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/async/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/async/node_modules/lodash/toString.js delete mode 100644 node_modules/async/node_modules/lodash/toUpper.js delete mode 100644 node_modules/async/node_modules/lodash/transform.js delete mode 100644 node_modules/async/node_modules/lodash/trim.js delete mode 100644 node_modules/async/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/async/node_modules/lodash/trimStart.js delete mode 100644 node_modules/async/node_modules/lodash/truncate.js delete mode 100644 node_modules/async/node_modules/lodash/unary.js delete mode 100644 node_modules/async/node_modules/lodash/unescape.js delete mode 100644 node_modules/async/node_modules/lodash/union.js delete mode 100644 node_modules/async/node_modules/lodash/unionBy.js delete mode 100644 node_modules/async/node_modules/lodash/unionWith.js delete mode 100644 node_modules/async/node_modules/lodash/uniq.js delete mode 100644 node_modules/async/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/async/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/async/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/async/node_modules/lodash/unset.js delete mode 100644 node_modules/async/node_modules/lodash/unzip.js delete mode 100644 node_modules/async/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/async/node_modules/lodash/update.js delete mode 100644 node_modules/async/node_modules/lodash/updateWith.js delete mode 100644 node_modules/async/node_modules/lodash/upperCase.js delete mode 100644 node_modules/async/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/async/node_modules/lodash/util.js delete mode 100644 node_modules/async/node_modules/lodash/value.js delete mode 100644 node_modules/async/node_modules/lodash/valueOf.js delete mode 100644 node_modules/async/node_modules/lodash/values.js delete mode 100644 node_modules/async/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/async/node_modules/lodash/without.js delete mode 100644 node_modules/async/node_modules/lodash/words.js delete mode 100644 node_modules/async/node_modules/lodash/wrap.js delete mode 100644 node_modules/async/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/async/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/async/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/async/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/async/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/async/node_modules/lodash/xor.js delete mode 100644 node_modules/async/node_modules/lodash/xorBy.js delete mode 100644 node_modules/async/node_modules/lodash/xorWith.js delete mode 100644 node_modules/async/node_modules/lodash/zip.js delete mode 100644 node_modules/async/node_modules/lodash/zipObject.js delete mode 100644 node_modules/async/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/async/node_modules/lodash/zipWith.js create mode 120000 node_modules/babel-generator/node_modules/.bin/jsesc delete mode 100644 node_modules/babel-generator/node_modules/lodash/LICENSE delete mode 100644 node_modules/babel-generator/node_modules/lodash/README.md delete mode 100644 node_modules/babel-generator/node_modules/lodash/_DataView.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_Hash.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_Map.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_Promise.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_Set.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_Stack.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_apply.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arraySample.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_basePick.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseRest.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSample.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_castPath.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_castRest.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createBind.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createCtor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createCurry.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createFind.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createOver.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createPartial.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createRange.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createRound.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_createWrap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_flatRest.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getData.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getNative.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getTag.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getView.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_overArg.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_overRest.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_parent.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_realNames.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_reorder.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_root.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_setData.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_setToString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_toKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_toSource.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/add.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/after.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/array.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/ary.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/assign.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/assignIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/assignWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/at.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/attempt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/before.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/bind.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/bindAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/bindKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/camelCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/capitalize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/castArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/ceil.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/chain.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/chunk.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/clamp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/clone.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/collection.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/commit.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/compact.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/concat.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/cond.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/conforms.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/conformsTo.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/constant.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/core.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/core.min.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/countBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/create.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/curry.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/curryRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/date.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/debounce.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/deburr.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/defaultTo.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/defaults.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/defer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/delay.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/difference.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/divide.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/drop.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/dropRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/each.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/eachRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/endsWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/entries.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/eq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/escape.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/every.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/extend.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/extendWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fill.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/filter.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/find.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/findIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/findKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/findLast.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/first.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flatMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flatten.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flip.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/floor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flow.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/flowRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/forEach.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/forIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/forInRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/forOwn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/F.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/T.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/__.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/add.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/after.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/all.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/always.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/any.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/array.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/at.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/before.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/create.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/date.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/each.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/every.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/find.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/first.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/function.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/get.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/has.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/head.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/init.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/join.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/last.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/map.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/math.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/max.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/method.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/min.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/next.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/now.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/number.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/object.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/once.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/over.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/path.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/property.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/props.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/random.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/range.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/result.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/round.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/set.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/size.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/some.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/split.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/string.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/take.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/template.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/times.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/union.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/update.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/util.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/value.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/values.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/where.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/without.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/words.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/function.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/functions.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/get.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/groupBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/gt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/gte.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/has.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/hasIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/head.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/identity.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/inRange.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/includes.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/index.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/indexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/initial.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/intersection.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/invert.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/invertBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/invoke.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isArguments.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isDate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isElement.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isEqual.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isError.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isFinite.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isFunction.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isLength.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isMatch.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isNaN.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isNative.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isNil.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isNull.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isNumber.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/iteratee.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/join.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/keyBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/keys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/keysIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lang.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/last.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lodash.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/lte.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/map.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/mapValues.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/matches.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/math.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/max.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/maxBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/mean.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/meanBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/memoize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/merge.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/method.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/methodOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/min.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/minBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/mixin.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/multiply.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/negate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/next.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/noop.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/now.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/nth.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/nthArg.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/number.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/object.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/omit.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/omitBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/once.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/orderBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/over.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/overArgs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/overEvery.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/overSome.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/package.json delete mode 100644 node_modules/babel-generator/node_modules/lodash/pad.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/padEnd.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/padStart.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/parseInt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/partial.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/partialRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/partition.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/pick.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/pickBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/plant.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/property.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/pull.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/pullAll.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/pullAt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/random.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/range.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/rearg.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/reduce.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/reject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/remove.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/repeat.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/replace.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/rest.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/result.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/reverse.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/round.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sample.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/seq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/set.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/setWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/shuffle.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/size.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/slice.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/some.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/split.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/spread.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/startCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/startsWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/string.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/stubArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/stubObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/stubString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/subtract.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sum.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/sumBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/tail.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/take.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/takeRight.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/tap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/template.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/throttle.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/thru.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/times.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toArray.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toFinite.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toIterator.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toJSON.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toLength.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toLower.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toNumber.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toPairs.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toPath.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toString.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/toUpper.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/transform.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/trim.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/trimStart.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/truncate.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/unary.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/unescape.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/union.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/unionBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/unionWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/uniq.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/unset.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/unzip.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/update.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/updateWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/upperCase.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/util.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/value.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/valueOf.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/values.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/without.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/words.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/wrap.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/xor.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/xorBy.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/xorWith.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/zip.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/zipObject.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/babel-generator/node_modules/lodash/zipWith.js create mode 100644 node_modules/babel-runtime/helpers/_async-generator-delegate.js create mode 100644 node_modules/babel-runtime/helpers/_async-generator.js create mode 100644 node_modules/babel-runtime/helpers/_async-iterator.js create mode 100644 node_modules/babel-runtime/helpers/async-generator-delegate.js create mode 100644 node_modules/babel-runtime/helpers/async-generator.js create mode 100644 node_modules/babel-runtime/helpers/async-iterator.js create mode 100644 node_modules/babel-runtime/helpers/asyncGenerator.js create mode 100644 node_modules/babel-runtime/helpers/asyncGeneratorDelegate.js create mode 100644 node_modules/babel-runtime/helpers/asyncIterator.js create mode 120000 node_modules/babel-template/node_modules/.bin/babylon delete mode 100644 node_modules/babel-template/node_modules/lodash/LICENSE delete mode 100644 node_modules/babel-template/node_modules/lodash/README.md delete mode 100644 node_modules/babel-template/node_modules/lodash/_DataView.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_Hash.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_Map.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_Promise.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_Set.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_Stack.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_apply.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arraySample.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_basePick.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseRest.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSample.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_castPath.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_castRest.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createBind.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createCtor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createCurry.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createFind.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createOver.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createPartial.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createRange.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createRound.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_createWrap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_flatRest.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getData.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getNative.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getTag.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getView.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_overArg.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_overRest.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_parent.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_realNames.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_reorder.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_root.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_setData.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_setToString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_toKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_toSource.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/babel-template/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/babel-template/node_modules/lodash/add.js delete mode 100644 node_modules/babel-template/node_modules/lodash/after.js delete mode 100644 node_modules/babel-template/node_modules/lodash/array.js delete mode 100644 node_modules/babel-template/node_modules/lodash/ary.js delete mode 100644 node_modules/babel-template/node_modules/lodash/assign.js delete mode 100644 node_modules/babel-template/node_modules/lodash/assignIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/assignWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/at.js delete mode 100644 node_modules/babel-template/node_modules/lodash/attempt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/before.js delete mode 100644 node_modules/babel-template/node_modules/lodash/bind.js delete mode 100644 node_modules/babel-template/node_modules/lodash/bindAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/bindKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/camelCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/capitalize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/castArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/ceil.js delete mode 100644 node_modules/babel-template/node_modules/lodash/chain.js delete mode 100644 node_modules/babel-template/node_modules/lodash/chunk.js delete mode 100644 node_modules/babel-template/node_modules/lodash/clamp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/clone.js delete mode 100644 node_modules/babel-template/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/collection.js delete mode 100644 node_modules/babel-template/node_modules/lodash/commit.js delete mode 100644 node_modules/babel-template/node_modules/lodash/compact.js delete mode 100644 node_modules/babel-template/node_modules/lodash/concat.js delete mode 100644 node_modules/babel-template/node_modules/lodash/cond.js delete mode 100644 node_modules/babel-template/node_modules/lodash/conforms.js delete mode 100644 node_modules/babel-template/node_modules/lodash/conformsTo.js delete mode 100644 node_modules/babel-template/node_modules/lodash/constant.js delete mode 100644 node_modules/babel-template/node_modules/lodash/core.js delete mode 100644 node_modules/babel-template/node_modules/lodash/core.min.js delete mode 100644 node_modules/babel-template/node_modules/lodash/countBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/create.js delete mode 100644 node_modules/babel-template/node_modules/lodash/curry.js delete mode 100644 node_modules/babel-template/node_modules/lodash/curryRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/date.js delete mode 100644 node_modules/babel-template/node_modules/lodash/debounce.js delete mode 100644 node_modules/babel-template/node_modules/lodash/deburr.js delete mode 100644 node_modules/babel-template/node_modules/lodash/defaultTo.js delete mode 100644 node_modules/babel-template/node_modules/lodash/defaults.js delete mode 100644 node_modules/babel-template/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/defer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/delay.js delete mode 100644 node_modules/babel-template/node_modules/lodash/difference.js delete mode 100644 node_modules/babel-template/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/divide.js delete mode 100644 node_modules/babel-template/node_modules/lodash/drop.js delete mode 100644 node_modules/babel-template/node_modules/lodash/dropRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/each.js delete mode 100644 node_modules/babel-template/node_modules/lodash/eachRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/endsWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/entries.js delete mode 100644 node_modules/babel-template/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/eq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/escape.js delete mode 100644 node_modules/babel-template/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/every.js delete mode 100644 node_modules/babel-template/node_modules/lodash/extend.js delete mode 100644 node_modules/babel-template/node_modules/lodash/extendWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fill.js delete mode 100644 node_modules/babel-template/node_modules/lodash/filter.js delete mode 100644 node_modules/babel-template/node_modules/lodash/find.js delete mode 100644 node_modules/babel-template/node_modules/lodash/findIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/findKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/findLast.js delete mode 100644 node_modules/babel-template/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/first.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flatMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flatten.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flip.js delete mode 100644 node_modules/babel-template/node_modules/lodash/floor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flow.js delete mode 100644 node_modules/babel-template/node_modules/lodash/flowRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/forEach.js delete mode 100644 node_modules/babel-template/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/forIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/forInRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/forOwn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/F.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/T.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/__.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/add.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/after.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/all.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/always.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/any.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/array.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/at.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/before.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/create.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/date.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/each.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/every.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/find.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/first.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/function.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/get.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/has.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/head.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/init.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/join.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/last.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/map.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/math.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/max.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/method.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/min.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/next.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/now.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/number.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/object.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/once.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/over.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/path.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/property.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/props.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/random.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/range.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/result.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/round.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/set.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/size.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/some.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/split.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/string.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/take.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/template.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/times.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/union.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/update.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/util.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/value.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/values.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/where.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/without.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/words.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/function.js delete mode 100644 node_modules/babel-template/node_modules/lodash/functions.js delete mode 100644 node_modules/babel-template/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/get.js delete mode 100644 node_modules/babel-template/node_modules/lodash/groupBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/gt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/gte.js delete mode 100644 node_modules/babel-template/node_modules/lodash/has.js delete mode 100644 node_modules/babel-template/node_modules/lodash/hasIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/head.js delete mode 100644 node_modules/babel-template/node_modules/lodash/identity.js delete mode 100644 node_modules/babel-template/node_modules/lodash/inRange.js delete mode 100644 node_modules/babel-template/node_modules/lodash/includes.js delete mode 100644 node_modules/babel-template/node_modules/lodash/index.js delete mode 100644 node_modules/babel-template/node_modules/lodash/indexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/initial.js delete mode 100644 node_modules/babel-template/node_modules/lodash/intersection.js delete mode 100644 node_modules/babel-template/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/invert.js delete mode 100644 node_modules/babel-template/node_modules/lodash/invertBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/invoke.js delete mode 100644 node_modules/babel-template/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isArguments.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isDate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isElement.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isEqual.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isError.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isFinite.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isFunction.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isLength.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isMatch.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isNaN.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isNative.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isNil.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isNull.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isNumber.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/babel-template/node_modules/lodash/iteratee.js delete mode 100644 node_modules/babel-template/node_modules/lodash/join.js delete mode 100644 node_modules/babel-template/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/keyBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/keys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/keysIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lang.js delete mode 100644 node_modules/babel-template/node_modules/lodash/last.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lodash.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/lte.js delete mode 100644 node_modules/babel-template/node_modules/lodash/map.js delete mode 100644 node_modules/babel-template/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/babel-template/node_modules/lodash/mapValues.js delete mode 100644 node_modules/babel-template/node_modules/lodash/matches.js delete mode 100644 node_modules/babel-template/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/babel-template/node_modules/lodash/math.js delete mode 100644 node_modules/babel-template/node_modules/lodash/max.js delete mode 100644 node_modules/babel-template/node_modules/lodash/maxBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/mean.js delete mode 100644 node_modules/babel-template/node_modules/lodash/meanBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/memoize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/merge.js delete mode 100644 node_modules/babel-template/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/method.js delete mode 100644 node_modules/babel-template/node_modules/lodash/methodOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/min.js delete mode 100644 node_modules/babel-template/node_modules/lodash/minBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/mixin.js delete mode 100644 node_modules/babel-template/node_modules/lodash/multiply.js delete mode 100644 node_modules/babel-template/node_modules/lodash/negate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/next.js delete mode 100644 node_modules/babel-template/node_modules/lodash/noop.js delete mode 100644 node_modules/babel-template/node_modules/lodash/now.js delete mode 100644 node_modules/babel-template/node_modules/lodash/nth.js delete mode 100644 node_modules/babel-template/node_modules/lodash/nthArg.js delete mode 100644 node_modules/babel-template/node_modules/lodash/number.js delete mode 100644 node_modules/babel-template/node_modules/lodash/object.js delete mode 100644 node_modules/babel-template/node_modules/lodash/omit.js delete mode 100644 node_modules/babel-template/node_modules/lodash/omitBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/once.js delete mode 100644 node_modules/babel-template/node_modules/lodash/orderBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/over.js delete mode 100644 node_modules/babel-template/node_modules/lodash/overArgs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/overEvery.js delete mode 100644 node_modules/babel-template/node_modules/lodash/overSome.js delete mode 100644 node_modules/babel-template/node_modules/lodash/package.json delete mode 100644 node_modules/babel-template/node_modules/lodash/pad.js delete mode 100644 node_modules/babel-template/node_modules/lodash/padEnd.js delete mode 100644 node_modules/babel-template/node_modules/lodash/padStart.js delete mode 100644 node_modules/babel-template/node_modules/lodash/parseInt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/partial.js delete mode 100644 node_modules/babel-template/node_modules/lodash/partialRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/partition.js delete mode 100644 node_modules/babel-template/node_modules/lodash/pick.js delete mode 100644 node_modules/babel-template/node_modules/lodash/pickBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/plant.js delete mode 100644 node_modules/babel-template/node_modules/lodash/property.js delete mode 100644 node_modules/babel-template/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/pull.js delete mode 100644 node_modules/babel-template/node_modules/lodash/pullAll.js delete mode 100644 node_modules/babel-template/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/pullAt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/random.js delete mode 100644 node_modules/babel-template/node_modules/lodash/range.js delete mode 100644 node_modules/babel-template/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/rearg.js delete mode 100644 node_modules/babel-template/node_modules/lodash/reduce.js delete mode 100644 node_modules/babel-template/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/reject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/remove.js delete mode 100644 node_modules/babel-template/node_modules/lodash/repeat.js delete mode 100644 node_modules/babel-template/node_modules/lodash/replace.js delete mode 100644 node_modules/babel-template/node_modules/lodash/rest.js delete mode 100644 node_modules/babel-template/node_modules/lodash/result.js delete mode 100644 node_modules/babel-template/node_modules/lodash/reverse.js delete mode 100644 node_modules/babel-template/node_modules/lodash/round.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sample.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/babel-template/node_modules/lodash/seq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/set.js delete mode 100644 node_modules/babel-template/node_modules/lodash/setWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/shuffle.js delete mode 100644 node_modules/babel-template/node_modules/lodash/size.js delete mode 100644 node_modules/babel-template/node_modules/lodash/slice.js delete mode 100644 node_modules/babel-template/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/some.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/split.js delete mode 100644 node_modules/babel-template/node_modules/lodash/spread.js delete mode 100644 node_modules/babel-template/node_modules/lodash/startCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/startsWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/string.js delete mode 100644 node_modules/babel-template/node_modules/lodash/stubArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/babel-template/node_modules/lodash/stubObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/stubString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/subtract.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sum.js delete mode 100644 node_modules/babel-template/node_modules/lodash/sumBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/tail.js delete mode 100644 node_modules/babel-template/node_modules/lodash/take.js delete mode 100644 node_modules/babel-template/node_modules/lodash/takeRight.js delete mode 100644 node_modules/babel-template/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/babel-template/node_modules/lodash/tap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/template.js delete mode 100644 node_modules/babel-template/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/babel-template/node_modules/lodash/throttle.js delete mode 100644 node_modules/babel-template/node_modules/lodash/thru.js delete mode 100644 node_modules/babel-template/node_modules/lodash/times.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toArray.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toFinite.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toIterator.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toJSON.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toLength.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toLower.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toNumber.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toPairs.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toPath.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toString.js delete mode 100644 node_modules/babel-template/node_modules/lodash/toUpper.js delete mode 100644 node_modules/babel-template/node_modules/lodash/transform.js delete mode 100644 node_modules/babel-template/node_modules/lodash/trim.js delete mode 100644 node_modules/babel-template/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/babel-template/node_modules/lodash/trimStart.js delete mode 100644 node_modules/babel-template/node_modules/lodash/truncate.js delete mode 100644 node_modules/babel-template/node_modules/lodash/unary.js delete mode 100644 node_modules/babel-template/node_modules/lodash/unescape.js delete mode 100644 node_modules/babel-template/node_modules/lodash/union.js delete mode 100644 node_modules/babel-template/node_modules/lodash/unionBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/unionWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/uniq.js delete mode 100644 node_modules/babel-template/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/babel-template/node_modules/lodash/unset.js delete mode 100644 node_modules/babel-template/node_modules/lodash/unzip.js delete mode 100644 node_modules/babel-template/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/update.js delete mode 100644 node_modules/babel-template/node_modules/lodash/updateWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/upperCase.js delete mode 100644 node_modules/babel-template/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/babel-template/node_modules/lodash/util.js delete mode 100644 node_modules/babel-template/node_modules/lodash/value.js delete mode 100644 node_modules/babel-template/node_modules/lodash/valueOf.js delete mode 100644 node_modules/babel-template/node_modules/lodash/values.js delete mode 100644 node_modules/babel-template/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/babel-template/node_modules/lodash/without.js delete mode 100644 node_modules/babel-template/node_modules/lodash/words.js delete mode 100644 node_modules/babel-template/node_modules/lodash/wrap.js delete mode 100644 node_modules/babel-template/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/babel-template/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/babel-template/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/babel-template/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/babel-template/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/babel-template/node_modules/lodash/xor.js delete mode 100644 node_modules/babel-template/node_modules/lodash/xorBy.js delete mode 100644 node_modules/babel-template/node_modules/lodash/xorWith.js delete mode 100644 node_modules/babel-template/node_modules/lodash/zip.js delete mode 100644 node_modules/babel-template/node_modules/lodash/zipObject.js delete mode 100644 node_modules/babel-template/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/babel-template/node_modules/lodash/zipWith.js create mode 120000 node_modules/babel-traverse/node_modules/.bin/babylon delete mode 100644 node_modules/babel-traverse/node_modules/lodash/LICENSE delete mode 100644 node_modules/babel-traverse/node_modules/lodash/README.md delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_DataView.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_Hash.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_Map.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_Promise.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_Set.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_Stack.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_apply.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arraySample.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_basePick.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseRest.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSample.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_castPath.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_castRest.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createBind.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createCtor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createCurry.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createFind.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createOver.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createPartial.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createRange.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createRound.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_createWrap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_flatRest.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getData.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getNative.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getTag.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getView.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_overArg.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_overRest.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_parent.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_realNames.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_reorder.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_root.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_setData.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_setToString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_toKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_toSource.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/add.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/after.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/array.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/ary.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/assign.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/assignIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/assignWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/at.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/attempt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/before.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/bind.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/bindAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/bindKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/camelCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/capitalize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/castArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/ceil.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/chain.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/chunk.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/clamp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/clone.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/collection.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/commit.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/compact.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/concat.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/cond.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/conforms.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/conformsTo.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/constant.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/core.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/core.min.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/countBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/create.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/curry.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/curryRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/date.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/debounce.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/deburr.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/defaultTo.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/defaults.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/defer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/delay.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/difference.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/divide.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/drop.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/dropRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/each.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/eachRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/endsWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/entries.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/eq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/escape.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/every.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/extend.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/extendWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fill.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/filter.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/find.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/findIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/findKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/findLast.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/first.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flatMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flatten.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flip.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/floor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flow.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/flowRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/forEach.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/forIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/forInRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/forOwn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/F.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/T.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/__.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/add.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/after.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/all.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/always.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/any.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/array.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/at.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/before.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/create.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/date.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/each.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/every.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/find.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/first.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/function.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/get.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/has.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/head.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/init.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/join.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/last.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/map.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/math.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/max.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/method.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/min.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/next.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/now.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/number.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/object.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/once.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/over.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/path.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/property.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/props.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/random.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/range.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/result.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/round.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/set.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/size.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/some.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/split.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/string.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/take.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/template.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/times.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/union.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/update.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/util.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/value.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/values.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/where.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/without.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/words.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/function.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/functions.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/get.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/groupBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/gt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/gte.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/has.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/hasIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/head.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/identity.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/inRange.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/includes.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/index.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/indexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/initial.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/intersection.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/invert.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/invertBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/invoke.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isArguments.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isDate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isElement.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isEqual.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isError.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isFinite.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isFunction.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isLength.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isMatch.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isNaN.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isNative.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isNil.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isNull.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isNumber.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/iteratee.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/join.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/keyBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/keys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/keysIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lang.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/last.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lodash.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/lte.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/map.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/mapValues.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/matches.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/math.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/max.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/maxBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/mean.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/meanBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/memoize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/merge.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/method.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/methodOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/min.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/minBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/mixin.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/multiply.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/negate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/next.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/noop.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/now.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/nth.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/nthArg.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/number.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/object.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/omit.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/omitBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/once.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/orderBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/over.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/overArgs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/overEvery.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/overSome.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/package.json delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pad.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/padEnd.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/padStart.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/parseInt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/partial.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/partialRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/partition.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pick.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pickBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/plant.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/property.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pull.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pullAll.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/pullAt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/random.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/range.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/rearg.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/reduce.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/reject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/remove.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/repeat.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/replace.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/rest.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/result.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/reverse.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/round.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sample.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/seq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/set.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/setWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/shuffle.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/size.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/slice.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/some.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/split.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/spread.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/startCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/startsWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/string.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/stubArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/stubObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/stubString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/subtract.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sum.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/sumBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/tail.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/take.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/takeRight.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/tap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/template.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/throttle.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/thru.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/times.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toArray.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toFinite.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toIterator.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toJSON.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toLength.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toLower.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toNumber.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toPairs.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toPath.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toString.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/toUpper.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/transform.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/trim.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/trimStart.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/truncate.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/unary.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/unescape.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/union.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/unionBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/unionWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/uniq.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/unset.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/unzip.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/update.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/updateWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/upperCase.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/util.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/value.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/valueOf.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/values.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/without.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/words.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/wrap.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/xor.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/xorBy.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/xorWith.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/zip.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/zipObject.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/babel-traverse/node_modules/lodash/zipWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/LICENSE delete mode 100644 node_modules/babel-types/node_modules/lodash/README.md delete mode 100644 node_modules/babel-types/node_modules/lodash/_DataView.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_Hash.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_Map.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_Promise.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_Set.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_Stack.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_apply.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arraySample.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_basePick.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseRest.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSample.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_castPath.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_castRest.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createBind.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createCtor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createCurry.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createFind.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createOver.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createPartial.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createRange.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createRound.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_createWrap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_flatRest.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getData.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getNative.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getTag.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getView.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_overArg.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_overRest.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_parent.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_realNames.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_reorder.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_root.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_setData.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_setToString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_toKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_toSource.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/babel-types/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/babel-types/node_modules/lodash/add.js delete mode 100644 node_modules/babel-types/node_modules/lodash/after.js delete mode 100644 node_modules/babel-types/node_modules/lodash/array.js delete mode 100644 node_modules/babel-types/node_modules/lodash/ary.js delete mode 100644 node_modules/babel-types/node_modules/lodash/assign.js delete mode 100644 node_modules/babel-types/node_modules/lodash/assignIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/assignWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/at.js delete mode 100644 node_modules/babel-types/node_modules/lodash/attempt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/before.js delete mode 100644 node_modules/babel-types/node_modules/lodash/bind.js delete mode 100644 node_modules/babel-types/node_modules/lodash/bindAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/bindKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/camelCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/capitalize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/castArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/ceil.js delete mode 100644 node_modules/babel-types/node_modules/lodash/chain.js delete mode 100644 node_modules/babel-types/node_modules/lodash/chunk.js delete mode 100644 node_modules/babel-types/node_modules/lodash/clamp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/clone.js delete mode 100644 node_modules/babel-types/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/collection.js delete mode 100644 node_modules/babel-types/node_modules/lodash/commit.js delete mode 100644 node_modules/babel-types/node_modules/lodash/compact.js delete mode 100644 node_modules/babel-types/node_modules/lodash/concat.js delete mode 100644 node_modules/babel-types/node_modules/lodash/cond.js delete mode 100644 node_modules/babel-types/node_modules/lodash/conforms.js delete mode 100644 node_modules/babel-types/node_modules/lodash/conformsTo.js delete mode 100644 node_modules/babel-types/node_modules/lodash/constant.js delete mode 100644 node_modules/babel-types/node_modules/lodash/core.js delete mode 100644 node_modules/babel-types/node_modules/lodash/core.min.js delete mode 100644 node_modules/babel-types/node_modules/lodash/countBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/create.js delete mode 100644 node_modules/babel-types/node_modules/lodash/curry.js delete mode 100644 node_modules/babel-types/node_modules/lodash/curryRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/date.js delete mode 100644 node_modules/babel-types/node_modules/lodash/debounce.js delete mode 100644 node_modules/babel-types/node_modules/lodash/deburr.js delete mode 100644 node_modules/babel-types/node_modules/lodash/defaultTo.js delete mode 100644 node_modules/babel-types/node_modules/lodash/defaults.js delete mode 100644 node_modules/babel-types/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/defer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/delay.js delete mode 100644 node_modules/babel-types/node_modules/lodash/difference.js delete mode 100644 node_modules/babel-types/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/divide.js delete mode 100644 node_modules/babel-types/node_modules/lodash/drop.js delete mode 100644 node_modules/babel-types/node_modules/lodash/dropRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/each.js delete mode 100644 node_modules/babel-types/node_modules/lodash/eachRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/endsWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/entries.js delete mode 100644 node_modules/babel-types/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/eq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/escape.js delete mode 100644 node_modules/babel-types/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/every.js delete mode 100644 node_modules/babel-types/node_modules/lodash/extend.js delete mode 100644 node_modules/babel-types/node_modules/lodash/extendWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fill.js delete mode 100644 node_modules/babel-types/node_modules/lodash/filter.js delete mode 100644 node_modules/babel-types/node_modules/lodash/find.js delete mode 100644 node_modules/babel-types/node_modules/lodash/findIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/findKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/findLast.js delete mode 100644 node_modules/babel-types/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/first.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flatMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flatten.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flip.js delete mode 100644 node_modules/babel-types/node_modules/lodash/floor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flow.js delete mode 100644 node_modules/babel-types/node_modules/lodash/flowRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/forEach.js delete mode 100644 node_modules/babel-types/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/forIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/forInRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/forOwn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/F.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/T.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/__.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/add.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/after.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/all.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/always.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/any.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/array.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/at.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/before.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/create.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/date.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/each.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/every.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/find.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/first.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/function.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/get.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/has.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/head.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/init.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/join.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/last.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/map.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/math.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/max.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/method.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/min.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/next.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/now.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/number.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/object.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/once.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/over.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/path.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/property.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/props.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/random.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/range.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/result.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/round.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/set.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/size.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/some.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/split.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/string.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/take.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/template.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/times.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/union.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/update.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/util.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/value.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/values.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/where.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/without.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/words.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/function.js delete mode 100644 node_modules/babel-types/node_modules/lodash/functions.js delete mode 100644 node_modules/babel-types/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/get.js delete mode 100644 node_modules/babel-types/node_modules/lodash/groupBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/gt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/gte.js delete mode 100644 node_modules/babel-types/node_modules/lodash/has.js delete mode 100644 node_modules/babel-types/node_modules/lodash/hasIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/head.js delete mode 100644 node_modules/babel-types/node_modules/lodash/identity.js delete mode 100644 node_modules/babel-types/node_modules/lodash/inRange.js delete mode 100644 node_modules/babel-types/node_modules/lodash/includes.js delete mode 100644 node_modules/babel-types/node_modules/lodash/index.js delete mode 100644 node_modules/babel-types/node_modules/lodash/indexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/initial.js delete mode 100644 node_modules/babel-types/node_modules/lodash/intersection.js delete mode 100644 node_modules/babel-types/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/invert.js delete mode 100644 node_modules/babel-types/node_modules/lodash/invertBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/invoke.js delete mode 100644 node_modules/babel-types/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isArguments.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isDate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isElement.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isEqual.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isError.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isFinite.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isFunction.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isLength.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isMatch.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isNaN.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isNative.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isNil.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isNull.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isNumber.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/babel-types/node_modules/lodash/iteratee.js delete mode 100644 node_modules/babel-types/node_modules/lodash/join.js delete mode 100644 node_modules/babel-types/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/keyBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/keys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/keysIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lang.js delete mode 100644 node_modules/babel-types/node_modules/lodash/last.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lodash.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/lte.js delete mode 100644 node_modules/babel-types/node_modules/lodash/map.js delete mode 100644 node_modules/babel-types/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/babel-types/node_modules/lodash/mapValues.js delete mode 100644 node_modules/babel-types/node_modules/lodash/matches.js delete mode 100644 node_modules/babel-types/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/babel-types/node_modules/lodash/math.js delete mode 100644 node_modules/babel-types/node_modules/lodash/max.js delete mode 100644 node_modules/babel-types/node_modules/lodash/maxBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/mean.js delete mode 100644 node_modules/babel-types/node_modules/lodash/meanBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/memoize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/merge.js delete mode 100644 node_modules/babel-types/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/method.js delete mode 100644 node_modules/babel-types/node_modules/lodash/methodOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/min.js delete mode 100644 node_modules/babel-types/node_modules/lodash/minBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/mixin.js delete mode 100644 node_modules/babel-types/node_modules/lodash/multiply.js delete mode 100644 node_modules/babel-types/node_modules/lodash/negate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/next.js delete mode 100644 node_modules/babel-types/node_modules/lodash/noop.js delete mode 100644 node_modules/babel-types/node_modules/lodash/now.js delete mode 100644 node_modules/babel-types/node_modules/lodash/nth.js delete mode 100644 node_modules/babel-types/node_modules/lodash/nthArg.js delete mode 100644 node_modules/babel-types/node_modules/lodash/number.js delete mode 100644 node_modules/babel-types/node_modules/lodash/object.js delete mode 100644 node_modules/babel-types/node_modules/lodash/omit.js delete mode 100644 node_modules/babel-types/node_modules/lodash/omitBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/once.js delete mode 100644 node_modules/babel-types/node_modules/lodash/orderBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/over.js delete mode 100644 node_modules/babel-types/node_modules/lodash/overArgs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/overEvery.js delete mode 100644 node_modules/babel-types/node_modules/lodash/overSome.js delete mode 100644 node_modules/babel-types/node_modules/lodash/package.json delete mode 100644 node_modules/babel-types/node_modules/lodash/pad.js delete mode 100644 node_modules/babel-types/node_modules/lodash/padEnd.js delete mode 100644 node_modules/babel-types/node_modules/lodash/padStart.js delete mode 100644 node_modules/babel-types/node_modules/lodash/parseInt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/partial.js delete mode 100644 node_modules/babel-types/node_modules/lodash/partialRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/partition.js delete mode 100644 node_modules/babel-types/node_modules/lodash/pick.js delete mode 100644 node_modules/babel-types/node_modules/lodash/pickBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/plant.js delete mode 100644 node_modules/babel-types/node_modules/lodash/property.js delete mode 100644 node_modules/babel-types/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/pull.js delete mode 100644 node_modules/babel-types/node_modules/lodash/pullAll.js delete mode 100644 node_modules/babel-types/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/pullAt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/random.js delete mode 100644 node_modules/babel-types/node_modules/lodash/range.js delete mode 100644 node_modules/babel-types/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/rearg.js delete mode 100644 node_modules/babel-types/node_modules/lodash/reduce.js delete mode 100644 node_modules/babel-types/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/reject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/remove.js delete mode 100644 node_modules/babel-types/node_modules/lodash/repeat.js delete mode 100644 node_modules/babel-types/node_modules/lodash/replace.js delete mode 100644 node_modules/babel-types/node_modules/lodash/rest.js delete mode 100644 node_modules/babel-types/node_modules/lodash/result.js delete mode 100644 node_modules/babel-types/node_modules/lodash/reverse.js delete mode 100644 node_modules/babel-types/node_modules/lodash/round.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sample.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/babel-types/node_modules/lodash/seq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/set.js delete mode 100644 node_modules/babel-types/node_modules/lodash/setWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/shuffle.js delete mode 100644 node_modules/babel-types/node_modules/lodash/size.js delete mode 100644 node_modules/babel-types/node_modules/lodash/slice.js delete mode 100644 node_modules/babel-types/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/some.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/split.js delete mode 100644 node_modules/babel-types/node_modules/lodash/spread.js delete mode 100644 node_modules/babel-types/node_modules/lodash/startCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/startsWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/string.js delete mode 100644 node_modules/babel-types/node_modules/lodash/stubArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/babel-types/node_modules/lodash/stubObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/stubString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/subtract.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sum.js delete mode 100644 node_modules/babel-types/node_modules/lodash/sumBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/tail.js delete mode 100644 node_modules/babel-types/node_modules/lodash/take.js delete mode 100644 node_modules/babel-types/node_modules/lodash/takeRight.js delete mode 100644 node_modules/babel-types/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/babel-types/node_modules/lodash/tap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/template.js delete mode 100644 node_modules/babel-types/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/babel-types/node_modules/lodash/throttle.js delete mode 100644 node_modules/babel-types/node_modules/lodash/thru.js delete mode 100644 node_modules/babel-types/node_modules/lodash/times.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toArray.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toFinite.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toIterator.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toJSON.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toLength.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toLower.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toNumber.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toPairs.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toPath.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toString.js delete mode 100644 node_modules/babel-types/node_modules/lodash/toUpper.js delete mode 100644 node_modules/babel-types/node_modules/lodash/transform.js delete mode 100644 node_modules/babel-types/node_modules/lodash/trim.js delete mode 100644 node_modules/babel-types/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/babel-types/node_modules/lodash/trimStart.js delete mode 100644 node_modules/babel-types/node_modules/lodash/truncate.js delete mode 100644 node_modules/babel-types/node_modules/lodash/unary.js delete mode 100644 node_modules/babel-types/node_modules/lodash/unescape.js delete mode 100644 node_modules/babel-types/node_modules/lodash/union.js delete mode 100644 node_modules/babel-types/node_modules/lodash/unionBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/unionWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/uniq.js delete mode 100644 node_modules/babel-types/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/babel-types/node_modules/lodash/unset.js delete mode 100644 node_modules/babel-types/node_modules/lodash/unzip.js delete mode 100644 node_modules/babel-types/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/update.js delete mode 100644 node_modules/babel-types/node_modules/lodash/updateWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/upperCase.js delete mode 100644 node_modules/babel-types/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/babel-types/node_modules/lodash/util.js delete mode 100644 node_modules/babel-types/node_modules/lodash/value.js delete mode 100644 node_modules/babel-types/node_modules/lodash/valueOf.js delete mode 100644 node_modules/babel-types/node_modules/lodash/values.js delete mode 100644 node_modules/babel-types/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/babel-types/node_modules/lodash/without.js delete mode 100644 node_modules/babel-types/node_modules/lodash/words.js delete mode 100644 node_modules/babel-types/node_modules/lodash/wrap.js delete mode 100644 node_modules/babel-types/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/babel-types/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/babel-types/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/babel-types/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/babel-types/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/babel-types/node_modules/lodash/xor.js delete mode 100644 node_modules/babel-types/node_modules/lodash/xorBy.js delete mode 100644 node_modules/babel-types/node_modules/lodash/xorWith.js delete mode 100644 node_modules/babel-types/node_modules/lodash/zip.js delete mode 100644 node_modules/babel-types/node_modules/lodash/zipObject.js delete mode 100644 node_modules/babel-types/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/babel-types/node_modules/lodash/zipWith.js mode change 100755 => 100644 node_modules/babylon/lib/index.js delete mode 100755 node_modules/babylon/lib/options.js delete mode 100644 node_modules/babylon/lib/parser/comments.js delete mode 100644 node_modules/babylon/lib/parser/expression.js delete mode 100644 node_modules/babylon/lib/parser/index.js delete mode 100644 node_modules/babylon/lib/parser/location.js delete mode 100644 node_modules/babylon/lib/parser/lval.js delete mode 100644 node_modules/babylon/lib/parser/node.js delete mode 100644 node_modules/babylon/lib/parser/statement.js delete mode 100644 node_modules/babylon/lib/parser/util.js delete mode 100644 node_modules/babylon/lib/plugins/flow.js delete mode 100644 node_modules/babylon/lib/plugins/jsx/index.js delete mode 100644 node_modules/babylon/lib/plugins/jsx/xhtml.js delete mode 100644 node_modules/babylon/lib/tokenizer/context.js delete mode 100644 node_modules/babylon/lib/tokenizer/index.js delete mode 100644 node_modules/babylon/lib/tokenizer/state.js delete mode 100644 node_modules/babylon/lib/tokenizer/types.js delete mode 100644 node_modules/babylon/lib/util/identifier.js delete mode 100644 node_modules/babylon/lib/util/location.js delete mode 100644 node_modules/babylon/lib/util/whitespace.js delete mode 100644 node_modules/bl/node_modules/isarray/Makefile delete mode 100644 node_modules/bl/node_modules/isarray/README.md delete mode 100644 node_modules/bl/node_modules/isarray/index.js delete mode 100644 node_modules/bl/node_modules/isarray/package.json delete mode 100644 node_modules/bl/node_modules/isarray/test.js create mode 100644 node_modules/chalk/node_modules/escape-string-regexp/index.js rename node_modules/{detect-indent/node_modules/repeating => chalk/node_modules/escape-string-regexp}/license (100%) create mode 100644 node_modules/chalk/node_modules/escape-string-regexp/package.json create mode 100644 node_modules/chalk/node_modules/escape-string-regexp/readme.md create mode 100644 node_modules/chalk/node_modules/supports-color/index.js rename node_modules/{escape-string-regexp => chalk/node_modules/supports-color}/license (100%) create mode 100644 node_modules/chalk/node_modules/supports-color/package.json create mode 100644 node_modules/chalk/node_modules/supports-color/readme.md delete mode 100644 node_modules/compress-commons/node_modules/isarray/.npmignore delete mode 100644 node_modules/compress-commons/node_modules/isarray/.travis.yml delete mode 100644 node_modules/compress-commons/node_modules/isarray/Makefile delete mode 100644 node_modules/compress-commons/node_modules/isarray/README.md delete mode 100644 node_modules/compress-commons/node_modules/isarray/index.js delete mode 100644 node_modules/compress-commons/node_modules/isarray/package.json delete mode 100644 node_modules/compress-commons/node_modules/isarray/test.js delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/README.md delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/package.json delete mode 100644 node_modules/compress-commons/node_modules/readable-stream/readable.js delete mode 100644 node_modules/concat-stream/node_modules/isarray/.npmignore delete mode 100644 node_modules/concat-stream/node_modules/isarray/.travis.yml delete mode 100644 node_modules/concat-stream/node_modules/isarray/Makefile delete mode 100644 node_modules/concat-stream/node_modules/isarray/README.md delete mode 100644 node_modules/concat-stream/node_modules/isarray/index.js delete mode 100644 node_modules/concat-stream/node_modules/isarray/package.json delete mode 100644 node_modules/concat-stream/node_modules/isarray/test.js create mode 100644 node_modules/core-js/build/Gruntfile.ls create mode 100644 node_modules/core-js/build/build.ls create mode 100644 node_modules/core-js/build/config.js create mode 100644 node_modules/core-js/build/index.js delete mode 100644 node_modules/crc32-stream/node_modules/isarray/.npmignore delete mode 100644 node_modules/crc32-stream/node_modules/isarray/.travis.yml delete mode 100644 node_modules/crc32-stream/node_modules/isarray/Makefile delete mode 100644 node_modules/crc32-stream/node_modules/isarray/README.md delete mode 100644 node_modules/crc32-stream/node_modules/isarray/index.js delete mode 100644 node_modules/crc32-stream/node_modules/isarray/package.json delete mode 100644 node_modules/crc32-stream/node_modules/isarray/test.js delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/README.md delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/package.json delete mode 100644 node_modules/crc32-stream/node_modules/readable-stream/readable.js create mode 120000 node_modules/del/node_modules/.bin/rimraf delete mode 100755 node_modules/detect-indent/cli.js delete mode 120000 node_modules/detect-indent/node_modules/.bin/repeating delete mode 100755 node_modules/detect-indent/node_modules/repeating/cli.js delete mode 100644 node_modules/detect-indent/node_modules/repeating/index.js delete mode 100644 node_modules/detect-indent/node_modules/repeating/package.json delete mode 100644 node_modules/detect-indent/node_modules/repeating/readme.md rename node_modules/{vinyl-fs/node_modules/glob-stream => duplexer2}/node_modules/isarray/README.md (100%) create mode 100644 node_modules/duplexer2/node_modules/isarray/build/build.js rename node_modules/{archiver-utils => duplexer2}/node_modules/isarray/component.json (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => duplexer2}/node_modules/isarray/index.js (100%) create mode 100644 node_modules/duplexer2/node_modules/isarray/package.json rename node_modules/{vinyl-fs/node_modules/glob-stream => duplexer2}/node_modules/readable-stream/.npmignore (100%) rename node_modules/{archiver-utils => duplexer2}/node_modules/readable-stream/LICENSE (100%) create mode 100644 node_modules/duplexer2/node_modules/readable-stream/README.md rename node_modules/{archiver-utils => duplexer2}/node_modules/readable-stream/duplex.js (100%) rename node_modules/{ => duplexer2/node_modules}/readable-stream/float.patch (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => duplexer2}/node_modules/readable-stream/lib/_stream_duplex.js (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => duplexer2}/node_modules/readable-stream/lib/_stream_passthrough.js (100%) create mode 100644 node_modules/duplexer2/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/duplexer2/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/duplexer2/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/duplexer2/node_modules/readable-stream/package.json rename node_modules/{archiver-utils => duplexer2}/node_modules/readable-stream/passthrough.js (100%) create mode 100644 node_modules/duplexer2/node_modules/readable-stream/readable.js rename node_modules/{archiver-utils => duplexer2}/node_modules/readable-stream/transform.js (100%) rename node_modules/{archiver-utils => duplexer2}/node_modules/readable-stream/writable.js (100%) delete mode 100644 node_modules/duplexify/node_modules/isarray/.npmignore delete mode 100644 node_modules/duplexify/node_modules/isarray/.travis.yml delete mode 100644 node_modules/duplexify/node_modules/isarray/Makefile delete mode 100644 node_modules/duplexify/node_modules/isarray/README.md delete mode 100644 node_modules/duplexify/node_modules/isarray/index.js delete mode 100644 node_modules/duplexify/node_modules/isarray/package.json delete mode 100644 node_modules/duplexify/node_modules/isarray/test.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/duplexify/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/duplexify/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/duplexify/node_modules/readable-stream/README.md delete mode 100644 node_modules/duplexify/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/duplexify/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/duplexify/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/package.json delete mode 100644 node_modules/duplexify/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/readable.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/transform.js delete mode 100644 node_modules/duplexify/node_modules/readable-stream/writable.js create mode 100644 node_modules/findup-sync/README.md rename node_modules/{vinyl-fs => glob-base}/node_modules/glob-parent/.npmignore (100%) rename node_modules/{vinyl-fs => glob-base}/node_modules/glob-parent/.travis.yml (100%) rename node_modules/{vinyl-fs => glob-base}/node_modules/glob-parent/LICENSE (100%) rename node_modules/{vinyl-fs => glob-base}/node_modules/glob-parent/README.md (100%) rename node_modules/{vinyl-fs => glob-base}/node_modules/glob-parent/index.js (100%) create mode 100644 node_modules/glob-base/node_modules/glob-parent/package.json create mode 100644 node_modules/glob-base/node_modules/glob-parent/test.js create mode 100644 node_modules/glob-parent/appveyor.yml rename node_modules/{vinyl-fs => glob-parent}/node_modules/is-extglob/LICENSE (100%) create mode 100644 node_modules/glob-parent/node_modules/is-extglob/README.md create mode 100644 node_modules/glob-parent/node_modules/is-extglob/index.js create mode 100644 node_modules/glob-parent/node_modules/is-extglob/package.json rename node_modules/{vinyl-fs => glob-parent}/node_modules/is-glob/LICENSE (100%) create mode 100644 node_modules/glob-parent/node_modules/is-glob/README.md create mode 100644 node_modules/glob-parent/node_modules/is-glob/index.js create mode 100644 node_modules/glob-parent/node_modules/is-glob/package.json create mode 100644 node_modules/glob-stream/node_modules/isarray/README.md create mode 100644 node_modules/glob-stream/node_modules/isarray/build/build.js rename node_modules/{archiver => glob-stream}/node_modules/isarray/component.json (100%) create mode 100644 node_modules/glob-stream/node_modules/isarray/index.js create mode 100644 node_modules/glob-stream/node_modules/isarray/package.json delete mode 100644 node_modules/glob-stream/node_modules/minimatch/package.json create mode 120000 node_modules/global-prefix/node_modules/.bin/which rename node_modules/{ => globule/node_modules}/lodash/LICENSE.txt (100%) create mode 100644 node_modules/globule/node_modules/lodash/README.md rename node_modules/{ => globule/node_modules}/lodash/dist/lodash.compat.js (100%) rename node_modules/{ => globule/node_modules}/lodash/dist/lodash.compat.min.js (100%) rename node_modules/{ => globule/node_modules}/lodash/dist/lodash.js (100%) rename node_modules/{ => globule/node_modules}/lodash/dist/lodash.min.js (100%) rename node_modules/{ => globule/node_modules}/lodash/dist/lodash.underscore.js (100%) rename node_modules/{ => globule/node_modules}/lodash/dist/lodash.underscore.min.js (100%) create mode 100644 node_modules/globule/node_modules/lodash/package.json rename node_modules/{vinyl => gulp-concat}/node_modules/clone-stats/LICENSE.md (100%) rename node_modules/{vinyl => gulp-concat}/node_modules/clone-stats/README.md (100%) rename node_modules/{vinyl => gulp-concat}/node_modules/clone-stats/index.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/clone-stats/package.json rename node_modules/{vinyl => gulp-concat}/node_modules/clone-stats/test.js (100%) rename node_modules/{gulp-gzip => gulp-concat}/node_modules/gulp-util/LICENSE (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/buffer.js rename node_modules/{gulp-gzip => gulp-concat}/node_modules/gulp-util/lib/combine.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/log.js rename node_modules/{gulp-gzip => gulp-concat}/node_modules/gulp-util/lib/noop.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/lib/template.js create mode 120000 node_modules/gulp-concat/node_modules/gulp-util/node_modules/.bin/dateformat rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/isarray/.npmignore (100%) rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/isarray/.travis.yml (100%) rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/isarray/Makefile (100%) rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/isarray/README.md (100%) rename node_modules/{bl => gulp-concat/node_modules/gulp-util}/node_modules/isarray/component.json (100%) rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/isarray/index.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/package.json rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/isarray/test.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.npmignore create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.travis.yml create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml rename node_modules/{archiver => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/LICENSE (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/README.md create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md (100%) rename node_modules/{archiver => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/duplex.js (100%) rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/lib/_stream_duplex.js (100%) rename node_modules/{archiver-utils => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/lib/_stream_passthrough.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/package.json rename node_modules/{archiver => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/passthrough.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/readable.js rename node_modules/{archiver => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/transform.js (100%) rename node_modules/{archiver => gulp-concat/node_modules/gulp-util}/node_modules/readable-stream/writable.js (100%) rename node_modules/{gulp-gzip => gulp-concat}/node_modules/gulp-util/node_modules/through2/.npmignore (100%) rename node_modules/{gulp-gzip => gulp-concat}/node_modules/gulp-util/node_modules/through2/LICENSE (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/README.md create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/package.json rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-concat/node_modules/gulp-util}/node_modules/through2/through2.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp-concat/node_modules/isarray/README.md create mode 100644 node_modules/gulp-concat/node_modules/isarray/build/build.js rename node_modules/{compress-commons => gulp-concat}/node_modules/isarray/component.json (100%) create mode 100644 node_modules/gulp-concat/node_modules/isarray/index.js create mode 100644 node_modules/gulp-concat/node_modules/isarray/package.json create mode 100644 node_modules/gulp-concat/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp-concat/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp-concat/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp-concat/node_modules/lodash._reinterpolate/package.json rename node_modules/{ => gulp-concat/node_modules}/lodash.template/LICENSE (100%) create mode 100644 node_modules/gulp-concat/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp-concat/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp-concat/node_modules/lodash.template/package.json rename node_modules/{gulp-util => gulp-concat}/node_modules/object-assign/index.js (100%) rename node_modules/{gulp-util => gulp-concat}/node_modules/object-assign/license (100%) create mode 100644 node_modules/gulp-concat/node_modules/object-assign/package.json rename node_modules/{gulp-util => gulp-concat}/node_modules/object-assign/readme.md (100%) rename node_modules/{gulp-gzip/node_modules/vinyl => gulp-concat/node_modules/replace-ext}/.npmignore (100%) rename node_modules/{ => gulp-concat/node_modules}/replace-ext/.travis.yml (100%) rename node_modules/{gulp-sym/node_modules/gulp-util => gulp-concat/node_modules/replace-ext}/LICENSE (100%) create mode 100644 node_modules/gulp-concat/node_modules/replace-ext/README.md rename node_modules/{gulp-gzip/node_modules/gulp-util/lib/replaceExtension.js => gulp-concat/node_modules/replace-ext/index.js} (100%) create mode 100644 node_modules/gulp-concat/node_modules/replace-ext/package.json rename node_modules/{ => gulp-concat/node_modules}/replace-ext/test/main.js (100%) rename node_modules/{gulp-gzip => gulp-concat}/node_modules/vinyl/LICENSE (100%) mode change 100755 => 100644 create mode 100644 node_modules/gulp-concat/node_modules/vinyl/README.md create mode 100644 node_modules/gulp-concat/node_modules/vinyl/index.js create mode 100644 node_modules/gulp-concat/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp-concat/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp-concat/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp-concat/node_modules/vinyl/lib/isNull.js rename node_modules/{gulp-gzip/node_modules/gulp-util => gulp-concat/node_modules/vinyl}/lib/isStream.js (100%) create mode 100644 node_modules/gulp-concat/node_modules/vinyl/package.json create mode 100644 node_modules/gulp-debug/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-debug/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-debug/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-debug/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-debug/node_modules/clone-stats/test.js create mode 100755 node_modules/gulp-debug/node_modules/gulp-util/LICENSE create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/buffer.js rename node_modules/{gulp-sym => gulp-debug}/node_modules/gulp-util/lib/combine.js (100%) create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/log.js rename node_modules/{gulp-sym => gulp-debug}/node_modules/gulp-util/lib/noop.js (100%) create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/lib/template.js create mode 120000 node_modules/gulp-debug/node_modules/gulp-util/node_modules/.bin/dateformat create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/node_modules/object-assign/index.js rename node_modules/{supports-color => gulp-debug/node_modules/gulp-util/node_modules/object-assign}/license (100%) create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/node_modules/object-assign/package.json create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/node_modules/object-assign/readme.md create mode 100644 node_modules/gulp-debug/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp-debug/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp-debug/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp-debug/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp-debug/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/gulp-debug/node_modules/lodash.template/LICENSE create mode 100644 node_modules/gulp-debug/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp-debug/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp-debug/node_modules/lodash.template/package.json rename node_modules/{gulp-sym/node_modules/vinyl => gulp-debug/node_modules/replace-ext}/.npmignore (100%) create mode 100644 node_modules/gulp-debug/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/gulp-debug/node_modules/replace-ext/LICENSE create mode 100644 node_modules/gulp-debug/node_modules/replace-ext/README.md rename node_modules/{gulp-sym/node_modules/gulp-util/lib/replaceExtension.js => gulp-debug/node_modules/replace-ext/index.js} (100%) create mode 100644 node_modules/gulp-debug/node_modules/replace-ext/package.json create mode 100644 node_modules/gulp-debug/node_modules/replace-ext/test/main.js rename node_modules/{gulp-sym => gulp-debug}/node_modules/vinyl/LICENSE (100%) mode change 100755 => 100644 create mode 100644 node_modules/gulp-debug/node_modules/vinyl/README.md create mode 100644 node_modules/gulp-debug/node_modules/vinyl/index.js create mode 100644 node_modules/gulp-debug/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp-debug/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp-debug/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp-debug/node_modules/vinyl/lib/isNull.js rename node_modules/{gulp-gzip => gulp-debug}/node_modules/vinyl/lib/isStream.js (100%) create mode 100644 node_modules/gulp-debug/node_modules/vinyl/package.json delete mode 120000 node_modules/gulp-gzip/node_modules/.bin/has-ansi delete mode 120000 node_modules/gulp-gzip/node_modules/.bin/strip-ansi delete mode 120000 node_modules/gulp-gzip/node_modules/.bin/supports-color delete mode 100644 node_modules/gulp-gzip/node_modules/ansi-regex/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/node_modules/through2/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/gulp-util/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/has-ansi/package.json create mode 100644 node_modules/gulp-gzip/node_modules/isarray/README.md create mode 100644 node_modules/gulp-gzip/node_modules/isarray/build/build.js rename node_modules/{concat-stream => gulp-gzip}/node_modules/isarray/component.json (100%) create mode 100644 node_modules/gulp-gzip/node_modules/isarray/index.js create mode 100644 node_modules/gulp-gzip/node_modules/isarray/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp-gzip/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp-gzip/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp-gzip/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp-gzip/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp-gzip/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-gzip/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/supports-color/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/through2/node_modules/xtend/.npmignore delete mode 100644 node_modules/gulp-gzip/node_modules/through2/node_modules/xtend/README.md delete mode 100644 node_modules/gulp-gzip/node_modules/through2/node_modules/xtend/index.js delete mode 100644 node_modules/gulp-gzip/node_modules/through2/node_modules/xtend/mutable.js delete mode 100644 node_modules/gulp-gzip/node_modules/through2/node_modules/xtend/package.json delete mode 100644 node_modules/gulp-gzip/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp-gzip/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp-gzip/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp-gzip/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp-gzip/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp-gzip/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp-gzip/node_modules/vinyl/package.json rename node_modules/gulp-gzip/node_modules/{through2/node_modules => }/xtend/has-keys.js (100%) create mode 100644 node_modules/gulp-json-transform/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-json-transform/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-json-transform/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-json-transform/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-json-transform/node_modules/clone-stats/test.js create mode 100755 node_modules/gulp-json-transform/node_modules/gulp-util/LICENSE create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/buffer.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/combine.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/log.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/noop.js create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/lib/template.js create mode 120000 node_modules/gulp-json-transform/node_modules/gulp-util/node_modules/.bin/dateformat create mode 100644 node_modules/gulp-json-transform/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp-json-transform/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp-json-transform/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp-json-transform/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp-json-transform/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/gulp-json-transform/node_modules/lodash.template/LICENSE create mode 100644 node_modules/gulp-json-transform/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp-json-transform/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp-json-transform/node_modules/lodash.template/package.json create mode 100644 node_modules/gulp-json-transform/node_modules/object-assign/index.js create mode 100644 node_modules/gulp-json-transform/node_modules/object-assign/license create mode 100644 node_modules/gulp-json-transform/node_modules/object-assign/package.json create mode 100644 node_modules/gulp-json-transform/node_modules/object-assign/readme.md rename node_modules/{ => gulp-json-transform/node_modules}/replace-ext/.npmignore (100%) create mode 100644 node_modules/gulp-json-transform/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/gulp-json-transform/node_modules/replace-ext/LICENSE create mode 100644 node_modules/gulp-json-transform/node_modules/replace-ext/README.md create mode 100644 node_modules/gulp-json-transform/node_modules/replace-ext/index.js create mode 100644 node_modules/gulp-json-transform/node_modules/replace-ext/package.json create mode 100644 node_modules/gulp-json-transform/node_modules/replace-ext/test/main.js create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/LICENSE create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/README.md create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/index.js create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/lib/isNull.js rename node_modules/{gulp-sym/node_modules/gulp-util => gulp-json-transform/node_modules/vinyl}/lib/isStream.js (100%) create mode 100644 node_modules/gulp-json-transform/node_modules/vinyl/package.json create mode 100644 node_modules/gulp-sourcemaps/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-sourcemaps/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-sourcemaps/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-sourcemaps/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-sourcemaps/node_modules/clone-stats/test.js create mode 100644 node_modules/gulp-sourcemaps/node_modules/replace-ext/.npmignore create mode 100644 node_modules/gulp-sourcemaps/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/gulp-sourcemaps/node_modules/replace-ext/LICENSE create mode 100644 node_modules/gulp-sourcemaps/node_modules/replace-ext/README.md create mode 100644 node_modules/gulp-sourcemaps/node_modules/replace-ext/index.js create mode 100644 node_modules/gulp-sourcemaps/node_modules/replace-ext/package.json create mode 100644 node_modules/gulp-sourcemaps/node_modules/replace-ext/test/main.js create mode 100644 node_modules/gulp-stream/node_modules/isarray/README.md create mode 100644 node_modules/gulp-stream/node_modules/isarray/build/build.js rename node_modules/{crc32-stream => gulp-stream}/node_modules/isarray/component.json (100%) create mode 100644 node_modules/gulp-stream/node_modules/isarray/index.js create mode 100644 node_modules/gulp-stream/node_modules/isarray/package.json delete mode 120000 node_modules/gulp-sym/node_modules/.bin/has-ansi create mode 120000 node_modules/gulp-sym/node_modules/.bin/mkdirp create mode 120000 node_modules/gulp-sym/node_modules/.bin/rimraf delete mode 120000 node_modules/gulp-sym/node_modules/.bin/strip-ansi delete mode 120000 node_modules/gulp-sym/node_modules/.bin/supports-color delete mode 100644 node_modules/gulp-sym/node_modules/ansi-regex/index.js delete mode 100644 node_modules/gulp-sym/node_modules/ansi-regex/package.json delete mode 100644 node_modules/gulp-sym/node_modules/ansi-regex/readme.md delete mode 100644 node_modules/gulp-sym/node_modules/ansi-styles/index.js delete mode 100644 node_modules/gulp-sym/node_modules/ansi-styles/package.json delete mode 100644 node_modules/gulp-sym/node_modules/ansi-styles/readme.md delete mode 100644 node_modules/gulp-sym/node_modules/chalk/index.js delete mode 100644 node_modules/gulp-sym/node_modules/chalk/package.json delete mode 100644 node_modules/gulp-sym/node_modules/chalk/readme.md delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/.npmignore delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/.travis.yml delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/README.md delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/index.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/File.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/PluginError.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/beep.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/buffer.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/colors.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/date.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/env.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/isBuffer.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/isNull.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/linefeed.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/log.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/lib/template.js delete mode 100644 node_modules/gulp-sym/node_modules/gulp-util/package.json delete mode 100755 node_modules/gulp-sym/node_modules/has-ansi/cli.js delete mode 100644 node_modules/gulp-sym/node_modules/has-ansi/index.js delete mode 100644 node_modules/gulp-sym/node_modules/has-ansi/package.json delete mode 100644 node_modules/gulp-sym/node_modules/has-ansi/readme.md create mode 100644 node_modules/gulp-sym/node_modules/isarray/README.md create mode 100644 node_modules/gulp-sym/node_modules/isarray/build/build.js rename node_modules/{duplexify => gulp-sym}/node_modules/isarray/component.json (100%) create mode 100644 node_modules/gulp-sym/node_modules/isarray/index.js create mode 100644 node_modules/gulp-sym/node_modules/isarray/package.json delete mode 100644 node_modules/gulp-sym/node_modules/lodash._reinterpolate/LICENSE.txt delete mode 100644 node_modules/gulp-sym/node_modules/lodash._reinterpolate/README.md delete mode 100644 node_modules/gulp-sym/node_modules/lodash._reinterpolate/index.js delete mode 100644 node_modules/gulp-sym/node_modules/lodash._reinterpolate/package.json delete mode 100644 node_modules/gulp-sym/node_modules/lodash.escape/LICENSE.txt delete mode 100644 node_modules/gulp-sym/node_modules/lodash.escape/README.md delete mode 100644 node_modules/gulp-sym/node_modules/lodash.escape/index.js delete mode 100644 node_modules/gulp-sym/node_modules/lodash.escape/package.json delete mode 100644 node_modules/gulp-sym/node_modules/lodash.keys/LICENSE.txt delete mode 100644 node_modules/gulp-sym/node_modules/lodash.keys/README.md delete mode 100644 node_modules/gulp-sym/node_modules/lodash.keys/index.js delete mode 100644 node_modules/gulp-sym/node_modules/lodash.keys/package.json delete mode 100644 node_modules/gulp-sym/node_modules/lodash.template/LICENSE.txt delete mode 100644 node_modules/gulp-sym/node_modules/lodash.template/README.md delete mode 100644 node_modules/gulp-sym/node_modules/lodash.template/index.js delete mode 100644 node_modules/gulp-sym/node_modules/lodash.template/package.json delete mode 100644 node_modules/gulp-sym/node_modules/lodash.templatesettings/LICENSE.txt delete mode 100644 node_modules/gulp-sym/node_modules/lodash.templatesettings/README.md delete mode 100644 node_modules/gulp-sym/node_modules/lodash.templatesettings/index.js delete mode 100644 node_modules/gulp-sym/node_modules/lodash.templatesettings/package.json delete mode 100644 node_modules/gulp-sym/node_modules/minimist/.travis.yml delete mode 100644 node_modules/gulp-sym/node_modules/minimist/LICENSE delete mode 100644 node_modules/gulp-sym/node_modules/minimist/example/parse.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/index.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/package.json delete mode 100644 node_modules/gulp-sym/node_modules/minimist/readme.markdown delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/all_bool.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/bool.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/dash.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/default_bool.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/dotted.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/long.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/num.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/parse.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/parse_modified.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/short.js delete mode 100644 node_modules/gulp-sym/node_modules/minimist/test/whitespace.js delete mode 100755 node_modules/gulp-sym/node_modules/strip-ansi/cli.js delete mode 100644 node_modules/gulp-sym/node_modules/strip-ansi/index.js delete mode 100644 node_modules/gulp-sym/node_modules/strip-ansi/package.json delete mode 100644 node_modules/gulp-sym/node_modules/strip-ansi/readme.md delete mode 100755 node_modules/gulp-sym/node_modules/supports-color/cli.js delete mode 100644 node_modules/gulp-sym/node_modules/supports-color/index.js delete mode 100644 node_modules/gulp-sym/node_modules/supports-color/package.json delete mode 100644 node_modules/gulp-sym/node_modules/supports-color/readme.md delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/.travis.yml delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/README.md delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/index.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/lib/cloneBuffer.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/lib/inspectStream.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/lib/isBuffer.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/lib/isNull.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/test/File.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/test/cloneBuffer.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/test/inspectStream.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/test/isBuffer.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/test/isNull.js delete mode 100644 node_modules/gulp-sym/node_modules/vinyl/test/isStream.js create mode 100644 node_modules/gulp-tar/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-tar/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-tar/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-tar/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-tar/node_modules/clone-stats/test.js create mode 100755 node_modules/gulp-tar/node_modules/gulp-util/LICENSE create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/buffer.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/combine.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/log.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/noop.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/lib/template.js create mode 120000 node_modules/gulp-tar/node_modules/gulp-util/node_modules/.bin/dateformat create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/node_modules/object-assign/index.js create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/node_modules/object-assign/license create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/node_modules/object-assign/package.json create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/node_modules/object-assign/readme.md create mode 100644 node_modules/gulp-tar/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp-tar/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp-tar/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp-tar/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp-tar/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/gulp-tar/node_modules/lodash.template/LICENSE create mode 100644 node_modules/gulp-tar/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp-tar/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp-tar/node_modules/lodash.template/package.json create mode 100644 node_modules/gulp-tar/node_modules/replace-ext/.npmignore create mode 100644 node_modules/gulp-tar/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/gulp-tar/node_modules/replace-ext/LICENSE create mode 100644 node_modules/gulp-tar/node_modules/replace-ext/README.md create mode 100644 node_modules/gulp-tar/node_modules/replace-ext/index.js create mode 100644 node_modules/gulp-tar/node_modules/replace-ext/package.json create mode 100644 node_modules/gulp-tar/node_modules/replace-ext/test/main.js create mode 100644 node_modules/gulp-tar/node_modules/vinyl/LICENSE create mode 100644 node_modules/gulp-tar/node_modules/vinyl/README.md create mode 100644 node_modules/gulp-tar/node_modules/vinyl/index.js create mode 100644 node_modules/gulp-tar/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp-tar/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp-tar/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp-tar/node_modules/vinyl/lib/isNull.js rename node_modules/{gulp-sym => gulp-tar}/node_modules/vinyl/lib/isStream.js (100%) create mode 100644 node_modules/gulp-tar/node_modules/vinyl/package.json create mode 120000 node_modules/gulp-typescript/node_modules/.bin/tsc create mode 120000 node_modules/gulp-typescript/node_modules/.bin/tsserver create mode 100644 node_modules/gulp-typescript/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-typescript/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-typescript/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-typescript/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-typescript/node_modules/clone-stats/test.js create mode 100755 node_modules/gulp-typescript/node_modules/gulp-util/LICENSE create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/buffer.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/combine.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/log.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/noop.js create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/lib/template.js create mode 120000 node_modules/gulp-typescript/node_modules/gulp-util/node_modules/.bin/dateformat create mode 100644 node_modules/gulp-typescript/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp-typescript/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp-typescript/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp-typescript/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp-typescript/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/gulp-typescript/node_modules/lodash.template/LICENSE create mode 100644 node_modules/gulp-typescript/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp-typescript/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp-typescript/node_modules/lodash.template/package.json create mode 100644 node_modules/gulp-typescript/node_modules/object-assign/index.js create mode 100644 node_modules/gulp-typescript/node_modules/object-assign/license create mode 100644 node_modules/gulp-typescript/node_modules/object-assign/package.json create mode 100644 node_modules/gulp-typescript/node_modules/object-assign/readme.md create mode 100644 node_modules/gulp-typescript/node_modules/replace-ext/.npmignore create mode 100644 node_modules/gulp-typescript/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/gulp-typescript/node_modules/replace-ext/LICENSE create mode 100644 node_modules/gulp-typescript/node_modules/replace-ext/README.md create mode 100644 node_modules/gulp-typescript/node_modules/replace-ext/index.js create mode 100644 node_modules/gulp-typescript/node_modules/replace-ext/package.json create mode 100644 node_modules/gulp-typescript/node_modules/replace-ext/test/main.js create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/LICENSE create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/README.md create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/index.js create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/lib/isNull.js create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/lib/isStream.js create mode 100644 node_modules/gulp-typescript/node_modules/vinyl/package.json delete mode 100644 node_modules/gulp-typescript/release/file.js delete mode 100644 node_modules/gulp-typescript/release/filter.d.ts delete mode 100644 node_modules/gulp-typescript/release/filter.js delete mode 100644 node_modules/gulp-typescript/release/tsapi.d.ts delete mode 100644 node_modules/gulp-typescript/release/tsapi.js delete mode 100644 node_modules/gulp-typescript/release/tsconfig.d.ts delete mode 100644 node_modules/gulp-typescript/release/tsconfig.js delete mode 100644 node_modules/gulp-typescript/release/vinyl-file.d.ts delete mode 100644 node_modules/gulp-typescript/release/vinyl-file.js delete mode 100644 node_modules/gulp-typescript/tsd.json rename node_modules/{gulp-gzip/node_modules => }/gulp-util/.npmignore (100%) rename node_modules/{gulp-gzip/node_modules => }/gulp-util/.travis.yml (100%) rename node_modules/{gulp-gzip/node_modules => }/gulp-util/lib/File.js (100%) rename node_modules/{gulp-gzip/node_modules => }/gulp-util/lib/beep.js (100%) rename node_modules/{gulp-gzip/node_modules => }/gulp-util/lib/colors.js (100%) rename node_modules/{gulp-gzip/node_modules => }/gulp-util/lib/date.js (100%) rename node_modules/{gulp-gzip/node_modules => }/gulp-util/lib/linefeed.js (100%) create mode 100644 node_modules/gulp-util/lib/replaceExtension.js create mode 120000 node_modules/gulp-util/node_modules/.bin/dateformat rename node_modules/{gulp-gzip => gulp-util}/node_modules/ansi-regex/index.js (100%) create mode 100644 node_modules/gulp-util/node_modules/ansi-regex/package.json rename node_modules/{gulp-gzip => gulp-util}/node_modules/ansi-regex/readme.md (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/ansi-styles/index.js (100%) create mode 100644 node_modules/gulp-util/node_modules/ansi-styles/package.json rename node_modules/{gulp-gzip => gulp-util}/node_modules/ansi-styles/readme.md (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/chalk/index.js (100%) create mode 120000 node_modules/gulp-util/node_modules/chalk/node_modules/.bin/has-ansi create mode 120000 node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi create mode 120000 node_modules/gulp-util/node_modules/chalk/node_modules/.bin/supports-color create mode 100644 node_modules/gulp-util/node_modules/chalk/package.json rename node_modules/{gulp-gzip => gulp-util}/node_modules/chalk/readme.md (100%) create mode 100644 node_modules/gulp-util/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-util/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-util/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-util/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-util/node_modules/clone-stats/test.js create mode 100644 node_modules/gulp-util/node_modules/escape-string-regexp/index.js create mode 100644 node_modules/gulp-util/node_modules/escape-string-regexp/license create mode 100644 node_modules/gulp-util/node_modules/escape-string-regexp/package.json create mode 100644 node_modules/gulp-util/node_modules/escape-string-regexp/readme.md rename node_modules/{gulp-gzip => gulp-util}/node_modules/has-ansi/cli.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/has-ansi/index.js (100%) create mode 100644 node_modules/gulp-util/node_modules/has-ansi/package.json rename node_modules/{gulp-gzip => gulp-util}/node_modules/has-ansi/readme.md (100%) create mode 100644 node_modules/gulp-util/node_modules/isarray/README.md create mode 100644 node_modules/gulp-util/node_modules/isarray/build/build.js rename node_modules/{isobject => gulp-util}/node_modules/isarray/component.json (100%) create mode 100644 node_modules/gulp-util/node_modules/isarray/index.js create mode 100644 node_modules/gulp-util/node_modules/isarray/package.json rename node_modules/{archiver/node_modules/isarray => gulp-util/node_modules/minimist}/.travis.yml (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/LICENSE (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/example/parse.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/index.js (100%) create mode 100644 node_modules/gulp-util/node_modules/minimist/package.json rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/readme.markdown (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/all_bool.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/bool.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/dash.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/default_bool.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/dotted.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/long.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/num.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/parse.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/parse_modified.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/short.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/minimist/test/whitespace.js (100%) delete mode 100644 node_modules/gulp-util/node_modules/object-assign/package.json create mode 100644 node_modules/gulp-util/node_modules/readable-stream/.npmignore rename node_modules/{compress-commons => gulp-util}/node_modules/readable-stream/LICENSE (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-util}/node_modules/readable-stream/README.md (100%) rename node_modules/{compress-commons => gulp-util}/node_modules/readable-stream/duplex.js (100%) create mode 100644 node_modules/gulp-util/node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 node_modules/gulp-util/node_modules/readable-stream/lib/_stream_passthrough.js rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-util}/node_modules/readable-stream/lib/_stream_readable.js (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-util}/node_modules/readable-stream/lib/_stream_transform.js (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-util}/node_modules/readable-stream/lib/_stream_writable.js (100%) create mode 100644 node_modules/gulp-util/node_modules/readable-stream/package.json rename node_modules/{compress-commons => gulp-util}/node_modules/readable-stream/passthrough.js (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-util}/node_modules/readable-stream/readable.js (100%) rename node_modules/{compress-commons => gulp-util}/node_modules/readable-stream/transform.js (100%) rename node_modules/{compress-commons => gulp-util}/node_modules/readable-stream/writable.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/strip-ansi/cli.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/strip-ansi/index.js (100%) create mode 100644 node_modules/gulp-util/node_modules/strip-ansi/package.json rename node_modules/{gulp-gzip => gulp-util}/node_modules/strip-ansi/readme.md (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/supports-color/cli.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/supports-color/index.js (100%) create mode 100644 node_modules/gulp-util/node_modules/supports-color/package.json rename node_modules/{gulp-gzip => gulp-util}/node_modules/supports-color/readme.md (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-util}/node_modules/through2/.npmignore (100%) rename node_modules/{vinyl-fs/node_modules/glob-stream => gulp-util}/node_modules/through2/LICENSE (100%) rename node_modules/{gulp-gzip/node_modules => }/gulp-util/node_modules/through2/README.md (100%) create mode 100644 node_modules/gulp-util/node_modules/through2/package.json rename node_modules/{gulp-gzip/node_modules => }/gulp-util/node_modules/through2/through2.js (100%) create mode 100644 node_modules/gulp-util/node_modules/vinyl/.npmignore rename node_modules/{gulp-gzip => gulp-util}/node_modules/vinyl/.travis.yml (100%) mode change 100644 => 100755 node_modules/gulp-util/node_modules/vinyl/LICENSE rename node_modules/{gulp-gzip => gulp-util}/node_modules/vinyl/test/File.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/vinyl/test/cloneBuffer.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/vinyl/test/inspectStream.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/vinyl/test/isBuffer.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/vinyl/test/isNull.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/vinyl/test/isStream.js (100%) rename node_modules/{gulp-gzip => gulp-util}/node_modules/xtend/.jshintrc (100%) rename node_modules/{archiver/node_modules/isarray => gulp-util/node_modules/xtend}/.npmignore (100%) rename node_modules/{gulp-gzip/node_modules/through2 => gulp-util}/node_modules/xtend/LICENCE (95%) rename node_modules/{gulp-gzip/node_modules/through2 => gulp-util}/node_modules/xtend/Makefile (100%) create mode 100644 node_modules/gulp-util/node_modules/xtend/README.md create mode 100644 node_modules/gulp-util/node_modules/xtend/index.js create mode 100644 node_modules/gulp-util/node_modules/xtend/mutable.js create mode 100644 node_modules/gulp-util/node_modules/xtend/package.json rename node_modules/{gulp-gzip/node_modules/through2 => gulp-util}/node_modules/xtend/test.js (100%) create mode 100644 node_modules/gulp-zip/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-zip/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-zip/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-zip/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-zip/node_modules/clone-stats/test.js create mode 100755 node_modules/gulp-zip/node_modules/gulp-util/LICENSE create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/buffer.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/combine.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/log.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/noop.js create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/lib/template.js create mode 120000 node_modules/gulp-zip/node_modules/gulp-util/node_modules/.bin/dateformat create mode 100644 node_modules/gulp-zip/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp-zip/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp-zip/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp-zip/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp-zip/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/gulp-zip/node_modules/lodash.template/LICENSE create mode 100644 node_modules/gulp-zip/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp-zip/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp-zip/node_modules/lodash.template/package.json create mode 100644 node_modules/gulp-zip/node_modules/object-assign/index.js create mode 100644 node_modules/gulp-zip/node_modules/object-assign/license create mode 100644 node_modules/gulp-zip/node_modules/object-assign/package.json create mode 100644 node_modules/gulp-zip/node_modules/object-assign/readme.md create mode 100644 node_modules/gulp-zip/node_modules/replace-ext/.npmignore create mode 100644 node_modules/gulp-zip/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/gulp-zip/node_modules/replace-ext/LICENSE create mode 100644 node_modules/gulp-zip/node_modules/replace-ext/README.md create mode 100644 node_modules/gulp-zip/node_modules/replace-ext/index.js create mode 100644 node_modules/gulp-zip/node_modules/replace-ext/package.json create mode 100644 node_modules/gulp-zip/node_modules/replace-ext/test/main.js create mode 100644 node_modules/gulp-zip/node_modules/vinyl/LICENSE create mode 100644 node_modules/gulp-zip/node_modules/vinyl/README.md create mode 100644 node_modules/gulp-zip/node_modules/vinyl/index.js create mode 100644 node_modules/gulp-zip/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp-zip/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp-zip/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp-zip/node_modules/vinyl/lib/isNull.js create mode 100644 node_modules/gulp-zip/node_modules/vinyl/lib/isStream.js create mode 100644 node_modules/gulp-zip/node_modules/vinyl/package.json create mode 120000 node_modules/gulp/node_modules/.bin/semver delete mode 120000 node_modules/gulp/node_modules/.bin/strip-bom create mode 100644 node_modules/gulp/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp/node_modules/clone-stats/test.js create mode 100755 node_modules/gulp/node_modules/glob-stream/LICENSE create mode 100644 node_modules/gulp/node_modules/glob-stream/README.md create mode 100644 node_modules/gulp/node_modules/glob-stream/index.js create mode 100644 node_modules/gulp/node_modules/glob-stream/package.json rename node_modules/{glob-stream/node_modules/minimatch => gulp/node_modules/glob}/LICENSE (100%) create mode 100644 node_modules/gulp/node_modules/glob/README.md rename node_modules/{vinyl-fs => gulp}/node_modules/glob/common.js (83%) rename node_modules/{vinyl-fs => gulp}/node_modules/glob/glob.js (97%) create mode 100644 node_modules/gulp/node_modules/glob/package.json rename node_modules/{vinyl-fs => gulp}/node_modules/glob/sync.js (97%) create mode 100755 node_modules/gulp/node_modules/gulp-util/LICENSE create mode 100644 node_modules/gulp/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/buffer.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/combine.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/log.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/noop.js create mode 100644 node_modules/gulp/node_modules/gulp-util/lib/template.js create mode 120000 node_modules/gulp/node_modules/gulp-util/node_modules/.bin/dateformat create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/.npmignore create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/.travis.yml create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/LICENSE create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/README.md create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/clone.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/package.json create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/test-apart-ctx.html create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.html create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.npmignore create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.travis.yml create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml rename node_modules/{crc32-stream => gulp/node_modules/gulp-util}/node_modules/readable-stream/LICENSE (100%) create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/README.md create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown rename node_modules/{archiver => gulp/node_modules/gulp-util}/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md (100%) rename node_modules/{crc32-stream => gulp/node_modules/gulp-util}/node_modules/readable-stream/duplex.js (100%) rename node_modules/{archiver => gulp/node_modules/gulp-util}/node_modules/readable-stream/lib/_stream_duplex.js (100%) rename node_modules/{archiver => gulp/node_modules/gulp-util}/node_modules/readable-stream/lib/_stream_passthrough.js (100%) create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/package.json rename node_modules/{crc32-stream => gulp/node_modules/gulp-util}/node_modules/readable-stream/passthrough.js (100%) create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/readable.js rename node_modules/{crc32-stream => gulp/node_modules/gulp-util}/node_modules/readable-stream/transform.js (100%) rename node_modules/{crc32-stream => gulp/node_modules/gulp-util}/node_modules/readable-stream/writable.js (100%) create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/.npmignore create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/LICENSE create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/README.md create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/package.json create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/through2/through2.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/LICENSE create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/README.md create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/index.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js create mode 100644 node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/package.json create mode 100644 node_modules/gulp/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/gulp/node_modules/lodash.template/LICENSE create mode 100644 node_modules/gulp/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp/node_modules/lodash.template/package.json rename node_modules/{vinyl-fs/node_modules/glob => gulp/node_modules/minimatch}/LICENSE (100%) rename node_modules/{glob-stream => gulp}/node_modules/minimatch/README.md (100%) rename node_modules/{glob-stream => gulp}/node_modules/minimatch/browser.js (100%) rename node_modules/{glob-stream => gulp}/node_modules/minimatch/minimatch.js (100%) create mode 100644 node_modules/gulp/node_modules/minimatch/package.json create mode 100644 node_modules/gulp/node_modules/object-assign/index.js create mode 100644 node_modules/gulp/node_modules/object-assign/license create mode 100644 node_modules/gulp/node_modules/object-assign/package.json create mode 100644 node_modules/gulp/node_modules/object-assign/readme.md rename node_modules/{ => gulp/node_modules}/ordered-read-streams/.npmignore (100%) rename node_modules/{ => gulp/node_modules}/ordered-read-streams/.travis.yml (100%) rename node_modules/{vinyl-fs => gulp}/node_modules/ordered-read-streams/LICENSE (100%) rename node_modules/{vinyl-fs => gulp}/node_modules/ordered-read-streams/README.md (100%) create mode 100644 node_modules/gulp/node_modules/ordered-read-streams/index.js create mode 100644 node_modules/gulp/node_modules/ordered-read-streams/package.json rename node_modules/{ => gulp/node_modules}/ordered-read-streams/test/main.js (100%) create mode 100644 node_modules/gulp/node_modules/readable-stream/node_modules/isarray/README.md create mode 100644 node_modules/gulp/node_modules/readable-stream/node_modules/isarray/build/build.js rename node_modules/{lazystream => gulp/node_modules/readable-stream}/node_modules/isarray/component.json (100%) create mode 100644 node_modules/gulp/node_modules/readable-stream/node_modules/isarray/index.js create mode 100644 node_modules/gulp/node_modules/readable-stream/node_modules/isarray/package.json create mode 100644 node_modules/gulp/node_modules/replace-ext/.npmignore create mode 100644 node_modules/gulp/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/gulp/node_modules/replace-ext/LICENSE create mode 100644 node_modules/gulp/node_modules/replace-ext/README.md create mode 100644 node_modules/gulp/node_modules/replace-ext/index.js create mode 100644 node_modules/gulp/node_modules/replace-ext/package.json create mode 100644 node_modules/gulp/node_modules/replace-ext/test/main.js rename node_modules/{ => gulp/node_modules}/unique-stream/.npmignore (100%) rename node_modules/{ => gulp/node_modules}/unique-stream/.travis.yml (100%) rename node_modules/{vinyl-fs => gulp}/node_modules/unique-stream/LICENSE (100%) create mode 100644 node_modules/gulp/node_modules/unique-stream/README.md create mode 100644 node_modules/gulp/node_modules/unique-stream/index.js create mode 100644 node_modules/gulp/node_modules/unique-stream/package.json rename node_modules/{ => gulp/node_modules}/unique-stream/test/index.js (100%) create mode 120000 node_modules/gulp/node_modules/vinyl-fs/node_modules/.bin/mkdirp create mode 120000 node_modules/gulp/node_modules/vinyl-fs/node_modules/.bin/strip-bom create mode 120000 node_modules/invariant/node_modules/.bin/loose-envify delete mode 100644 node_modules/is-absolute/node_modules/is-windows/LICENSE delete mode 100644 node_modules/is-absolute/node_modules/is-windows/README.md delete mode 100644 node_modules/is-absolute/node_modules/is-windows/index.js delete mode 100644 node_modules/is-absolute/node_modules/is-windows/package.json rename node_modules/{bl/node_modules => }/isarray/.npmignore (100%) rename node_modules/{bl/node_modules => }/isarray/.travis.yml (100%) rename node_modules/{archiver/node_modules => }/isarray/Makefile (100%) rename node_modules/{archiver/node_modules => }/isarray/test.js (100%) delete mode 100644 node_modules/isobject/node_modules/isarray/.npmignore delete mode 100644 node_modules/isobject/node_modules/isarray/.travis.yml delete mode 100644 node_modules/isobject/node_modules/isarray/Makefile delete mode 100644 node_modules/isobject/node_modules/isarray/README.md delete mode 100644 node_modules/isobject/node_modules/isarray/index.js delete mode 100644 node_modules/isobject/node_modules/isarray/package.json delete mode 100644 node_modules/isobject/node_modules/isarray/test.js create mode 100644 node_modules/istanbul-lib-instrument/.nyc_output/7b502358b3b753fdfd3ea908241822c5.json create mode 100644 node_modules/istanbul-lib-instrument/.nyc_output/90393c02039ac688911f97e2beef256f.json create mode 100644 node_modules/istanbul-lib-instrument/dist/constants.js create mode 100644 node_modules/istanbul-lib-instrument/dist/read-coverage.js create mode 120000 node_modules/istanbul-lib-instrument/node_modules/.bin/babylon create mode 120000 node_modules/istanbul-lib-instrument/node_modules/.bin/semver create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/LICENSE create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/README.md create mode 100755 node_modules/istanbul-lib-instrument/node_modules/semver/bin/semver create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/package.json create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/range.bnf create mode 100644 node_modules/istanbul-lib-instrument/node_modules/semver/semver.js rename node_modules/jade/node_modules/mkdirp/{.npmignore => .gitignore} (100%) delete mode 100644 node_modules/lazystream/node_modules/isarray/.npmignore delete mode 100644 node_modules/lazystream/node_modules/isarray/.travis.yml delete mode 100644 node_modules/lazystream/node_modules/isarray/Makefile delete mode 100644 node_modules/lazystream/node_modules/isarray/README.md delete mode 100644 node_modules/lazystream/node_modules/isarray/index.js delete mode 100644 node_modules/lazystream/node_modules/isarray/package.json delete mode 100644 node_modules/lazystream/node_modules/isarray/test.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/lazystream/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/lazystream/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/lazystream/node_modules/readable-stream/README.md delete mode 100644 node_modules/lazystream/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/lazystream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/lazystream/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/package.json delete mode 100644 node_modules/lazystream/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/readable.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/transform.js delete mode 100644 node_modules/lazystream/node_modules/readable-stream/writable.js rename node_modules/{gulp-gzip/node_modules/lodash._reinterpolate => lodash.template}/LICENSE.txt (100%) rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.escape/LICENSE.txt (100%) rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.escape/README.md (100%) rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.escape/index.js (100%) create mode 100644 node_modules/lodash.template/node_modules/lodash.escape/package.json rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.keys/LICENSE.txt (100%) rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.keys/README.md (100%) rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.keys/index.js (100%) create mode 100644 node_modules/lodash.template/node_modules/lodash.keys/package.json rename node_modules/{gulp-gzip/node_modules/lodash.template => lodash.template/node_modules/lodash.templatesettings}/LICENSE.txt (100%) rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.templatesettings/README.md (100%) rename node_modules/{gulp-gzip => lodash.template}/node_modules/lodash.templatesettings/index.js (100%) create mode 100644 node_modules/lodash.template/node_modules/lodash.templatesettings/package.json create mode 100644 node_modules/lodash.templatesettings/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/lodash.templatesettings/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/lodash.templatesettings/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/lodash.templatesettings/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/lodash/LICENSE rename node_modules/{archiver-utils/node_modules => }/lodash/_DataView.js (100%) create mode 100644 node_modules/lodash/_Hash.js rename node_modules/{archiver-utils/node_modules => }/lodash/_LazyWrapper.js (100%) create mode 100644 node_modules/lodash/_ListCache.js rename node_modules/{archiver-utils/node_modules => }/lodash/_LodashWrapper.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_Map.js (100%) create mode 100644 node_modules/lodash/_MapCache.js rename node_modules/{archiver-utils/node_modules => }/lodash/_Promise.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_Set.js (100%) create mode 100644 node_modules/lodash/_SetCache.js rename node_modules/{archiver-utils/node_modules => }/lodash/_Stack.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_Symbol.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_Uint8Array.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_WeakMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_addMapEntry.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_addSetEntry.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_apply.js (100%) create mode 100644 node_modules/lodash/_arrayAggregator.js create mode 100644 node_modules/lodash/_arrayEach.js create mode 100644 node_modules/lodash/_arrayEachRight.js create mode 100644 node_modules/lodash/_arrayEvery.js create mode 100644 node_modules/lodash/_arrayFilter.js create mode 100644 node_modules/lodash/_arrayIncludes.js create mode 100644 node_modules/lodash/_arrayIncludesWith.js rename node_modules/{archiver-utils/node_modules => }/lodash/_arrayLikeKeys.js (100%) create mode 100644 node_modules/lodash/_arrayMap.js rename node_modules/{archiver-utils/node_modules => }/lodash/_arrayPush.js (100%) create mode 100644 node_modules/lodash/_arrayReduce.js create mode 100644 node_modules/lodash/_arrayReduceRight.js rename node_modules/{archiver-utils/node_modules => }/lodash/_arraySample.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_arraySampleSize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_arrayShuffle.js (100%) create mode 100644 node_modules/lodash/_arraySome.js rename node_modules/{archiver-utils/node_modules => }/lodash/_asciiSize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_asciiToArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_asciiWords.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_assignInDefaults.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_assignMergeValue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_assignValue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_assocIndexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseAggregator.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseAssign.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseAssignValue.js (100%) create mode 100644 node_modules/lodash/_baseAt.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseClamp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseClone.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseConforms.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseConformsTo.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseCreate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseDelay.js (100%) create mode 100644 node_modules/lodash/_baseDifference.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseEach.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseEachRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseEvery.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseExtremum.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseFill.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseFilter.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseFindIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseFindKey.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseFlatten.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseFor.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseForOwn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseForOwnRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseForRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseFunctions.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseGet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseGetAllKeys.js (100%) create mode 100644 node_modules/lodash/_baseGetTag.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseGt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseHas.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseHasIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseInRange.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIndexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIndexOfWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIntersection.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseInverter.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseInvoke.js (100%) create mode 100644 node_modules/lodash/_baseIsArguments.js create mode 100644 node_modules/lodash/_baseIsArrayBuffer.js create mode 100644 node_modules/lodash/_baseIsDate.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIsEqual.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIsEqualDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIsMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIsMatch.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIsNaN.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIsNative.js (100%) create mode 100644 node_modules/lodash/_baseIsRegExp.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIsSet.js (100%) create mode 100644 node_modules/lodash/_baseIsTypedArray.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseIteratee.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseKeys.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseKeysIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseLodash.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseLt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseMatches.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseMatchesProperty.js (100%) create mode 100644 node_modules/lodash/_baseMean.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseMerge.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseMergeDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseNth.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseOrderBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_basePick.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_basePickBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseProperty.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_basePropertyDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_basePropertyOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_basePullAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_basePullAt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseRandom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseRange.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseReduce.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseRepeat.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseRest.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSample.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSampleSize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSetData.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSetToString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseShuffle.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSlice.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSome.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSortBy.js (100%) create mode 100644 node_modules/lodash/_baseSortedIndex.js create mode 100644 node_modules/lodash/_baseSortedIndexBy.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSortedUniq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseSum.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseTimes.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseToNumber.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseToPairs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseToString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseUnary.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseUniq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseUnset.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseUpdate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseValues.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseWhile.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_baseWrapperValue.js (100%) create mode 100644 node_modules/lodash/_baseXor.js rename node_modules/{archiver-utils/node_modules => }/lodash/_baseZipObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cacheHas.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_castArrayLikeObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_castFunction.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_castPath.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_castRest.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_castSlice.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_charsEndIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_charsStartIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneArrayBuffer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneBuffer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneDataView.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneRegExp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneSymbol.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_cloneTypedArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_compareAscending.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_compareMultiple.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_composeArgs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_composeArgsRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_copyArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_copyObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_copySymbols.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_coreJsData.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_countHolders.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createAggregator.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createAssigner.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createBaseEach.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createBaseFor.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createBind.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createCaseFirst.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createCompounder.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createCtor.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createCurry.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createFind.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createFlow.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createHybrid.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createInverter.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createMathOperation.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createOver.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createPadding.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createPartial.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createRange.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createRecurry.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createRelationalOperation.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createRound.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createToPairs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_createWrap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_deburrLetter.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_defineProperty.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_equalArrays.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_equalByTag.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_equalObjects.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_escapeHtmlChar.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_escapeStringChar.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_flatRest.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_freeGlobal.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getAllKeys.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getAllKeysIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getData.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getFuncName.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getHolder.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getMapData.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getMatchData.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getNative.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getPrototype.js (100%) create mode 100644 node_modules/lodash/_getRawTag.js rename node_modules/{archiver-utils/node_modules => }/lodash/_getSymbols.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getSymbolsIn.js (100%) create mode 100644 node_modules/lodash/_getTag.js rename node_modules/{archiver-utils/node_modules => }/lodash/_getValue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getView.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_getWrapDetails.js (100%) create mode 100644 node_modules/lodash/_hasPath.js rename node_modules/{archiver-utils/node_modules => }/lodash/_hasUnicode.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_hasUnicodeWord.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_hashClear.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_hashDelete.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_hashGet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_hashHas.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_hashSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_initCloneArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_initCloneByTag.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_initCloneObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_insertWrapDetails.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isFlattenable.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isIterateeCall.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isKey.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isKeyable.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isLaziable.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isMaskable.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isMasked.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isPrototype.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_isStrictComparable.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_iteratorToArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_lazyClone.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_lazyReverse.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_lazyValue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_listCacheClear.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_listCacheDelete.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_listCacheGet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_listCacheHas.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_listCacheSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mapCacheClear.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mapCacheDelete.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mapCacheGet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mapCacheHas.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mapCacheSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mapToArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_matchesStrictComparable.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_memoizeCapped.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mergeData.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_mergeDefaults.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_metaMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_nativeCreate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_nativeKeys.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_nativeKeysIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_nodeUtil.js (100%) create mode 100644 node_modules/lodash/_objectToString.js rename node_modules/{archiver-utils/node_modules => }/lodash/_overArg.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_overRest.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_parent.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_reEscape.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_reEvaluate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_reInterpolate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_realNames.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_reorder.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_replaceHolders.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_root.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_setCacheAdd.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_setCacheHas.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_setData.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_setToArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_setToPairs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_setToString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_setWrapToString.js (100%) create mode 100644 node_modules/lodash/_shortOut.js rename node_modules/{archiver-utils/node_modules => }/lodash/_shuffleSelf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stackClear.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stackDelete.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stackGet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stackHas.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stackSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_strictIndexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_strictLastIndexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stringSize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stringToArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_stringToPath.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_toKey.js (100%) create mode 100644 node_modules/lodash/_toSource.js rename node_modules/{archiver-utils/node_modules => }/lodash/_unescapeHtmlChar.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_unicodeSize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_unicodeToArray.js (100%) create mode 100644 node_modules/lodash/_unicodeWords.js rename node_modules/{archiver-utils/node_modules => }/lodash/_updateWrapDetails.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/_wrapperClone.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/add.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/after.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/array.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/ary.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/assign.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/assignIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/assignInWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/assignWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/at.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/attempt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/before.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/bind.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/bindAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/bindKey.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/camelCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/capitalize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/castArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/ceil.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/chain.js (100%) create mode 100644 node_modules/lodash/chunk.js rename node_modules/{archiver-utils/node_modules => }/lodash/clamp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/clone.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/cloneDeep.js (100%) create mode 100644 node_modules/lodash/cloneDeepWith.js create mode 100644 node_modules/lodash/cloneWith.js rename node_modules/{archiver-utils/node_modules => }/lodash/collection.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/commit.js (100%) create mode 100644 node_modules/lodash/compact.js rename node_modules/{archiver-utils/node_modules => }/lodash/concat.js (100%) create mode 100644 node_modules/lodash/cond.js rename node_modules/{archiver-utils/node_modules => }/lodash/conforms.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/conformsTo.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/constant.js (100%) create mode 100644 node_modules/lodash/core.js create mode 100644 node_modules/lodash/core.min.js create mode 100644 node_modules/lodash/countBy.js create mode 100644 node_modules/lodash/create.js rename node_modules/{archiver-utils/node_modules => }/lodash/curry.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/curryRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/date.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/debounce.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/deburr.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/defaultTo.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/defaults.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/defaultsDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/defer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/delay.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/difference.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/differenceBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/differenceWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/divide.js (100%) create mode 100644 node_modules/lodash/drop.js create mode 100644 node_modules/lodash/dropRight.js rename node_modules/{archiver-utils/node_modules => }/lodash/dropRightWhile.js (100%) create mode 100644 node_modules/lodash/dropWhile.js rename node_modules/{archiver-utils/node_modules => }/lodash/each.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/eachRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/endsWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/entries.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/entriesIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/eq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/escape.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/escapeRegExp.js (100%) create mode 100644 node_modules/lodash/every.js rename node_modules/{archiver-utils/node_modules => }/lodash/extend.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/extendWith.js (100%) create mode 100644 node_modules/lodash/fill.js create mode 100644 node_modules/lodash/filter.js create mode 100644 node_modules/lodash/find.js create mode 100644 node_modules/lodash/findIndex.js rename node_modules/{archiver-utils/node_modules => }/lodash/findKey.js (100%) create mode 100644 node_modules/lodash/findLast.js create mode 100644 node_modules/lodash/findLastIndex.js rename node_modules/{archiver-utils/node_modules => }/lodash/findLastKey.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/first.js (100%) create mode 100644 node_modules/lodash/flatMap.js create mode 100644 node_modules/lodash/flatMapDeep.js create mode 100644 node_modules/lodash/flatMapDepth.js create mode 100644 node_modules/lodash/flatten.js create mode 100644 node_modules/lodash/flattenDeep.js create mode 100644 node_modules/lodash/flattenDepth.js rename node_modules/{archiver-utils/node_modules => }/lodash/flip.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/floor.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/flow.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/flowRight.js (100%) create mode 100644 node_modules/lodash/forEach.js create mode 100644 node_modules/lodash/forEachRight.js create mode 100644 node_modules/lodash/forIn.js create mode 100644 node_modules/lodash/forInRight.js create mode 100644 node_modules/lodash/forOwn.js create mode 100644 node_modules/lodash/forOwnRight.js rename node_modules/{archiver-utils/node_modules => }/lodash/fp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/F.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/T.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/__.js (100%) create mode 100644 node_modules/lodash/fp/_baseConvert.js rename node_modules/{archiver-utils/node_modules => }/lodash/fp/_convertBrowser.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/_falseOptions.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/_mapping.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/_util.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/add.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/after.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/all.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/allPass.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/always.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/any.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/anyPass.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/apply.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/array.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/ary.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assign.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assignAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assignAllWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assignIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assignInAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assignInAllWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assignInWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assignWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assoc.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/assocPath.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/at.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/attempt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/before.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/bind.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/bindAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/bindKey.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/camelCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/capitalize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/castArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/ceil.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/chain.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/chunk.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/clamp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/clone.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/cloneDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/cloneDeepWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/cloneWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/collection.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/commit.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/compact.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/complement.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/compose.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/concat.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/cond.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/conforms.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/conformsTo.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/constant.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/contains.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/convert.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/countBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/create.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/curry.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/curryN.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/curryRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/curryRightN.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/date.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/debounce.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/deburr.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/defaultTo.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/defaults.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/defaultsAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/defaultsDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/defaultsDeepAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/defer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/delay.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/difference.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/differenceBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/differenceWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/dissoc.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/dissocPath.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/divide.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/drop.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/dropLast.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/dropLastWhile.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/dropRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/dropRightWhile.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/dropWhile.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/each.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/eachRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/endsWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/entries.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/entriesIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/eq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/equals.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/escape.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/escapeRegExp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/every.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/extend.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/extendAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/extendAllWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/extendWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/fill.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/filter.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/find.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findIndexFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findKey.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findLast.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findLastFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findLastIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findLastIndexFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/findLastKey.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/first.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flatMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flatMapDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flatMapDepth.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flatten.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flattenDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flattenDepth.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flip.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/floor.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flow.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/flowRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/forEach.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/forEachRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/forIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/forInRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/forOwn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/forOwnRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/fromPairs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/function.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/functions.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/functionsIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/get.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/getOr.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/groupBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/gt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/gte.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/has.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/hasIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/head.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/identical.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/identity.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/inRange.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/includes.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/includesFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/indexBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/indexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/indexOfFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/init.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/initial.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/intersection.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/intersectionBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/intersectionWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/invert.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/invertBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/invertObj.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/invoke.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/invokeArgs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/invokeArgsMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/invokeMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isArguments.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isArrayBuffer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isArrayLike.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isArrayLikeObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isBoolean.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isBuffer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isDate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isElement.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isEmpty.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isEqual.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isEqualWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isError.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isFinite.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isFunction.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isLength.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isMatch.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isMatchWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isNaN.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isNative.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isNil.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isNull.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isNumber.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isObjectLike.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isPlainObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isRegExp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isSafeInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isSymbol.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isTypedArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isUndefined.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isWeakMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/isWeakSet.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/iteratee.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/join.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/juxt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/kebabCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/keyBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/keys.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/keysIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/lang.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/last.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/lastIndexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/lastIndexOfFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/lowerCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/lowerFirst.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/lt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/lte.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/map.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/mapKeys.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/mapValues.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/matches.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/matchesProperty.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/math.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/max.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/maxBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/mean.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/meanBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/memoize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/merge.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/mergeAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/mergeAllWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/mergeWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/method.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/methodOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/min.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/minBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/mixin.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/multiply.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/nAry.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/negate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/next.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/noop.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/now.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/nth.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/nthArg.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/number.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/object.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/omit.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/omitAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/omitBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/once.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/orderBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/over.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/overArgs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/overEvery.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/overSome.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pad.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/padChars.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/padCharsEnd.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/padCharsStart.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/padEnd.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/padStart.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/parseInt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/partial.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/partialRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/partition.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/path.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pathEq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pathOr.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/paths.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pick.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pickAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pickBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pipe.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/placeholder.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/plant.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pluck.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/prop.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/propEq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/propOr.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/property.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/propertyOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/props.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pull.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pullAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pullAllBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pullAllWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/pullAt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/random.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/range.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/rangeRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/rangeStep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/rangeStepRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/rearg.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/reduce.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/reduceRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/reject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/remove.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/repeat.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/replace.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/rest.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/restFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/result.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/reverse.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/round.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sample.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sampleSize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/seq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/set.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/setWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/shuffle.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/size.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/slice.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/snakeCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/some.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedIndexBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedIndexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedLastIndex.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedLastIndexBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedLastIndexOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedUniq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sortedUniqBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/split.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/spread.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/spreadFrom.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/startCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/startsWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/string.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/stubArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/stubFalse.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/stubObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/stubString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/stubTrue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/subtract.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sum.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/sumBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/symmetricDifference.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/symmetricDifferenceBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/symmetricDifferenceWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/tail.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/take.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/takeLast.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/takeLastWhile.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/takeRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/takeRightWhile.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/takeWhile.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/tap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/template.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/templateSettings.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/throttle.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/thru.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/times.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toFinite.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toIterator.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toJSON.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toLength.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toLower.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toNumber.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toPairs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toPairsIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toPath.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toPlainObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toSafeInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/toUpper.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/transform.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/trim.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/trimChars.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/trimCharsEnd.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/trimCharsStart.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/trimEnd.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/trimStart.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/truncate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unapply.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unary.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unescape.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/union.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unionBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unionWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/uniq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/uniqBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/uniqWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/uniqueId.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unnest.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unset.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unzip.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/unzipWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/update.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/updateWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/upperCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/upperFirst.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/useWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/util.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/value.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/valueOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/values.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/valuesIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/where.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/whereEq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/without.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/words.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/wrap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/wrapperAt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/wrapperChain.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/wrapperLodash.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/wrapperReverse.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/wrapperValue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/xor.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/xorBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/xorWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/zip.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/zipAll.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/zipObj.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/zipObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/zipObjectDeep.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/fp/zipWith.js (100%) create mode 100644 node_modules/lodash/fromPairs.js rename node_modules/{archiver-utils/node_modules => }/lodash/function.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/functions.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/functionsIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/get.js (100%) create mode 100644 node_modules/lodash/groupBy.js rename node_modules/{archiver-utils/node_modules => }/lodash/gt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/gte.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/has.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/hasIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/head.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/identity.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/inRange.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/includes.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/index.js (100%) create mode 100644 node_modules/lodash/indexOf.js create mode 100644 node_modules/lodash/initial.js rename node_modules/{archiver-utils/node_modules => }/lodash/intersection.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/intersectionBy.js (100%) create mode 100644 node_modules/lodash/intersectionWith.js rename node_modules/{archiver-utils/node_modules => }/lodash/invert.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/invertBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/invoke.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/invokeMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isArguments.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isArrayBuffer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isArrayLike.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isArrayLikeObject.js (100%) create mode 100644 node_modules/lodash/isBoolean.js rename node_modules/{archiver-utils/node_modules => }/lodash/isBuffer.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isDate.js (100%) create mode 100644 node_modules/lodash/isElement.js create mode 100644 node_modules/lodash/isEmpty.js rename node_modules/{archiver-utils/node_modules => }/lodash/isEqual.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isEqualWith.js (100%) create mode 100644 node_modules/lodash/isError.js rename node_modules/{archiver-utils/node_modules => }/lodash/isFinite.js (100%) create mode 100644 node_modules/lodash/isFunction.js rename node_modules/{archiver-utils/node_modules => }/lodash/isInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isLength.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isMap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isMatch.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isMatchWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isNaN.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isNative.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isNil.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isNull.js (100%) create mode 100644 node_modules/lodash/isNumber.js rename node_modules/{archiver-utils/node_modules => }/lodash/isObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isObjectLike.js (100%) create mode 100644 node_modules/lodash/isPlainObject.js rename node_modules/{archiver-utils/node_modules => }/lodash/isRegExp.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isSafeInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isSet.js (100%) create mode 100644 node_modules/lodash/isString.js create mode 100644 node_modules/lodash/isSymbol.js rename node_modules/{archiver-utils/node_modules => }/lodash/isTypedArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isUndefined.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/isWeakMap.js (100%) create mode 100644 node_modules/lodash/isWeakSet.js rename node_modules/{archiver-utils/node_modules => }/lodash/iteratee.js (100%) create mode 100644 node_modules/lodash/join.js rename node_modules/{archiver-utils/node_modules => }/lodash/kebabCase.js (100%) create mode 100644 node_modules/lodash/keyBy.js rename node_modules/{archiver-utils/node_modules => }/lodash/keys.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/keysIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/lang.js (100%) create mode 100644 node_modules/lodash/last.js create mode 100644 node_modules/lodash/lastIndexOf.js create mode 100644 node_modules/lodash/lodash.js create mode 100644 node_modules/lodash/lodash.min.js rename node_modules/{archiver-utils/node_modules => }/lodash/lowerCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/lowerFirst.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/lt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/lte.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/map.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/mapKeys.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/mapValues.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/matches.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/matchesProperty.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/math.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/max.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/maxBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/mean.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/meanBy.js (100%) create mode 100644 node_modules/lodash/memoize.js rename node_modules/{archiver-utils/node_modules => }/lodash/merge.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/mergeWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/method.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/methodOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/min.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/minBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/mixin.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/multiply.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/negate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/next.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/noop.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/now.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/nth.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/nthArg.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/number.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/object.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/omit.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/omitBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/once.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/orderBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/over.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/overArgs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/overEvery.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/overSome.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/pad.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/padEnd.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/padStart.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/parseInt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/partial.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/partialRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/partition.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/pick.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/pickBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/plant.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/property.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/propertyOf.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/pull.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/pullAll.js (100%) create mode 100644 node_modules/lodash/pullAllBy.js rename node_modules/{archiver-utils/node_modules => }/lodash/pullAllWith.js (100%) create mode 100644 node_modules/lodash/pullAt.js rename node_modules/{archiver-utils/node_modules => }/lodash/random.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/range.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/rangeRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/rearg.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/reduce.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/reduceRight.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/reject.js (100%) create mode 100644 node_modules/lodash/remove.js rename node_modules/{archiver-utils/node_modules => }/lodash/repeat.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/replace.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/rest.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/result.js (100%) create mode 100644 node_modules/lodash/reverse.js rename node_modules/{archiver-utils/node_modules => }/lodash/round.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/sample.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/sampleSize.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/seq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/set.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/setWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/shuffle.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/size.js (100%) create mode 100644 node_modules/lodash/slice.js rename node_modules/{archiver-utils/node_modules => }/lodash/snakeCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/some.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/sortBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/sortedIndex.js (100%) create mode 100644 node_modules/lodash/sortedIndexBy.js create mode 100644 node_modules/lodash/sortedIndexOf.js rename node_modules/{archiver-utils/node_modules => }/lodash/sortedLastIndex.js (100%) create mode 100644 node_modules/lodash/sortedLastIndexBy.js create mode 100644 node_modules/lodash/sortedLastIndexOf.js rename node_modules/{archiver-utils/node_modules => }/lodash/sortedUniq.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/sortedUniqBy.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/split.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/spread.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/startCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/startsWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/string.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/stubArray.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/stubFalse.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/stubObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/stubString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/stubTrue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/subtract.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/sum.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/sumBy.js (100%) create mode 100644 node_modules/lodash/tail.js rename node_modules/{archiver-utils/node_modules => }/lodash/take.js (100%) create mode 100644 node_modules/lodash/takeRight.js create mode 100644 node_modules/lodash/takeRightWhile.js create mode 100644 node_modules/lodash/takeWhile.js rename node_modules/{archiver-utils/node_modules => }/lodash/tap.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/template.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/templateSettings.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/throttle.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/thru.js (100%) create mode 100644 node_modules/lodash/times.js create mode 100644 node_modules/lodash/toArray.js rename node_modules/{archiver-utils/node_modules => }/lodash/toFinite.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toIterator.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toJSON.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toLength.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toLower.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toNumber.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toPairs.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toPairsIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toPath.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toPlainObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toSafeInteger.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toString.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/toUpper.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/transform.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/trim.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/trimEnd.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/trimStart.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/truncate.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/unary.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/unescape.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/union.js (100%) create mode 100644 node_modules/lodash/unionBy.js create mode 100644 node_modules/lodash/unionWith.js create mode 100644 node_modules/lodash/uniq.js create mode 100644 node_modules/lodash/uniqBy.js create mode 100644 node_modules/lodash/uniqWith.js rename node_modules/{archiver-utils/node_modules => }/lodash/uniqueId.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/unset.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/unzip.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/unzipWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/update.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/updateWith.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/upperCase.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/upperFirst.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/util.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/value.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/valueOf.js (100%) create mode 100644 node_modules/lodash/values.js rename node_modules/{archiver-utils/node_modules => }/lodash/valuesIn.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/without.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/words.js (100%) create mode 100644 node_modules/lodash/wrap.js rename node_modules/{archiver-utils/node_modules => }/lodash/wrapperAt.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/wrapperChain.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/wrapperLodash.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/wrapperReverse.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/wrapperValue.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/xor.js (100%) create mode 100644 node_modules/lodash/xorBy.js create mode 100644 node_modules/lodash/xorWith.js rename node_modules/{archiver-utils/node_modules => }/lodash/zip.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/zipObject.js (100%) rename node_modules/{archiver-utils/node_modules => }/lodash/zipObjectDeep.js (100%) create mode 100644 node_modules/lodash/zipWith.js create mode 100644 node_modules/loose-envify/LICENSE delete mode 100644 node_modules/loose-envify/node_modules/js-tokens/LICENSE delete mode 100644 node_modules/loose-envify/node_modules/js-tokens/changelog.md delete mode 100644 node_modules/loose-envify/node_modules/js-tokens/index.js delete mode 100644 node_modules/loose-envify/node_modules/js-tokens/package.json delete mode 100644 node_modules/loose-envify/node_modules/js-tokens/readme.md delete mode 100644 node_modules/merge-stream/node_modules/isarray/.npmignore delete mode 100644 node_modules/merge-stream/node_modules/isarray/.travis.yml delete mode 100644 node_modules/merge-stream/node_modules/isarray/Makefile delete mode 100644 node_modules/merge-stream/node_modules/isarray/README.md delete mode 100644 node_modules/merge-stream/node_modules/isarray/component.json delete mode 100644 node_modules/merge-stream/node_modules/isarray/index.js delete mode 100644 node_modules/merge-stream/node_modules/isarray/package.json delete mode 100644 node_modules/merge-stream/node_modules/isarray/test.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/README.md delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/package.json delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/readable.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/transform.js delete mode 100644 node_modules/merge-stream/node_modules/readable-stream/writable.js create mode 120000 node_modules/mocha/node_modules/.bin/jade create mode 120000 node_modules/mocha/node_modules/.bin/mkdirp delete mode 100644 node_modules/mocha/node_modules/escape-string-regexp/index.js delete mode 100644 node_modules/mocha/node_modules/escape-string-regexp/package.json delete mode 100644 node_modules/mocha/node_modules/escape-string-regexp/readme.md delete mode 100644 node_modules/mocha/node_modules/supports-color/index.js delete mode 100644 node_modules/mocha/node_modules/supports-color/package.json delete mode 100644 node_modules/mocha/node_modules/supports-color/readme.md delete mode 120000 node_modules/nomnom/node_modules/.bin/strip-ansi create mode 120000 node_modules/nomnom/node_modules/chalk/node_modules/.bin/strip-ansi rename node_modules/{ => normalize-package-data/node_modules}/.bin/semver (100%) create mode 100644 node_modules/normalize-package-data/node_modules/semver/LICENSE create mode 100644 node_modules/normalize-package-data/node_modules/semver/README.md create mode 100755 node_modules/normalize-package-data/node_modules/semver/bin/semver create mode 100644 node_modules/normalize-package-data/node_modules/semver/package.json create mode 100644 node_modules/normalize-package-data/node_modules/semver/range.bnf create mode 100644 node_modules/normalize-package-data/node_modules/semver/semver.js create mode 100644 node_modules/options/.npmignore create mode 100644 node_modules/options/Makefile create mode 100644 node_modules/options/README.md create mode 100644 node_modules/options/lib/options.js create mode 100644 node_modules/options/package.json create mode 100644 node_modules/path-dirname/index.js create mode 100644 node_modules/path-dirname/license create mode 100644 node_modules/path-dirname/package.json create mode 100644 node_modules/path-dirname/readme.md create mode 100644 node_modules/po2json/.gitignore create mode 100644 node_modules/po2json/test/fixtures/ja-jed1.x.json rename node_modules/{archiver-utils/node_modules => }/readable-stream/.travis.yml (100%) rename node_modules/{archiver-utils/node_modules => }/readable-stream/doc/stream.md (100%) rename node_modules/{compress-commons/node_modules => }/readable-stream/doc/wg-meetings/2015-01-30.md (100%) rename node_modules/{archiver-utils/node_modules => }/readable-stream/lib/internal/streams/BufferList.js (100%) create mode 120000 node_modules/redent/node_modules/.bin/strip-indent create mode 100644 node_modules/sax/AUTHORS create mode 100644 node_modules/sax/LICENSE create mode 100644 node_modules/sax/LICENSE-W3C.html create mode 100644 node_modules/sax/README.md create mode 100644 node_modules/sax/examples/big-not-pretty.xml create mode 100644 node_modules/sax/examples/example.js create mode 100644 node_modules/sax/examples/get-products.js create mode 100644 node_modules/sax/examples/hello-world.js create mode 100644 node_modules/sax/examples/not-pretty.xml create mode 100644 node_modules/sax/examples/pretty-print.js create mode 100644 node_modules/sax/examples/shopping.xml create mode 100644 node_modules/sax/examples/strict.dtd create mode 100644 node_modules/sax/examples/test.html create mode 100644 node_modules/sax/examples/test.xml create mode 100644 node_modules/sax/lib/sax.js create mode 100644 node_modules/sax/package.json create mode 100644 node_modules/sax/test/attribute-name.js create mode 100644 node_modules/sax/test/attribute-no-space.js create mode 100644 node_modules/sax/test/buffer-overrun.js create mode 100644 node_modules/sax/test/case.js create mode 100644 node_modules/sax/test/cdata-chunked.js create mode 100644 node_modules/sax/test/cdata-end-split.js create mode 100644 node_modules/sax/test/cdata-fake-end.js create mode 100644 node_modules/sax/test/cdata-multiple.js create mode 100644 node_modules/sax/test/cdata.js create mode 100644 node_modules/sax/test/cyrillic.js create mode 100644 node_modules/sax/test/duplicate-attribute.js create mode 100644 node_modules/sax/test/emoji.js create mode 100644 node_modules/sax/test/end_empty_stream.js create mode 100644 node_modules/sax/test/entities.js create mode 100644 node_modules/sax/test/entity-mega.js create mode 100644 node_modules/sax/test/flush.js create mode 100644 node_modules/sax/test/index.js create mode 100644 node_modules/sax/test/issue-23.js create mode 100644 node_modules/sax/test/issue-30.js create mode 100644 node_modules/sax/test/issue-35.js create mode 100644 node_modules/sax/test/issue-47.js create mode 100644 node_modules/sax/test/issue-49.js create mode 100644 node_modules/sax/test/issue-84.js create mode 100644 node_modules/sax/test/parser-position.js create mode 100644 node_modules/sax/test/script-close-better.js create mode 100644 node_modules/sax/test/script.js create mode 100644 node_modules/sax/test/self-closing-child-strict.js create mode 100644 node_modules/sax/test/self-closing-child.js create mode 100644 node_modules/sax/test/self-closing-tag.js create mode 100644 node_modules/sax/test/stray-ending.js create mode 100644 node_modules/sax/test/trailing-attribute-no-value.js create mode 100644 node_modules/sax/test/trailing-non-whitespace.js create mode 100644 node_modules/sax/test/unclosed-root.js create mode 100644 node_modules/sax/test/unquoted.js create mode 100644 node_modules/sax/test/utf8-split.js create mode 100644 node_modules/sax/test/xmlns-as-tag-name.js create mode 100644 node_modules/sax/test/xmlns-issue-41.js create mode 100644 node_modules/sax/test/xmlns-rebinding.js create mode 100644 node_modules/sax/test/xmlns-strict.js create mode 100644 node_modules/sax/test/xmlns-unbound-element.js create mode 100644 node_modules/sax/test/xmlns-unbound.js create mode 100644 node_modules/sax/test/xmlns-xml-default-ns.js create mode 100644 node_modules/sax/test/xmlns-xml-default-prefix-attribute.js create mode 100644 node_modules/sax/test/xmlns-xml-default-prefix.js create mode 100644 node_modules/sax/test/xmlns-xml-default-redefine.js create mode 100644 node_modules/selenium-webdriver/.npmignore create mode 100644 node_modules/selenium-webdriver/CHANGES.md create mode 100644 node_modules/selenium-webdriver/LICENSE create mode 100644 node_modules/selenium-webdriver/NOTICE create mode 100644 node_modules/selenium-webdriver/README.md create mode 100644 node_modules/selenium-webdriver/chrome.js create mode 100644 node_modules/selenium-webdriver/edge.js create mode 100644 node_modules/selenium-webdriver/example/chrome_android.js create mode 100644 node_modules/selenium-webdriver/example/chrome_mobile_emulation.js create mode 100644 node_modules/selenium-webdriver/example/google_search.js create mode 100644 node_modules/selenium-webdriver/example/google_search_generator.js create mode 100644 node_modules/selenium-webdriver/example/google_search_test.js create mode 100644 node_modules/selenium-webdriver/example/logging.js create mode 100644 node_modules/selenium-webdriver/example/parallel_flows.js create mode 100644 node_modules/selenium-webdriver/firefox/binary.js create mode 100644 node_modules/selenium-webdriver/firefox/extension.js create mode 100644 node_modules/selenium-webdriver/firefox/index.js create mode 100644 node_modules/selenium-webdriver/firefox/profile.js create mode 100644 node_modules/selenium-webdriver/http/index.js create mode 100644 node_modules/selenium-webdriver/http/util.js create mode 100644 node_modules/selenium-webdriver/ie.js create mode 100644 node_modules/selenium-webdriver/index.js create mode 100644 node_modules/selenium-webdriver/io/exec.js create mode 100644 node_modules/selenium-webdriver/io/index.js create mode 100644 node_modules/selenium-webdriver/lib/README create mode 100644 node_modules/selenium-webdriver/lib/actions.js create mode 100644 node_modules/selenium-webdriver/lib/by.js create mode 100644 node_modules/selenium-webdriver/lib/capabilities.js create mode 100644 node_modules/selenium-webdriver/lib/command.js create mode 100644 node_modules/selenium-webdriver/lib/devmode.js create mode 100644 node_modules/selenium-webdriver/lib/error.js create mode 100644 node_modules/selenium-webdriver/lib/events.js create mode 100644 node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so create mode 100644 node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so create mode 100644 node_modules/selenium-webdriver/lib/firefox/webdriver.json create mode 100644 node_modules/selenium-webdriver/lib/firefox/webdriver.xpi create mode 100644 node_modules/selenium-webdriver/lib/http.js create mode 100644 node_modules/selenium-webdriver/lib/input.js create mode 100644 node_modules/selenium-webdriver/lib/logging.js create mode 100644 node_modules/selenium-webdriver/lib/promise.js create mode 100644 node_modules/selenium-webdriver/lib/proxy.js create mode 100644 node_modules/selenium-webdriver/lib/safari/client.js create mode 100644 node_modules/selenium-webdriver/lib/session.js create mode 100644 node_modules/selenium-webdriver/lib/symbols.js create mode 100644 node_modules/selenium-webdriver/lib/test/build.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/ClickTest_testClicksASurroundingStrongTag.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/Page.aspx create mode 100644 node_modules/selenium-webdriver/lib/test/data/Page.aspx.cs create mode 100644 node_modules/selenium-webdriver/lib/test/data/Redirect.aspx create mode 100644 node_modules/selenium-webdriver/lib/test/data/Redirect.aspx.cs create mode 100644 node_modules/selenium-webdriver/lib/test/data/Settings.StyleCop create mode 100644 node_modules/selenium-webdriver/lib/test/data/Web.Config create mode 100644 node_modules/selenium-webdriver/lib/test/data/actualXhtmlPage.xhtml create mode 100644 node_modules/selenium-webdriver/lib/test/data/ajaxy_page.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/alerts.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/banner.gif create mode 100644 node_modules/selenium-webdriver/lib/test/data/beach.jpg create mode 100644 node_modules/selenium-webdriver/lib/test/data/blank.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/bodyTypingTest.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/booleanAttributes.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/child/childPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/child/grandchild/grandchildPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/clickEventPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_frames.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_jacker.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_out_of_bounds_overflow.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_rtl.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_source.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/click_iframe.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/click_in_iframe.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/disappearing_element.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/google_map.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/google_map.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/html5_submit_buttons.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/issue5237_target.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/link_that_wraps.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page1.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/mapped_page3.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/overlapping_elements.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/partially_overlapping_elements.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/span_that_wraps.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/submitted_page.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_tests/wrapped_overlapping_elements.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_too_big.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/click_too_big_in_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/clicks.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/closeable_window.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/cn-test.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/colorPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/cookies.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/element_in_nested_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_element_out_of_view.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_empty_element.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_fixed_element.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_hidden_element.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_invisible_element.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/page_with_transparent_element.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/coordinates_tests/simple_page.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/css/ui-lightness/jquery-ui-1.8.10.custom.css create mode 100644 node_modules/selenium-webdriver/lib/test/data/cssTransform.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/cssTransform2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/document_write_in_onload.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/dragAndDropInsideScrolledDiv.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/dragAndDropTest.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/dragDropOverflow.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/draggableLists.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/droppableItems.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/dynamic.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/dynamicallyModifiedPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/errors.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/firefox/jetpack-sample.xpi create mode 100644 node_modules/selenium-webdriver/lib/test/data/firefox/sample.xpi create mode 100644 node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScroll.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/fixedFooterNoScrollQuirksMode.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/formPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/formSelectionPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/form_handling_js_submit.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/framePage3.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frameScrollChild.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frameScrollPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frameScrollParent.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frameWithAnimals.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/bug4876_iframe.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frame_switching_tests/deletingFrame_iframe2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/frameset.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/framesetPage2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/framesetPage3.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/globalscope.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/hidden.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/hidden_partially.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/blue.jpg create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/database.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/geolocation.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/green.jpg create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/red.jpg create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/status.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/test.appcache create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5/yellow.jpg create mode 100644 node_modules/selenium-webdriver/lib/test/data/html5Page.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/icon.gif create mode 100644 node_modules/selenium-webdriver/lib/test/data/idElements.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/iframeAtBottom.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/iframeWithAlert.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/iframeWithIframe.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/iframes.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/injectableContent.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/javascriptEnhancedForm.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/javascriptPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/jquery-1.3.2.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/jquery-1.4.4.min.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/jquery-ui-1.8.10.custom.min.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.inline.min.css create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/content.min.css create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/readme.md create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.dev.svg create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.eot create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.svg create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce-small.woff create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.dev.svg create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.eot create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.svg create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.ttf create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/fonts/tinymce.woff create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/anchor.gif create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/loader.gif create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/object.gif create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/img/trans.gif create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.ie7.min.css create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/skins/lightgray/skin.min.css create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/themes/modern/theme.min.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/js/tinymce.min.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/key_tests/remove_on_keypress.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/keyboard_shortcut.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/linked_image.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/locators_tests/boolean_attribute_selected_html4.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/longContentPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/macbeth.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/map.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/map_visibility.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/markerTransparent.png create mode 100644 node_modules/selenium-webdriver/lib/test/data/messages.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/meta-redirect.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/missedJsReference.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_1.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modal_3.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/modal_dialogs/modalindex.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/mouseOver.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/mousePositionTracker.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/nestedElements.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow-body.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_auto.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_hidden.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_auto_y_scroll.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_auto.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_hidden.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_hidden_y_scroll.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_auto.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_hidden.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/overflow/x_scroll_y_scroll.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/pageWithOnBeforeUnloadMessage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/pageWithOnLoad.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/pageWithOnUnload.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/page_with_link_to_slow_loading_page.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/plain.txt create mode 100644 node_modules/selenium-webdriver/lib/test/data/proxy/page1.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/proxy/page2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/proxy/page3.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/readOnlyPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/rectangles.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/resultPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/rich_text.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/safari/frames_benchmark.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen.css create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen.js create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_frame1.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_frame2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_frames.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_iframes.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_too_long.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_x_long.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_x_too_long.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_y_long.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/screen/screen_y_too_long.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scroll.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scroll2.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scroll3.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scroll4.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scroll5.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_200.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_height_above_2000.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/frame_with_small_height.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_double_overflow_auto.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_frame_out_of_view.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_non_scrolling_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_scrolling_frame_out_of_view.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_tall_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/page_with_y_overflow_auto.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/scrolling_tests/target_page.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/selectPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/selectableItems.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/sessionCookie.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/sessionCookieDest.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/simple.xml create mode 100644 node_modules/selenium-webdriver/lib/test/data/simpleTest.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/slowLoadingAlert.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/slowLoadingResourcePage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/slow_loading_iframes.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/styledPage.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/svgPiechart.xhtml create mode 100644 node_modules/selenium-webdriver/lib/test/data/svgTest.svg create mode 100644 node_modules/selenium-webdriver/lib/test/data/tables.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/tinymce.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/transformable.xml create mode 100644 node_modules/selenium-webdriver/lib/test/data/transformable.xsl create mode 100644 node_modules/selenium-webdriver/lib/test/data/transparentUpload.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/underscore.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/unicode_ltr.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/upload.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/userDefinedProperty.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/veryLargeCanvas.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/visibility-css.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/win32frameset.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/window_switching_tests/page_with_frame.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/window_switching_tests/simple_page.html create mode 100644 node_modules/selenium-webdriver/lib/test/data/xhtmlFormPage.xhtml create mode 100644 node_modules/selenium-webdriver/lib/test/data/xhtmlTest.html create mode 100644 node_modules/selenium-webdriver/lib/test/fileserver.js create mode 100644 node_modules/selenium-webdriver/lib/test/httpserver.js create mode 100644 node_modules/selenium-webdriver/lib/test/index.js create mode 100644 node_modules/selenium-webdriver/lib/test/resources.js create mode 100644 node_modules/selenium-webdriver/lib/until.js create mode 100644 node_modules/selenium-webdriver/lib/webdriver.js create mode 100644 node_modules/selenium-webdriver/net/index.js create mode 100644 node_modules/selenium-webdriver/net/portprober.js create mode 120000 node_modules/selenium-webdriver/node_modules/.bin/rimraf create mode 100644 node_modules/selenium-webdriver/opera.js create mode 100644 node_modules/selenium-webdriver/package.json create mode 100644 node_modules/selenium-webdriver/phantomjs.js create mode 100644 node_modules/selenium-webdriver/proxy.js create mode 100644 node_modules/selenium-webdriver/remote/index.js create mode 100644 node_modules/selenium-webdriver/safari.js create mode 100644 node_modules/selenium-webdriver/test/actions_test.js create mode 100644 node_modules/selenium-webdriver/test/chrome/options_test.js create mode 100644 node_modules/selenium-webdriver/test/chrome/service_test.js create mode 100644 node_modules/selenium-webdriver/test/cookie_test.js create mode 100644 node_modules/selenium-webdriver/test/element_finding_test.js create mode 100644 node_modules/selenium-webdriver/test/execute_script_test.js create mode 100644 node_modules/selenium-webdriver/test/fingerprint_test.js create mode 100644 node_modules/selenium-webdriver/test/firefox/extension_test.js create mode 100644 node_modules/selenium-webdriver/test/firefox/firefox_test.js create mode 100644 node_modules/selenium-webdriver/test/firefox/profile_test.js create mode 100644 node_modules/selenium-webdriver/test/http/http_test.js create mode 100644 node_modules/selenium-webdriver/test/http/util_test.js create mode 100644 node_modules/selenium-webdriver/test/io_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/by_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/capabilities_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/error_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/events_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/http_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/logging_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/promise_aplus_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/promise_error_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/promise_flow_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/promise_generator_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/promise_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/testutil.js create mode 100644 node_modules/selenium-webdriver/test/lib/until_test.js create mode 100644 node_modules/selenium-webdriver/test/lib/webdriver_test.js create mode 100644 node_modules/selenium-webdriver/test/logging_test.js create mode 100644 node_modules/selenium-webdriver/test/net/index_test.js create mode 100644 node_modules/selenium-webdriver/test/net/portprober_test.js create mode 100644 node_modules/selenium-webdriver/test/page_loading_test.js create mode 100644 node_modules/selenium-webdriver/test/phantomjs/execute_phantomjs_test.js create mode 100644 node_modules/selenium-webdriver/test/proxy_test.js create mode 100644 node_modules/selenium-webdriver/test/remote_test.js create mode 100644 node_modules/selenium-webdriver/test/safari_test.js create mode 100644 node_modules/selenium-webdriver/test/session_test.js create mode 100644 node_modules/selenium-webdriver/test/stale_element_test.js create mode 100644 node_modules/selenium-webdriver/test/tag_name_test.js create mode 100644 node_modules/selenium-webdriver/test/testing/assert_test.js create mode 100644 node_modules/selenium-webdriver/test/testing/index_test.js create mode 100644 node_modules/selenium-webdriver/test/upload_test.js create mode 100644 node_modules/selenium-webdriver/test/window_test.js create mode 100644 node_modules/selenium-webdriver/testing/assert.js create mode 100644 node_modules/selenium-webdriver/testing/index.js rename node_modules/{mocha/node_modules => }/supports-color/cli.js (100%) delete mode 100644 node_modules/tar-stream/node_modules/isarray/.npmignore delete mode 100644 node_modules/tar-stream/node_modules/isarray/.travis.yml delete mode 100644 node_modules/tar-stream/node_modules/isarray/Makefile delete mode 100644 node_modules/tar-stream/node_modules/isarray/README.md delete mode 100644 node_modules/tar-stream/node_modules/isarray/component.json delete mode 100644 node_modules/tar-stream/node_modules/isarray/index.js delete mode 100644 node_modules/tar-stream/node_modules/isarray/package.json delete mode 100644 node_modules/tar-stream/node_modules/isarray/test.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/README.md delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/package.json delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/readable.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/transform.js delete mode 100644 node_modules/tar-stream/node_modules/readable-stream/writable.js delete mode 100644 node_modules/through2/node_modules/isarray/.npmignore delete mode 100644 node_modules/through2/node_modules/isarray/.travis.yml delete mode 100644 node_modules/through2/node_modules/isarray/Makefile delete mode 100644 node_modules/through2/node_modules/isarray/README.md delete mode 100644 node_modules/through2/node_modules/isarray/component.json delete mode 100644 node_modules/through2/node_modules/isarray/index.js delete mode 100644 node_modules/through2/node_modules/isarray/package.json delete mode 100644 node_modules/through2/node_modules/isarray/test.js create mode 100644 node_modules/tmp/.npmignore create mode 100644 node_modules/tmp/.travis.yml create mode 100644 node_modules/tmp/README.md create mode 100644 node_modules/tmp/domain-test.js create mode 100644 node_modules/tmp/lib/tmp.js create mode 100644 node_modules/tmp/package.json create mode 100755 node_modules/tmp/test-all.sh create mode 100644 node_modules/tmp/test.js create mode 100644 node_modules/tmp/test/base.js create mode 100644 node_modules/tmp/test/dir-test.js create mode 100644 node_modules/tmp/test/file-test.js create mode 100644 node_modules/tmp/test/graceful.js create mode 100644 node_modules/tmp/test/keep.js create mode 100644 node_modules/tmp/test/name-test.js create mode 100644 node_modules/tmp/test/spawn.js create mode 100644 node_modules/tmp/test/symlinkme/file.js create mode 100644 node_modules/tmp/test/unsafe.js create mode 100644 node_modules/typescript/lib/cancellationToken.js create mode 100644 node_modules/typescript/lib/protocol.d.ts create mode 100644 node_modules/typescript/lib/typingsInstaller.js delete mode 100644 node_modules/typescript/test.config create mode 100644 node_modules/ultron/.npmignore create mode 100644 node_modules/ultron/.travis.yml create mode 100644 node_modules/ultron/LICENSE create mode 100644 node_modules/ultron/README.md create mode 100644 node_modules/ultron/index.js create mode 100644 node_modules/ultron/package.json create mode 100644 node_modules/ultron/test.js create mode 120000 node_modules/v8flags/node_modules/.bin/user-home create mode 120000 node_modules/vinyl-fs/node_modules/.bin/mkdirp create mode 100644 node_modules/vinyl-fs/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/vinyl-fs/node_modules/clone-stats/README.md create mode 100644 node_modules/vinyl-fs/node_modules/clone-stats/index.js create mode 100644 node_modules/vinyl-fs/node_modules/clone-stats/package.json create mode 100644 node_modules/vinyl-fs/node_modules/clone-stats/test.js delete mode 100644 node_modules/vinyl-fs/node_modules/glob-parent/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/glob-parent/test.js delete mode 100755 node_modules/vinyl-fs/node_modules/glob-stream/LICENSE delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/index.js delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/isarray/component.json delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/isarray/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/readable-stream/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/readable-stream/transform.js delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/readable-stream/writable.js delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through2/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through2/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/glob-stream/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/glob/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/glob/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/is-extglob/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/is-extglob/index.js delete mode 100644 node_modules/vinyl-fs/node_modules/is-extglob/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/is-glob/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/is-glob/index.js delete mode 100644 node_modules/vinyl-fs/node_modules/is-glob/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/.npmignore delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/.travis.yml delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/Makefile delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/component.json delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/index.js delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/isarray/test.js delete mode 100644 node_modules/vinyl-fs/node_modules/ordered-read-streams/index.js delete mode 100644 node_modules/vinyl-fs/node_modules/ordered-read-streams/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/package.json delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/readable.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/transform.js delete mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/writable.js create mode 100644 node_modules/vinyl-fs/node_modules/replace-ext/.npmignore create mode 100644 node_modules/vinyl-fs/node_modules/replace-ext/.travis.yml create mode 100755 node_modules/vinyl-fs/node_modules/replace-ext/LICENSE create mode 100644 node_modules/vinyl-fs/node_modules/replace-ext/README.md create mode 100644 node_modules/vinyl-fs/node_modules/replace-ext/index.js create mode 100644 node_modules/vinyl-fs/node_modules/replace-ext/package.json create mode 100644 node_modules/vinyl-fs/node_modules/replace-ext/test/main.js delete mode 100644 node_modules/vinyl-fs/node_modules/unique-stream/README.md delete mode 100644 node_modules/vinyl-fs/node_modules/unique-stream/index.js delete mode 100644 node_modules/vinyl-fs/node_modules/unique-stream/package.json delete mode 100644 node_modules/vinyl/node_modules/clone-stats/package.json delete mode 100755 node_modules/vinyl/node_modules/replace-ext/LICENSE delete mode 100644 node_modules/vinyl/node_modules/replace-ext/README.md delete mode 100644 node_modules/vinyl/node_modules/replace-ext/index.js delete mode 100644 node_modules/vinyl/node_modules/replace-ext/package.json create mode 100644 node_modules/ws/.npmignore create mode 100644 node_modules/ws/.travis.yml create mode 100644 node_modules/ws/Makefile create mode 100644 node_modules/ws/README.md create mode 100644 node_modules/ws/SECURITY.md create mode 100644 node_modules/ws/index.js create mode 100644 node_modules/ws/lib/BufferPool.js create mode 100644 node_modules/ws/lib/BufferUtil.fallback.js create mode 100644 node_modules/ws/lib/BufferUtil.js create mode 100644 node_modules/ws/lib/ErrorCodes.js create mode 100644 node_modules/ws/lib/Extensions.js create mode 100644 node_modules/ws/lib/PerMessageDeflate.js create mode 100644 node_modules/ws/lib/Receiver.hixie.js create mode 100644 node_modules/ws/lib/Receiver.js create mode 100644 node_modules/ws/lib/Sender.hixie.js create mode 100644 node_modules/ws/lib/Sender.js create mode 100644 node_modules/ws/lib/Validation.fallback.js create mode 100644 node_modules/ws/lib/Validation.js create mode 100644 node_modules/ws/lib/WebSocket.js create mode 100644 node_modules/ws/lib/WebSocketServer.js create mode 100644 node_modules/ws/package.json create mode 100644 node_modules/xml2js/.npmignore create mode 100644 node_modules/xml2js/.travis.yml create mode 100644 node_modules/xml2js/83.coffee create mode 100644 node_modules/xml2js/CONTRIBUTING.md create mode 100644 node_modules/xml2js/LICENSE create mode 100644 node_modules/xml2js/README.md create mode 100644 node_modules/xml2js/canon.xml create mode 100644 node_modules/xml2js/incompat.coffee create mode 100644 node_modules/xml2js/incompat2.js create mode 100644 node_modules/xml2js/lib/bom.js create mode 100644 node_modules/xml2js/lib/processors.js create mode 100644 node_modules/xml2js/lib/xml2js.js create mode 100644 node_modules/xml2js/package.json create mode 100644 node_modules/xml2js/text.coffee create mode 100644 node_modules/xml2js/text.xml create mode 100644 node_modules/xml2js/x.js create mode 100644 node_modules/xmlbuilder/.npmignore create mode 100644 node_modules/xmlbuilder/CHANGELOG.md create mode 100644 node_modules/xmlbuilder/LICENSE create mode 100644 node_modules/xmlbuilder/README.md create mode 100644 node_modules/xmlbuilder/lib/Utility.js create mode 100644 node_modules/xmlbuilder/lib/XMLAttribute.js create mode 100644 node_modules/xmlbuilder/lib/XMLCData.js create mode 100644 node_modules/xmlbuilder/lib/XMLComment.js create mode 100644 node_modules/xmlbuilder/lib/XMLDTDAttList.js create mode 100644 node_modules/xmlbuilder/lib/XMLDTDElement.js create mode 100644 node_modules/xmlbuilder/lib/XMLDTDEntity.js create mode 100644 node_modules/xmlbuilder/lib/XMLDTDNotation.js create mode 100644 node_modules/xmlbuilder/lib/XMLDeclaration.js create mode 100644 node_modules/xmlbuilder/lib/XMLDocType.js create mode 100644 node_modules/xmlbuilder/lib/XMLDocument.js create mode 100644 node_modules/xmlbuilder/lib/XMLDocumentCB.js create mode 100644 node_modules/xmlbuilder/lib/XMLElement.js create mode 100644 node_modules/xmlbuilder/lib/XMLNode.js create mode 100644 node_modules/xmlbuilder/lib/XMLProcessingInstruction.js create mode 100644 node_modules/xmlbuilder/lib/XMLRaw.js create mode 100644 node_modules/xmlbuilder/lib/XMLStreamWriter.js create mode 100644 node_modules/xmlbuilder/lib/XMLStringWriter.js create mode 100644 node_modules/xmlbuilder/lib/XMLStringifier.js create mode 100644 node_modules/xmlbuilder/lib/XMLText.js create mode 100644 node_modules/xmlbuilder/lib/XMLWriterBase.js create mode 100644 node_modules/xmlbuilder/lib/index.js create mode 100644 node_modules/xmlbuilder/package.json delete mode 100644 node_modules/zip-stream/node_modules/isarray/.npmignore delete mode 100644 node_modules/zip-stream/node_modules/isarray/.travis.yml delete mode 100644 node_modules/zip-stream/node_modules/isarray/Makefile delete mode 100644 node_modules/zip-stream/node_modules/isarray/README.md delete mode 100644 node_modules/zip-stream/node_modules/isarray/component.json delete mode 100644 node_modules/zip-stream/node_modules/isarray/index.js delete mode 100644 node_modules/zip-stream/node_modules/isarray/package.json delete mode 100644 node_modules/zip-stream/node_modules/isarray/test.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/LICENSE delete mode 100644 node_modules/zip-stream/node_modules/lodash/README.md delete mode 100644 node_modules/zip-stream/node_modules/lodash/_DataView.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_Hash.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_LazyWrapper.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_ListCache.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_LodashWrapper.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_Map.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_MapCache.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_Promise.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_Set.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_SetCache.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_Stack.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_Symbol.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_Uint8Array.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_WeakMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_addMapEntry.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_addSetEntry.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_apply.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayAggregator.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayEach.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayEachRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayEvery.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayFilter.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayIncludes.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayPush.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayReduce.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayReduceRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arraySample.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arraySampleSize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arrayShuffle.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_arraySome.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_asciiSize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_asciiToArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_asciiWords.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_assignInDefaults.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_assignMergeValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_assignValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_assocIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseAggregator.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseAssign.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseAssignValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseAt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseClamp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseClone.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseConforms.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseConformsTo.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseCreate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseDelay.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseDifference.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseEach.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseEachRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseEvery.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseExtremum.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseFill.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseFilter.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseFindIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseFindKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseFlatten.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseFor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseForOwn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseForOwnRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseForRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseFunctions.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseGet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseGetTag.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseGt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseHas.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseHasIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseInRange.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIntersection.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseInverter.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseInvoke.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsArguments.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsDate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsEqual.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsMatch.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsNaN.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsNative.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsRegExp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseIteratee.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseKeys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseKeysIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseLodash.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseLt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseMatches.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseMean.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseMerge.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseMergeDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseNth.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseOrderBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_basePick.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_basePickBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseProperty.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_basePropertyDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_basePropertyOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_basePullAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_basePullAt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseRandom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseRange.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseReduce.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseRepeat.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseRest.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSample.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSampleSize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSetData.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSetToString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseShuffle.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSlice.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSome.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSortBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSortedIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSortedUniq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseSum.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseTimes.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseToNumber.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseToPairs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseToString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseUnary.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseUniq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseUnset.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseUpdate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseValues.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseWrapperValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseXor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_baseZipObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cacheHas.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_castFunction.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_castPath.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_castRest.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_castSlice.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_charsEndIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_charsStartIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneBuffer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneDataView.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneRegExp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneSymbol.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_cloneTypedArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_compareAscending.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_compareMultiple.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_composeArgs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_composeArgsRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_copyArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_copyObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_copySymbols.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_coreJsData.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_countHolders.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createAggregator.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createAssigner.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createBaseEach.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createBaseFor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createBind.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createCaseFirst.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createCompounder.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createCtor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createCurry.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createFind.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createFlow.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createHybrid.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createInverter.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createMathOperation.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createOver.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createPadding.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createPartial.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createRange.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createRecurry.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createRelationalOperation.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createRound.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createToPairs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_createWrap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_deburrLetter.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_defineProperty.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_equalArrays.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_equalByTag.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_equalObjects.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_escapeStringChar.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_flatRest.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_freeGlobal.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getAllKeys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getAllKeysIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getData.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getFuncName.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getHolder.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getMapData.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getMatchData.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getNative.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getPrototype.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getSymbols.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getSymbolsIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getTag.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getView.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_getWrapDetails.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hasPath.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hasUnicode.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hashClear.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hashDelete.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hashGet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hashHas.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_hashSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_initCloneArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_initCloneByTag.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_initCloneObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_insertWrapDetails.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isFlattenable.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isIterateeCall.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isKeyable.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isLaziable.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isMaskable.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isMasked.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isPrototype.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_isStrictComparable.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_iteratorToArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_lazyClone.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_lazyReverse.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_lazyValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_listCacheClear.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_listCacheDelete.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_listCacheGet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_listCacheHas.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_listCacheSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mapCacheClear.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mapCacheDelete.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mapCacheGet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mapCacheHas.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mapCacheSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mapToArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_memoizeCapped.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mergeData.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_mergeDefaults.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_metaMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_nativeCreate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_nativeKeys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_nativeKeysIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_nodeUtil.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_overArg.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_overRest.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_parent.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_reEscape.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_reEvaluate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_reInterpolate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_realNames.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_reorder.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_replaceHolders.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_root.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_setCacheAdd.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_setCacheHas.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_setData.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_setToArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_setToPairs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_setToString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_setWrapToString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_shortOut.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_shuffleSelf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stackClear.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stackDelete.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stackGet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stackHas.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stackSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_strictIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stringSize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stringToArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_stringToPath.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_toKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_toSource.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_unicodeSize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_unicodeToArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_unicodeWords.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_updateWrapDetails.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/_wrapperClone.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/add.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/after.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/array.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/ary.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/assign.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/assignIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/assignInWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/assignWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/at.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/attempt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/before.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/bind.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/bindAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/bindKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/camelCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/capitalize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/castArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/ceil.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/chain.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/chunk.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/clamp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/clone.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/cloneDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/cloneDeepWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/cloneWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/collection.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/commit.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/compact.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/concat.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/cond.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/conforms.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/conformsTo.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/constant.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/core.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/core.min.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/countBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/create.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/curry.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/curryRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/date.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/debounce.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/deburr.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/defaultTo.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/defaults.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/defaultsDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/defer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/delay.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/difference.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/differenceBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/differenceWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/divide.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/drop.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/dropRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/dropRightWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/dropWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/each.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/eachRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/endsWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/entries.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/entriesIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/eq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/escape.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/escapeRegExp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/every.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/extend.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/extendWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fill.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/filter.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/find.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/findIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/findKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/findLast.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/findLastIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/findLastKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/first.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flatMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flatMapDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flatMapDepth.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flatten.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flattenDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flattenDepth.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flip.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/floor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flow.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/flowRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/forEach.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/forEachRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/forIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/forInRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/forOwn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/forOwnRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/F.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/T.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/__.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/_baseConvert.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/_falseOptions.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/_mapping.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/_util.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/add.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/after.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/all.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/allPass.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/always.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/any.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/anyPass.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/apply.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/array.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/ary.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assign.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assignAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assignAllWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assignIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assignInAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assignInWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assignWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assoc.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/assocPath.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/at.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/attempt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/before.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/bind.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/bindAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/bindKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/camelCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/capitalize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/castArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/ceil.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/chain.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/chunk.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/clamp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/clone.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/cloneDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/cloneWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/collection.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/commit.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/compact.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/complement.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/compose.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/concat.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/cond.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/conforms.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/conformsTo.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/constant.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/contains.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/convert.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/countBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/create.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/curry.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/curryN.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/curryRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/curryRightN.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/date.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/debounce.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/deburr.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/defaultTo.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/defaults.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/defaultsAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/defer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/delay.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/difference.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/differenceBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/differenceWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/dissoc.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/dissocPath.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/divide.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/drop.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/dropLast.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/dropRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/dropWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/each.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/eachRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/endsWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/entries.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/entriesIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/eq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/equals.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/escape.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/every.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/extend.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/extendAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/extendAllWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/extendWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/fill.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/filter.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/find.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findLast.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findLastFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findLastIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/findLastKey.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/first.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flatMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flatten.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flattenDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flattenDepth.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flip.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/floor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flow.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/flowRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/forEach.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/forEachRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/forIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/forInRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/forOwn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/forOwnRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/fromPairs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/function.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/functions.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/functionsIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/get.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/getOr.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/groupBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/gt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/gte.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/has.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/hasIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/head.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/identical.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/identity.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/inRange.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/includes.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/includesFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/indexBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/indexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/init.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/initial.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/intersection.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/intersectionBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/intersectionWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/invert.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/invertBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/invertObj.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/invoke.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/invokeArgs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/invokeMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isArguments.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isArrayLike.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isBoolean.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isBuffer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isDate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isElement.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isEmpty.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isEqual.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isEqualWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isError.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isFinite.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isFunction.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isLength.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isMatch.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isMatchWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isNaN.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isNative.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isNil.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isNull.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isNumber.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isObjectLike.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isPlainObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isRegExp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isSymbol.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isTypedArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isUndefined.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isWeakMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/isWeakSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/iteratee.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/join.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/juxt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/kebabCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/keyBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/keys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/keysIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/lang.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/last.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/lowerCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/lowerFirst.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/lt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/lte.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/map.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/mapKeys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/mapValues.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/matches.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/matchesProperty.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/math.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/max.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/maxBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/mean.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/meanBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/memoize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/merge.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/mergeAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/mergeWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/method.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/methodOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/min.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/minBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/mixin.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/multiply.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/nAry.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/negate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/next.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/noop.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/now.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/nth.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/nthArg.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/number.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/object.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/omit.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/omitAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/omitBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/once.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/orderBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/over.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/overArgs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/overEvery.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/overSome.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pad.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/padChars.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/padCharsStart.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/padEnd.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/padStart.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/parseInt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/partial.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/partialRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/partition.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/path.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pathEq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pathOr.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/paths.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pick.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pickAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pickBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pipe.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/placeholder.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/plant.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pluck.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/prop.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/propEq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/propOr.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/property.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/propertyOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/props.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pull.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pullAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pullAllBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pullAllWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/pullAt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/random.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/range.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/rangeRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/rangeStep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/rearg.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/reduce.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/reduceRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/reject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/remove.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/repeat.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/replace.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/rest.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/restFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/result.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/reverse.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/round.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sample.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sampleSize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/seq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/set.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/setWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/shuffle.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/size.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/slice.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/snakeCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/some.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedUniq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/split.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/spread.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/spreadFrom.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/startCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/startsWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/string.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/stubArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/stubFalse.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/stubObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/stubString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/stubTrue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/subtract.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sum.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/sumBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/tail.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/take.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/takeLast.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/takeRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/takeWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/tap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/template.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/templateSettings.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/throttle.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/thru.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/times.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toFinite.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toIterator.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toJSON.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toLength.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toLower.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toNumber.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toPairs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toPairsIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toPath.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toPlainObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/toUpper.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/transform.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/trim.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/trimChars.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/trimEnd.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/trimStart.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/truncate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unapply.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unary.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unescape.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/union.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unionBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unionWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/uniq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/uniqBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/uniqWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/uniqueId.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unnest.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unset.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unzip.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/unzipWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/update.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/updateWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/upperCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/upperFirst.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/useWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/util.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/value.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/valueOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/values.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/valuesIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/where.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/whereEq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/without.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/words.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/wrap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/wrapperAt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/wrapperChain.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/wrapperValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/xor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/xorBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/xorWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/zip.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/zipAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/zipObj.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/zipObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fp/zipWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/fromPairs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/function.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/functions.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/functionsIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/get.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/groupBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/gt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/gte.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/has.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/hasIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/head.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/identity.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/inRange.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/includes.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/index.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/indexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/initial.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/intersection.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/intersectionBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/intersectionWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/invert.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/invertBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/invoke.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/invokeMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isArguments.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isArrayBuffer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isArrayLike.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isArrayLikeObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isBoolean.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isBuffer.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isDate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isElement.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isEmpty.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isEqual.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isEqualWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isError.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isFinite.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isFunction.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isLength.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isMatch.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isMatchWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isNaN.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isNative.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isNil.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isNull.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isNumber.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isObjectLike.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isPlainObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isRegExp.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isSafeInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isSymbol.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isTypedArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isUndefined.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isWeakMap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/isWeakSet.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/iteratee.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/join.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/kebabCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/keyBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/keys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/keysIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lang.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/last.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lastIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lodash.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lodash.min.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lowerCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lowerFirst.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/lte.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/map.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/mapKeys.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/mapValues.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/matches.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/matchesProperty.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/math.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/max.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/maxBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/mean.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/meanBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/memoize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/merge.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/mergeWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/method.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/methodOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/min.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/minBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/mixin.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/multiply.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/negate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/next.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/noop.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/now.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/nth.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/nthArg.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/number.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/object.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/omit.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/omitBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/once.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/orderBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/over.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/overArgs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/overEvery.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/overSome.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/package.json delete mode 100644 node_modules/zip-stream/node_modules/lodash/pad.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/padEnd.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/padStart.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/parseInt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/partial.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/partialRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/partition.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/pick.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/pickBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/plant.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/property.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/propertyOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/pull.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/pullAll.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/pullAllBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/pullAllWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/pullAt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/random.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/range.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/rangeRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/rearg.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/reduce.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/reduceRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/reject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/remove.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/repeat.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/replace.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/rest.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/result.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/reverse.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/round.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sample.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sampleSize.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/seq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/set.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/setWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/shuffle.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/size.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/slice.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/snakeCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/some.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedIndexBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedLastIndex.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedUniq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sortedUniqBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/split.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/spread.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/startCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/startsWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/string.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/stubArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/stubFalse.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/stubObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/stubString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/stubTrue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/subtract.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sum.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/sumBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/tail.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/take.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/takeRight.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/takeRightWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/takeWhile.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/tap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/template.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/templateSettings.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/throttle.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/thru.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/times.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toArray.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toFinite.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toIterator.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toJSON.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toLength.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toLower.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toNumber.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toPairs.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toPairsIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toPath.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toPlainObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toSafeInteger.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toString.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/toUpper.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/transform.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/trim.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/trimEnd.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/trimStart.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/truncate.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/unary.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/unescape.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/union.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/unionBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/unionWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/uniq.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/uniqBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/uniqWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/uniqueId.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/unset.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/unzip.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/unzipWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/update.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/updateWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/upperCase.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/upperFirst.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/util.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/value.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/valueOf.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/values.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/valuesIn.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/without.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/words.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/wrap.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/wrapperAt.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/wrapperChain.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/wrapperLodash.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/wrapperReverse.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/wrapperValue.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/xor.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/xorBy.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/xorWith.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/zip.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/zipObject.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/zipObjectDeep.js delete mode 100644 node_modules/zip-stream/node_modules/lodash/zipWith.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/.npmignore delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/LICENSE delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/README.md delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/doc/stream.md delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/duplex.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/package.json delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/readable.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/transform.js delete mode 100644 node_modules/zip-stream/node_modules/readable-stream/writable.js create mode 100644 yarn.lock diff --git a/node_modules/.bin/babylon b/node_modules/.bin/babylon deleted file mode 120000 index c2adc01b2..000000000 --- a/node_modules/.bin/babylon +++ /dev/null @@ -1 +0,0 @@ -../babylon/bin/babylon.js \ No newline at end of file diff --git a/node_modules/.bin/dateformat b/node_modules/.bin/dateformat deleted file mode 120000 index bb9cf7b16..000000000 --- a/node_modules/.bin/dateformat +++ /dev/null @@ -1 +0,0 @@ -../dateformat/bin/cli.js \ No newline at end of file diff --git a/node_modules/.bin/detect-indent b/node_modules/.bin/detect-indent deleted file mode 120000 index 637cd301a..000000000 --- a/node_modules/.bin/detect-indent +++ /dev/null @@ -1 +0,0 @@ -../detect-indent/cli.js \ No newline at end of file diff --git a/node_modules/.bin/jade b/node_modules/.bin/jade deleted file mode 120000 index 571fae734..000000000 --- a/node_modules/.bin/jade +++ /dev/null @@ -1 +0,0 @@ -../jade/bin/jade \ No newline at end of file diff --git a/node_modules/.bin/jsesc b/node_modules/.bin/jsesc deleted file mode 120000 index 7237604c3..000000000 --- a/node_modules/.bin/jsesc +++ /dev/null @@ -1 +0,0 @@ -../jsesc/bin/jsesc \ No newline at end of file diff --git a/node_modules/.bin/loose-envify b/node_modules/.bin/loose-envify deleted file mode 120000 index ed9009c5a..000000000 --- a/node_modules/.bin/loose-envify +++ /dev/null @@ -1 +0,0 @@ -../loose-envify/cli.js \ No newline at end of file diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp deleted file mode 120000 index 017896ceb..000000000 --- a/node_modules/.bin/mkdirp +++ /dev/null @@ -1 +0,0 @@ -../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/.bin/rimraf b/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a49d..000000000 --- a/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/.bin/strip-indent b/node_modules/.bin/strip-indent deleted file mode 120000 index dddee7eb1..000000000 --- a/node_modules/.bin/strip-indent +++ /dev/null @@ -1 +0,0 @@ -../strip-indent/cli.js \ No newline at end of file diff --git a/node_modules/.bin/user-home b/node_modules/.bin/user-home deleted file mode 120000 index d72d76bb4..000000000 --- a/node_modules/.bin/user-home +++ /dev/null @@ -1 +0,0 @@ -../user-home/cli.js \ No newline at end of file diff --git a/node_modules/.bin/which b/node_modules/.bin/which deleted file mode 120000 index f62471c85..000000000 --- a/node_modules/.bin/which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/which \ No newline at end of file diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity new file mode 100644 index 000000000..4324f37c5 --- /dev/null +++ b/node_modules/.yarn-integrity @@ -0,0 +1 @@ +4ba2f689d57511507e94d43fc06be3ad7c3198ea985e1cb661c2eef84d2fc993 \ No newline at end of file diff --git a/node_modules/adm-zip/.idea/scopes/scope_settings.xml b/node_modules/adm-zip/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000..0d5175ca0 --- /dev/null +++ b/node_modules/adm-zip/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/node_modules/adm-zip/MIT-LICENSE.txt b/node_modules/adm-zip/MIT-LICENSE.txt new file mode 100644 index 000000000..14c3ee5cf --- /dev/null +++ b/node_modules/adm-zip/MIT-LICENSE.txt @@ -0,0 +1,21 @@ +Copyright (c) 2012 Another-D-Mention Software and other contributors, +http://www.another-d-mention.ro/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/adm-zip/README.md b/node_modules/adm-zip/README.md new file mode 100644 index 000000000..030fab8a7 --- /dev/null +++ b/node_modules/adm-zip/README.md @@ -0,0 +1,64 @@ +# ADM-ZIP for NodeJS + +ADM-ZIP is a pure JavaScript implementation for zip data compression for [NodeJS](http://nodejs.org/). + +# Installation + +With [npm](http://npmjs.org) do: + + $ npm install adm-zip + +## What is it good for? +The library allows you to: + +* decompress zip files directly to disk or in memory buffers +* compress files and store them to disk in .zip format or in compressed buffers +* update content of/add new/delete files from an existing .zip + +# Dependencies +There are no other nodeJS libraries that ADM-ZIP is dependent of + +# Examples + +## Basic usage +```javascript + + var AdmZip = require('adm-zip'); + + // reading archives + var zip = new AdmZip("./my_file.zip"); + var zipEntries = zip.getEntries(); // an array of ZipEntry records + + zipEntries.forEach(function(zipEntry) { + console.log(zipEntry.toString()); // outputs zip entries information + if (zipEntry.entryName == "my_file.txt") { + console.log(zipEntry.data.toString('utf8')); + } + }); + // outputs the content of some_folder/my_file.txt + console.log(zip.readAsText("some_folder/my_file.txt")); + // extracts the specified file to the specified location + zip.extractEntryTo(/*entry name*/"some_folder/my_file.txt", /*target path*/"/home/me/tempfolder", /*maintainEntryPath*/false, /*overwrite*/true); + // extracts everything + zip.extractAllTo(/*target path*/"/home/me/zipcontent/", /*overwrite*/true); + + + // creating archives + var zip = new AdmZip(); + + // add file directly + zip.addFile("test.txt", new Buffer("inner content of the file"), "entry comment goes here"); + // add local file + zip.addLocalFile("/home/me/some_picture.png"); + // get everything as a buffer + var willSendthis = zip.toBuffer(); + // or write everything to disk + zip.writeZip(/*target file name*/"/home/me/files.zip"); + + + // ... more examples in the wiki +``` + +For more detailed information please check out the [wiki](https://github.com/cthackers/adm-zip/wiki). + +[![build status](https://secure.travis-ci.org/cthackers/adm-zip.png)](http://travis-ci.org/cthackers/adm-zip) diff --git a/node_modules/adm-zip/adm-zip.js b/node_modules/adm-zip/adm-zip.js new file mode 100644 index 000000000..46595fc5d --- /dev/null +++ b/node_modules/adm-zip/adm-zip.js @@ -0,0 +1,404 @@ +var fs = require("fs"), + pth = require("path"); + +fs.existsSync = fs.existsSync || pth.existsSync; + +var ZipEntry = require("./zipEntry"), + ZipFile = require("./zipFile"), + Utils = require("./util"); + +module.exports = function(/*String*/input) { + var _zip = undefined, + _filename = ""; + + if (input && typeof input === "string") { // load zip file + if (fs.existsSync(input)) { + _filename = input; + _zip = new ZipFile(input, Utils.Constants.FILE); + } else { + throw Utils.Errors.INVALID_FILENAME; + } + } else if(input && Buffer.isBuffer(input)) { // load buffer + _zip = new ZipFile(input, Utils.Constants.BUFFER); + } else { // create new zip file + _zip = new ZipFile(null, Utils.Constants.NONE); + } + + function getEntry(/*Object*/entry) { + if (entry && _zip) { + var item; + // If entry was given as a file name + if (typeof entry === "string") + item = _zip.getEntry(entry); + // if entry was given as a ZipEntry object + if (typeof entry === "object" && entry.entryName != undefined && entry.header != undefined) + item = _zip.getEntry(entry.entryName); + + if (item) { + return item; + } + } + return null; + } + + return { + /** + * Extracts the given entry from the archive and returns the content as a Buffer object + * @param entry ZipEntry object or String with the full path of the entry + * + * @return Buffer or Null in case of error + */ + readFile : function(/*Object*/entry) { + var item = getEntry(entry); + return item && item.getData() || null; + }, + + /** + * Asynchronous readFile + * @param entry ZipEntry object or String with the full path of the entry + * @param callback + * + * @return Buffer or Null in case of error + */ + readFileAsync : function(/*Object*/entry, /*Function*/callback) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(callback); + } else { + callback(null,"getEntry failed for:" + entry) + } + }, + + /** + * Extracts the given entry from the archive and returns the content as plain text in the given encoding + * @param entry ZipEntry object or String with the full path of the entry + * @param encoding Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsText : function(/*Object*/entry, /*String - Optional*/encoding) { + var item = getEntry(entry); + if (item) { + var data = item.getData(); + if (data && data.length) { + return data.toString(encoding || "utf8"); + } + } + return ""; + }, + + /** + * Asynchronous readAsText + * @param entry ZipEntry object or String with the full path of the entry + * @param callback + * @param encoding Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsTextAsync : function(/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(function(data) { + if (data && data.length) { + callback(data.toString(encoding || "utf8")); + } else { + callback(""); + } + }) + } else { + callback(""); + } + }, + + /** + * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory + * + * @param entry + */ + deleteFile : function(/*Object*/entry) { // @TODO: test deleteFile + var item = getEntry(entry); + if (item) { + _zip.deleteEntry(item.entryName); + } + }, + + /** + * Adds a comment to the zip. The zip must be rewritten after adding the comment. + * + * @param comment + */ + addZipComment : function(/*String*/comment) { // @TODO: test addZipComment + _zip.comment = comment; + }, + + /** + * Returns the zip comment + * + * @return String + */ + getZipComment : function() { + return _zip.comment || ''; + }, + + /** + * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment + * The comment cannot exceed 65535 characters in length + * + * @param entry + * @param comment + */ + addZipEntryComment : function(/*Object*/entry,/*String*/comment) { + var item = getEntry(entry); + if (item) { + item.comment = comment; + } + }, + + /** + * Returns the comment of the specified entry + * + * @param entry + * @return String + */ + getZipEntryComment : function(/*Object*/entry) { + var item = getEntry(entry); + if (item) { + return item.comment || ''; + } + return '' + }, + + /** + * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content + * + * @param entry + * @param content + */ + updateFile : function(/*Object*/entry, /*Buffer*/content) { + var item = getEntry(entry); + if (item) { + item.setData(content); + } + }, + + /** + * Adds a file from the disk to the archive + * + * @param localPath + */ + addLocalFile : function(/*String*/localPath, /*String*/zipPath) { + if (fs.existsSync(localPath)) { + if(zipPath){ + zipPath=zipPath.split("\\").join("/"); + if(zipPath.charAt(zipPath.length - 1) != "/"){ + zipPath += "/"; + } + }else{ + zipPath=""; + } + var p = localPath.split("\\").join("/").split("/").pop(); + + this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0) + } else { + throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); + } + }, + + /** + * Adds a local directory and all its nested files and directories to the archive + * + * @param localPath + */ + addLocalFolder : function(/*String*/localPath, /*String*/zipPath) { + if(zipPath){ + zipPath=zipPath.split("\\").join("/"); + if(zipPath.charAt(zipPath.length - 1) != "/"){ + zipPath += "/"; + } + }else{ + zipPath=""; + } + localPath = localPath.split("\\").join("/"); //windows fix + if (localPath.charAt(localPath.length - 1) != "/") + localPath += "/"; + + if (fs.existsSync(localPath)) { + + var items = Utils.findFiles(localPath), + self = this; + + if (items.length) { + items.forEach(function(path) { + var p = path.split("\\").join("/").replace(localPath, ""); //windows fix + if (p.charAt(p.length - 1) !== "/") { + self.addFile(zipPath+p, fs.readFileSync(path), "", 0) + } else { + self.addFile(zipPath+p, new Buffer(0), "", 0) + } + }); + } + } else { + throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath); + } + }, + + /** + * Allows you to create a entry (file or directory) in the zip file. + * If you want to create a directory the entryName must end in / and a null buffer should be provided. + * Comment and attributes are optional + * + * @param entryName + * @param content + * @param comment + * @param attr + */ + addFile : function(/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) { + var entry = new ZipEntry(); + entry.entryName = entryName; + entry.comment = comment || ""; + entry.attr = attr || 438; //0666; + if (entry.isDirectory && content.length) { + // throw Utils.Errors.DIRECTORY_CONTENT_ERROR; + } + entry.setData(content); + _zip.setEntry(entry); + }, + + /** + * Returns an array of ZipEntry objects representing the files and folders inside the archive + * + * @return Array + */ + getEntries : function() { + if (_zip) { + return _zip.entries; + } else { + return []; + } + }, + + /** + * Returns a ZipEntry object representing the file or folder specified by ``name``. + * + * @param name + * @return ZipEntry + */ + getEntry : function(/*String*/name) { + return getEntry(name); + }, + + /** + * Extracts the given entry to the given targetPath + * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted + * + * @param entry ZipEntry object or String with the full path of the entry + * @param targetPath Target folder where to write the file + * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder + * will be created in targetPath as well. Default is TRUE + * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + * + * @return Boolean + */ + extractEntryTo : function(/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) { + overwrite = overwrite || false; + maintainEntryPath = typeof maintainEntryPath == "undefined" ? true : maintainEntryPath; + + var item = getEntry(entry); + if (!item) { + throw Utils.Errors.NO_ENTRY; + } + + var target = pth.resolve(targetPath, maintainEntryPath ? item.entryName : pth.basename(item.entryName)); + + if (item.isDirectory) { + target = pth.resolve(target, ".."); + var children = _zip.getEntryChildren(item); + children.forEach(function(child) { + if (child.isDirectory) return; + var content = child.getData(); + if (!content) { + throw Utils.Errors.CANT_EXTRACT_FILE; + } + Utils.writeFileTo(pth.resolve(targetPath, maintainEntryPath ? child.entryName : child.entryName.substr(item.entryName.length)), content, overwrite); + }); + return true; + } + + var content = item.getData(); + if (!content) throw Utils.Errors.CANT_EXTRACT_FILE; + + if (fs.existsSync(targetPath) && !overwrite) { + throw Utils.Errors.CANT_OVERRIDE; + } + Utils.writeFileTo(target, content, overwrite); + + return true; + }, + + /** + * Extracts the entire archive to the given location + * + * @param targetPath Target location + * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + */ + extractAllTo : function(/*String*/targetPath, /*Boolean*/overwrite) { + overwrite = overwrite || false; + if (!_zip) { + throw Utils.Errors.NO_ZIP; + } + + _zip.entries.forEach(function(entry) { + if (entry.isDirectory) { + Utils.makeDir(pth.resolve(targetPath, entry.entryName.toString())); + return; + } + var content = entry.getData(); + if (!content) { + throw Utils.Errors.CANT_EXTRACT_FILE + "2"; + } + Utils.writeFileTo(pth.resolve(targetPath, entry.entryName.toString()), content, overwrite); + }) + }, + + /** + * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip + * + * @param targetFileName + * @param callback + */ + writeZip : function(/*String*/targetFileName, /*Function*/callback) { + if (arguments.length == 1) { + if (typeof targetFileName == "function") { + callback = targetFileName; + targetFileName = ""; + } + } + + if (!targetFileName && _filename) { + targetFileName = _filename; + } + if (!targetFileName) return; + + var zipData = _zip.compressToBuffer(); + if (zipData) { + Utils.writeFileTo(targetFileName, zipData, true); + } + }, + + /** + * Returns the content of the entire zip file as a Buffer object + * + * @return Buffer + */ + toBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { + this.valueOf = 2; + if (typeof onSuccess == "function") { + _zip.toAsyncBuffer(onSuccess,onFail,onItemStart,onItemEnd); + return null; + } + return _zip.compressToBuffer() + } + } +}; diff --git a/node_modules/adm-zip/headers/entryHeader.js b/node_modules/adm-zip/headers/entryHeader.js new file mode 100644 index 000000000..a29c70f15 --- /dev/null +++ b/node_modules/adm-zip/headers/entryHeader.js @@ -0,0 +1,261 @@ +var Utils = require("../util"), + Constants = Utils.Constants; + +/* The central directory file header */ +module.exports = function () { + var _verMade = 0x0A, + _version = 0x0A, + _flags = 0, + _method = 0, + _time = 0, + _crc = 0, + _compressedSize = 0, + _size = 0, + _fnameLen = 0, + _extraLen = 0, + + _comLen = 0, + _diskStart = 0, + _inattr = 0, + _attr = 0, + _offset = 0; + + var _dataHeader = {}; + + function setTime(val) { + var val = new Date(val); + _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980 + | (val.getMonth() + 1) << 21 // b05-08 month + | val.getDay() << 16 // b00-04 hour + + // 2 bytes time + | val.getHours() << 11 // b11-15 hour + | val.getMinutes() << 5 // b05-10 minute + | val.getSeconds() >> 1; // b00-04 seconds divided by 2 + } + + setTime(+new Date()); + + return { + get made () { return _verMade; }, + set made (val) { _verMade = val; }, + + get version () { return _version; }, + set version (val) { _version = val }, + + get flags () { return _flags }, + set flags (val) { _flags = val; }, + + get method () { return _method; }, + set method (val) { _method = val; }, + + get time () { return new Date( + ((_time >> 25) & 0x7f) + 1980, + ((_time >> 21) & 0x0f) - 1, + (_time >> 16) & 0x1f, + (_time >> 11) & 0x1f, + (_time >> 5) & 0x3f, + (_time & 0x1f) << 1 + ); + }, + set time (val) { + setTime(val); + }, + + get crc () { return _crc; }, + set crc (val) { _crc = val; }, + + get compressedSize () { return _compressedSize; }, + set compressedSize (val) { _compressedSize = val; }, + + get size () { return _size; }, + set size (val) { _size = val; }, + + get fileNameLength () { return _fnameLen; }, + set fileNameLength (val) { _fnameLen = val; }, + + get extraLength () { return _extraLen }, + set extraLength (val) { _extraLen = val; }, + + get commentLength () { return _comLen }, + set commentLength (val) { _comLen = val }, + + get diskNumStart () { return _diskStart }, + set diskNumStart (val) { _diskStart = val }, + + get inAttr () { return _inattr }, + set inAttr (val) { _inattr = val }, + + get attr () { return _attr }, + set attr (val) { _attr = val }, + + get offset () { return _offset }, + set offset (val) { _offset = val }, + + get encripted () { return (_flags & 1) == 1 }, + + get entryHeaderSize () { + return Constants.CENHDR + _fnameLen + _extraLen + _comLen; + }, + + get realDataOffset () { + return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen; + }, + + get dataHeader () { + return _dataHeader; + }, + + loadDataHeaderFromBinary : function(/*Buffer*/input) { + var data = input.slice(_offset, _offset + Constants.LOCHDR); + // 30 bytes and should start with "PK\003\004" + if (data.readUInt32LE(0) != Constants.LOCSIG) { + throw Utils.Errors.INVALID_LOC; + } + _dataHeader = { + // version needed to extract + version : data.readUInt16LE(Constants.LOCVER), + // general purpose bit flag + flags : data.readUInt16LE(Constants.LOCFLG), + // compression method + method : data.readUInt16LE(Constants.LOCHOW), + // modification time (2 bytes time, 2 bytes date) + time : data.readUInt32LE(Constants.LOCTIM), + // uncompressed file crc-32 value + crc : data.readUInt32LE(Constants.LOCCRC), + // compressed size + compressedSize : data.readUInt32LE(Constants.LOCSIZ), + // uncompressed size + size : data.readUInt32LE(Constants.LOCLEN), + // filename length + fnameLen : data.readUInt16LE(Constants.LOCNAM), + // extra field length + extraLen : data.readUInt16LE(Constants.LOCEXT) + } + }, + + loadFromBinary : function(/*Buffer*/data) { + // data should be 46 bytes and start with "PK 01 02" + if (data.length != Constants.CENHDR || data.readUInt32LE(0) != Constants.CENSIG) { + throw Utils.Errors.INVALID_CEN; + } + // version made by + _verMade = data.readUInt16LE(Constants.CENVEM); + // version needed to extract + _version = data.readUInt16LE(Constants.CENVER); + // encrypt, decrypt flags + _flags = data.readUInt16LE(Constants.CENFLG); + // compression method + _method = data.readUInt16LE(Constants.CENHOW); + // modification time (2 bytes time, 2 bytes date) + _time = data.readUInt32LE(Constants.CENTIM); + // uncompressed file crc-32 value + _crc = data.readUInt32LE(Constants.CENCRC); + // compressed size + _compressedSize = data.readUInt32LE(Constants.CENSIZ); + // uncompressed size + _size = data.readUInt32LE(Constants.CENLEN); + // filename length + _fnameLen = data.readUInt16LE(Constants.CENNAM); + // extra field length + _extraLen = data.readUInt16LE(Constants.CENEXT); + // file comment length + _comLen = data.readUInt16LE(Constants.CENCOM); + // volume number start + _diskStart = data.readUInt16LE(Constants.CENDSK); + // internal file attributes + _inattr = data.readUInt16LE(Constants.CENATT); + // external file attributes + _attr = data.readUInt32LE(Constants.CENATX); + // LOC header offset + _offset = data.readUInt32LE(Constants.CENOFF); + }, + + dataHeaderToBinary : function() { + // LOC header size (30 bytes) + var data = new Buffer(Constants.LOCHDR); + // "PK\003\004" + data.writeUInt32LE(Constants.LOCSIG, 0); + // version needed to extract + data.writeUInt16LE(_version, Constants.LOCVER); + // general purpose bit flag + data.writeUInt16LE(_flags, Constants.LOCFLG); + // compression method + data.writeUInt16LE(_method, Constants.LOCHOW); + // modification time (2 bytes time, 2 bytes date) + data.writeUInt32LE(_time, Constants.LOCTIM); + // uncompressed file crc-32 value + data.writeUInt32LE(_crc, Constants.LOCCRC); + // compressed size + data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); + // uncompressed size + data.writeUInt32LE(_size, Constants.LOCLEN); + // filename length + data.writeUInt16LE(_fnameLen, Constants.LOCNAM); + // extra field length + data.writeUInt16LE(_extraLen, Constants.LOCEXT); + return data; + }, + + entryHeaderToBinary : function() { + // CEN header size (46 bytes) + var data = new Buffer(Constants.CENHDR + _fnameLen + _extraLen + _comLen); + // "PK\001\002" + data.writeUInt32LE(Constants.CENSIG, 0); + // version made by + data.writeUInt16LE(_verMade, Constants.CENVEM); + // version needed to extract + data.writeUInt16LE(_version, Constants.CENVER); + // encrypt, decrypt flags + data.writeUInt16LE(_flags, Constants.CENFLG); + // compression method + data.writeUInt16LE(_method, Constants.CENHOW); + // modification time (2 bytes time, 2 bytes date) + data.writeUInt32LE(_time, Constants.CENTIM); + // uncompressed file crc-32 value + data.writeInt32LE(_crc, Constants.CENCRC, true); + // compressed size + data.writeUInt32LE(_compressedSize, Constants.CENSIZ); + // uncompressed size + data.writeUInt32LE(_size, Constants.CENLEN); + // filename length + data.writeUInt16LE(_fnameLen, Constants.CENNAM); + // extra field length + data.writeUInt16LE(_extraLen, Constants.CENEXT); + // file comment length + data.writeUInt16LE(_comLen, Constants.CENCOM); + // volume number start + data.writeUInt16LE(_diskStart, Constants.CENDSK); + // internal file attributes + data.writeUInt16LE(_inattr, Constants.CENATT); + // external file attributes + data.writeUInt32LE(_attr, Constants.CENATX); + // LOC header offset + data.writeUInt32LE(_offset, Constants.CENOFF); + // fill all with + data.fill(0x00, Constants.CENHDR); + return data; + }, + + toString : function() { + return '{\n' + + '\t"made" : ' + _verMade + ",\n" + + '\t"version" : ' + _version + ",\n" + + '\t"flags" : ' + _flags + ",\n" + + '\t"method" : ' + Utils.methodToString(_method) + ",\n" + + '\t"time" : ' + _time + ",\n" + + '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + + '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + + '\t"size" : ' + _size + " bytes,\n" + + '\t"fileNameLength" : ' + _fnameLen + ",\n" + + '\t"extraLength" : ' + _extraLen + " bytes,\n" + + '\t"commentLength" : ' + _comLen + " bytes,\n" + + '\t"diskNumStart" : ' + _diskStart + ",\n" + + '\t"inAttr" : ' + _inattr + ",\n" + + '\t"attr" : ' + _attr + ",\n" + + '\t"offset" : ' + _offset + ",\n" + + '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + + '}'; + } + } +}; diff --git a/node_modules/adm-zip/headers/index.js b/node_modules/adm-zip/headers/index.js new file mode 100644 index 000000000..b8c67b96f --- /dev/null +++ b/node_modules/adm-zip/headers/index.js @@ -0,0 +1,2 @@ +exports.EntryHeader = require("./entryHeader"); +exports.MainHeader = require("./mainHeader"); diff --git a/node_modules/adm-zip/headers/mainHeader.js b/node_modules/adm-zip/headers/mainHeader.js new file mode 100644 index 000000000..002bc8a74 --- /dev/null +++ b/node_modules/adm-zip/headers/mainHeader.js @@ -0,0 +1,80 @@ +var Utils = require("../util"), + Constants = Utils.Constants; + +/* The entries in the end of central directory */ +module.exports = function () { + var _volumeEntries = 0, + _totalEntries = 0, + _size = 0, + _offset = 0, + _commentLength = 0; + + return { + get diskEntries () { return _volumeEntries }, + set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; }, + + get totalEntries () { return _totalEntries }, + set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; }, + + get size () { return _size }, + set size (/*Number*/val) { _size = val; }, + + get offset () { return _offset }, + set offset (/*Number*/val) { _offset = val; }, + + get commentLength () { return _commentLength }, + set commentLength (/*Number*/val) { _commentLength = val; }, + + get mainHeaderSize () { + return Constants.ENDHDR + _commentLength; + }, + + loadFromBinary : function(/*Buffer*/data) { + // data should be 22 bytes and start with "PK 05 06" + if (data.length != Constants.ENDHDR || data.readUInt32LE(0) != Constants.ENDSIG) + throw Utils.Errors.INVALID_END; + + // number of entries on this volume + _volumeEntries = data.readUInt16LE(Constants.ENDSUB); + // total number of entries + _totalEntries = data.readUInt16LE(Constants.ENDTOT); + // central directory size in bytes + _size = data.readUInt32LE(Constants.ENDSIZ); + // offset of first CEN header + _offset = data.readUInt32LE(Constants.ENDOFF); + // zip file comment length + _commentLength = data.readUInt16LE(Constants.ENDCOM); + }, + + toBinary : function() { + var b = new Buffer(Constants.ENDHDR + _commentLength); + // "PK 05 06" signature + b.writeUInt32LE(Constants.ENDSIG, 0); + b.writeUInt32LE(0, 4); + // number of entries on this volume + b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); + // total number of entries + b.writeUInt16LE(_totalEntries, Constants.ENDTOT); + // central directory size in bytes + b.writeUInt32LE(_size, Constants.ENDSIZ); + // offset of first CEN header + b.writeUInt32LE(_offset, Constants.ENDOFF); + // zip file comment length + b.writeUInt16LE(_commentLength, Constants.ENDCOM); + // fill comment memory with spaces so no garbage is left there + b.fill(" ", Constants.ENDHDR); + + return b; + }, + + toString : function() { + return '{\n' + + '\t"diskEntries" : ' + _volumeEntries + ",\n" + + '\t"totalEntries" : ' + _totalEntries + ",\n" + + '\t"size" : ' + _size + " bytes,\n" + + '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + + '\t"commentLength" : 0x' + _commentLength + "\n" + + '}'; + } + } +}; \ No newline at end of file diff --git a/node_modules/adm-zip/methods/deflater.js b/node_modules/adm-zip/methods/deflater.js new file mode 100644 index 000000000..326794349 --- /dev/null +++ b/node_modules/adm-zip/methods/deflater.js @@ -0,0 +1,1578 @@ +/* + * $Id: rawdeflate.js,v 0.5 2013/04/09 14:25:38 dankogai Exp dankogai $ + * + * GNU General Public License, version 2 (GPL-2.0) + * http://opensource.org/licenses/GPL-2.0 + * Original: + * http://www.onicos.com/staff/iz/amuse/javascript/expert/deflate.txt + */ +function JSDeflater(/*inbuff*/inbuf) { + + /* Copyright (C) 1999 Masanao Izumo + * Version: 1.0.1 + * LastModified: Dec 25 1999 + */ + + var WSIZE = 32768, // Sliding Window size + zip_STORED_BLOCK = 0, + zip_STATIC_TREES = 1, + zip_DYN_TREES = 2, + zip_DEFAULT_LEVEL = 6, + zip_FULL_SEARCH = true, + zip_INBUFSIZ = 32768, // Input buffer size + zip_INBUF_EXTRA = 64, // Extra buffer + zip_OUTBUFSIZ = 1024 * 8, + zip_window_size = 2 * WSIZE, + MIN_MATCH = 3, + MAX_MATCH = 258, + zip_BITS = 16, + LIT_BUFSIZE = 0x2000, + zip_HASH_BITS = 13, + zip_DIST_BUFSIZE = LIT_BUFSIZE, + zip_HASH_SIZE = 1 << zip_HASH_BITS, + zip_HASH_MASK = zip_HASH_SIZE - 1, + zip_WMASK = WSIZE - 1, + zip_NIL = 0, // Tail of hash chains + zip_TOO_FAR = 4096, + zip_MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1, + zip_MAX_DIST = WSIZE - zip_MIN_LOOKAHEAD, + zip_SMALLEST = 1, + zip_MAX_BITS = 15, + zip_MAX_BL_BITS = 7, + zip_LENGTH_CODES = 29, + zip_LITERALS = 256, + zip_END_BLOCK = 256, + zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES, + zip_D_CODES = 30, + zip_BL_CODES = 19, + zip_REP_3_6 = 16, + zip_REPZ_3_10 = 17, + zip_REPZ_11_138 = 18, + zip_HEAP_SIZE = 2 * zip_L_CODES + 1, + zip_H_SHIFT = parseInt((zip_HASH_BITS + MIN_MATCH - 1) / MIN_MATCH); + + var zip_free_queue, zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete, + zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head, + zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start, zip_eofile, + zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match, + zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtree, zip_bl_tree, zip_l_desc, zip_d_desc, zip_bl_desc, + zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length, + zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len, + zip_static_len, zip_deflate_data, zip_deflate_pos; + + var zip_DeflateCT = function () { + this.fc = 0; // frequency count or bit string + this.dl = 0; // father node in Huffman tree or length of bit string + }; + + var zip_DeflateTreeDesc = function () { + this.dyn_tree = null; // the dynamic tree + this.static_tree = null; // corresponding static tree or NULL + this.extra_bits = null; // extra bits for each code or NULL + this.extra_base = 0; // base index for extra_bits + this.elems = 0; // max number of elements in the tree + this.max_length = 0; // max bit length for the codes + this.max_code = 0; // largest code with non zero frequency + }; + + /* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ + var zip_DeflateConfiguration = function (a, b, c, d) { + this.good_length = a; // reduce lazy search above this match length + this.max_lazy = b; // do not perform lazy search above this match length + this.nice_length = c; // quit search above this match length + this.max_chain = d; + }; + + var zip_DeflateBuffer = function () { + this.next = null; + this.len = 0; + this.ptr = new Array(zip_OUTBUFSIZ); + this.off = 0; + }; + + /* constant tables */ + var zip_extra_lbits = new Array( + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0); + var zip_extra_dbits = new Array( + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13); + var zip_extra_blbits = new Array( + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7); + var zip_bl_order = new Array( + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); + var zip_configuration_table = new Array( + new zip_DeflateConfiguration(0, 0, 0, 0), + new zip_DeflateConfiguration(4, 4, 8, 4), + new zip_DeflateConfiguration(4, 5, 16, 8), + new zip_DeflateConfiguration(4, 6, 32, 32), + new zip_DeflateConfiguration(4, 4, 16, 16), + new zip_DeflateConfiguration(8, 16, 32, 32), + new zip_DeflateConfiguration(8, 16, 128, 128), + new zip_DeflateConfiguration(8, 32, 128, 256), + new zip_DeflateConfiguration(32, 128, 258, 1024), + new zip_DeflateConfiguration(32, 258, 258, 4096)); + + + /* routines (deflate) */ + + var zip_deflate_start = function (level) { + var i; + + if (!level) + level = zip_DEFAULT_LEVEL; + else if (level < 1) + level = 1; + else if (level > 9) + level = 9; + + zip_compr_level = level; + zip_initflag = false; + zip_eofile = false; + if (zip_outbuf != null) + return; + + zip_free_queue = zip_qhead = zip_qtail = null; + zip_outbuf = new Array(zip_OUTBUFSIZ); + zip_window = new Array(zip_window_size); + zip_d_buf = new Array(zip_DIST_BUFSIZE); + zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA); + zip_prev = new Array(1 << zip_BITS); + zip_dyn_ltree = new Array(zip_HEAP_SIZE); + for (i = 0; i < zip_HEAP_SIZE; i++) zip_dyn_ltree[i] = new zip_DeflateCT(); + zip_dyn_dtree = new Array(2 * zip_D_CODES + 1); + for (i = 0; i < 2 * zip_D_CODES + 1; i++) zip_dyn_dtree[i] = new zip_DeflateCT(); + zip_static_ltree = new Array(zip_L_CODES + 2); + for (i = 0; i < zip_L_CODES + 2; i++) zip_static_ltree[i] = new zip_DeflateCT(); + zip_static_dtree = new Array(zip_D_CODES); + for (i = 0; i < zip_D_CODES; i++) zip_static_dtree[i] = new zip_DeflateCT(); + zip_bl_tree = new Array(2 * zip_BL_CODES + 1); + for (i = 0; i < 2 * zip_BL_CODES + 1; i++) zip_bl_tree[i] = new zip_DeflateCT(); + zip_l_desc = new zip_DeflateTreeDesc(); + zip_d_desc = new zip_DeflateTreeDesc(); + zip_bl_desc = new zip_DeflateTreeDesc(); + zip_bl_count = new Array(zip_MAX_BITS + 1); + zip_heap = new Array(2 * zip_L_CODES + 1); + zip_depth = new Array(2 * zip_L_CODES + 1); + zip_length_code = new Array(MAX_MATCH - MIN_MATCH + 1); + zip_dist_code = new Array(512); + zip_base_length = new Array(zip_LENGTH_CODES); + zip_base_dist = new Array(zip_D_CODES); + zip_flag_buf = new Array(parseInt(LIT_BUFSIZE / 8)); + }; + + var zip_deflate_end = function () { + zip_free_queue = zip_qhead = zip_qtail = null; + zip_outbuf = null; + zip_window = null; + zip_d_buf = null; + zip_l_buf = null; + zip_prev = null; + zip_dyn_ltree = null; + zip_dyn_dtree = null; + zip_static_ltree = null; + zip_static_dtree = null; + zip_bl_tree = null; + zip_l_desc = null; + zip_d_desc = null; + zip_bl_desc = null; + zip_bl_count = null; + zip_heap = null; + zip_depth = null; + zip_length_code = null; + zip_dist_code = null; + zip_base_length = null; + zip_base_dist = null; + zip_flag_buf = null; + }; + + var zip_reuse_queue = function (p) { + p.next = zip_free_queue; + zip_free_queue = p; + }; + + var zip_new_queue = function () { + var p; + + if (zip_free_queue != null) { + p = zip_free_queue; + zip_free_queue = zip_free_queue.next; + } + else + p = new zip_DeflateBuffer(); + p.next = null; + p.len = p.off = 0; + + return p; + }; + + var zip_head1 = function (i) { + return zip_prev[WSIZE + i]; + }; + + var zip_head2 = function (i, val) { + return zip_prev[WSIZE + i] = val; + }; + + /* put_byte is used for the compressed output, put_ubyte for the + * uncompressed output. However unlzw() uses window for its + * suffix table instead of its output buffer, so it does not use put_ubyte + * (to be cleaned up). + */ + var zip_put_byte = function (c) { + zip_outbuf[zip_outoff + zip_outcnt++] = c; + if (zip_outoff + zip_outcnt == zip_OUTBUFSIZ) + zip_qoutbuf(); + }; + + /* Output a 16 bit value, lsb first */ + var zip_put_short = function (w) { + w &= 0xffff; + if (zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) { + zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff); + zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8); + } else { + zip_put_byte(w & 0xff); + zip_put_byte(w >>> 8); + } + }; + + /* ========================================================================== + * Insert string s in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of s are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ + var zip_INSERT_STRING = function () { + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) + ^ (zip_window[zip_strstart + MIN_MATCH - 1] & 0xff)) + & zip_HASH_MASK; + zip_hash_head = zip_head1(zip_ins_h); + zip_prev[zip_strstart & zip_WMASK] = zip_hash_head; + zip_head2(zip_ins_h, zip_strstart); + }; + + /* Send a code of the given tree. c and tree must not have side effects */ + var zip_SEND_CODE = function (c, tree) { + zip_send_bits(tree[c].fc, tree[c].dl); + }; + + /* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. dist_code[256] and dist_code[257] are never + * used. + */ + var zip_D_CODE = function (dist) { + return (dist < 256 ? zip_dist_code[dist] + : zip_dist_code[256 + (dist >> 7)]) & 0xff; + }; + + /* ========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ + var zip_SMALLER = function (tree, n, m) { + return tree[n].fc < tree[m].fc || + (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]); + }; + + /* ========================================================================== + * read string data + */ + var zip_read_buff = function (buff, offset, n) { + var i; + for (i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++) + buff[offset + i] = + zip_deflate_data[zip_deflate_pos++] & 0xff; + return i; + }; + + /* ========================================================================== + * Initialize the "longest match" routines for a new file + */ + var zip_lm_init = function () { + var j; + + /* Initialize the hash table. */ + for (j = 0; j < zip_HASH_SIZE; j++) + zip_prev[WSIZE + j] = 0; + zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy; + zip_good_match = zip_configuration_table[zip_compr_level].good_length; + if (!zip_FULL_SEARCH) + zip_nice_match = zip_configuration_table[zip_compr_level].nice_length; + zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain; + + zip_strstart = 0; + zip_block_start = 0; + + zip_lookahead = zip_read_buff(zip_window, 0, 2 * WSIZE); + if (zip_lookahead <= 0) { + zip_eofile = true; + zip_lookahead = 0; + return; + } + zip_eofile = false; + /* Make sure that we always have enough lookahead. This is important + * if input comes from a device such as a tty. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + + /* If lookahead < MIN_MATCH, ins_h is garbage, but this is + * not important since only literal bytes will be emitted. + */ + zip_ins_h = 0; + for (j = 0; j < MIN_MATCH - 1; j++) { + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK; + } + }; + + /* ========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + */ + var zip_longest_match = function (cur_match) { + var chain_length = zip_max_chain_length; // max hash chain length + var scanp = zip_strstart; // current string + var matchp; // matched string + var len; // length of current match + var best_len = zip_prev_length; // best match length so far + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL); + + var strendp = zip_strstart + MAX_MATCH; + var scan_end1 = zip_window[scanp + best_len - 1]; + var scan_end = zip_window[scanp + best_len]; + + /* Do not waste too much time if we already have a good match: */ + if (zip_prev_length >= zip_good_match) + chain_length >>= 2; + + do { + matchp = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2: + */ + if (zip_window[matchp + best_len] != scan_end || + zip_window[matchp + best_len - 1] != scan_end1 || + zip_window[matchp] != zip_window[scanp] || + zip_window[++matchp] != zip_window[scanp + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scanp += 2; + matchp++; + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + zip_window[++scanp] == zip_window[++matchp] && + scanp < strendp); + + len = MAX_MATCH - (strendp - scanp); + scanp = strendp - MAX_MATCH; + + if (len > best_len) { + zip_match_start = cur_match; + best_len = len; + if (zip_FULL_SEARCH) { + if (len >= MAX_MATCH) break; + } else { + if (len >= zip_nice_match) break; + } + + scan_end1 = zip_window[scanp + best_len - 1]; + scan_end = zip_window[scanp + best_len]; + } + } while ((cur_match = zip_prev[cur_match & zip_WMASK]) > limit + && --chain_length != 0); + + return best_len; + }; + + /* ========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead, and sets eofile if end of input file. + * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0 + * OUT assertions: at least one byte has been read, or eofile is set; + * file reads are performed for at least two bytes (required for the + * translate_eol option). + */ + var zip_fill_window = function () { + var n, m; + + // Amount of free space at the end of the window. + var more = zip_window_size - zip_lookahead - zip_strstart; + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (more == -1) { + /* Very unlikely, but possible on 16 bit machine if strstart == 0 + * and lookahead == 1 (input done one byte at time) + */ + more--; + } else if (zip_strstart >= WSIZE + zip_MAX_DIST) { + /* By the IN assertion, the window is not empty so we can't confuse + * more == 0 with more == 64K on a 16 bit machine. + */ + for (n = 0; n < WSIZE; n++) + zip_window[n] = zip_window[n + WSIZE]; + + zip_match_start -= WSIZE; + zip_strstart -= WSIZE; + /* we now have strstart >= MAX_DIST: */ + zip_block_start -= WSIZE; + + for (n = 0; n < zip_HASH_SIZE; n++) { + m = zip_head1(n); + zip_head2(n, m >= WSIZE ? m - WSIZE : zip_NIL); + } + for (n = 0; n < WSIZE; n++) { + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + m = zip_prev[n]; + zip_prev[n] = (m >= WSIZE ? m - WSIZE : zip_NIL); + } + more += WSIZE; + } + // At this point, more >= 2 + if (!zip_eofile) { + n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more); + if (n <= 0) + zip_eofile = true; + else + zip_lookahead += n; + } + }; + + /* ========================================================================== + * Processes a new input file and return its compressed length. This + * function does not perform lazy evaluationof matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ + var zip_deflate_fast = function () { + while (zip_lookahead != 0 && zip_qhead == null) { + var flush; // set if current block must be flushed + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + zip_INSERT_STRING(); + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (zip_hash_head != zip_NIL && + zip_strstart - zip_hash_head <= zip_MAX_DIST) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + zip_match_length = zip_longest_match(zip_hash_head); + /* longest_match() sets match_start */ + if (zip_match_length > zip_lookahead) + zip_match_length = zip_lookahead; + } + if (zip_match_length >= MIN_MATCH) { + flush = zip_ct_tally(zip_strstart - zip_match_start, + zip_match_length - MIN_MATCH); + zip_lookahead -= zip_match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (zip_match_length <= zip_max_lazy_match) { + zip_match_length--; // string at strstart already in hash table + do { + zip_strstart++; + zip_INSERT_STRING(); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH + * these bytes are garbage, but it does not matter since + * the next lookahead bytes will be emitted as literals. + */ + } while (--zip_match_length != 0); + zip_strstart++; + } else { + zip_strstart += zip_match_length; + zip_match_length = 0; + zip_ins_h = zip_window[zip_strstart] & 0xff; + zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK; + } + } else { + /* No match, output a literal byte */ + flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff); + zip_lookahead--; + zip_strstart++; + } + if (flush) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + } + }; + + var zip_deflate_better = function () { + /* Process the input block. */ + while (zip_lookahead != 0 && zip_qhead == null) { + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + zip_INSERT_STRING(); + + /* Find the longest match, discarding those <= prev_length. + */ + zip_prev_length = zip_match_length; + zip_prev_match = zip_match_start; + zip_match_length = MIN_MATCH - 1; + + if (zip_hash_head != zip_NIL && + zip_prev_length < zip_max_lazy_match && + zip_strstart - zip_hash_head <= zip_MAX_DIST) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + zip_match_length = zip_longest_match(zip_hash_head); + /* longest_match() sets match_start */ + if (zip_match_length > zip_lookahead) + zip_match_length = zip_lookahead; + + /* Ignore a length 3 match if it is too distant: */ + if (zip_match_length == MIN_MATCH && + zip_strstart - zip_match_start > zip_TOO_FAR) { + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + zip_match_length--; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (zip_prev_length >= MIN_MATCH && + zip_match_length <= zip_prev_length) { + var flush; // set if current block must be flushed + flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, + zip_prev_length - MIN_MATCH); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. + */ + zip_lookahead -= zip_prev_length - 1; + zip_prev_length -= 2; + do { + zip_strstart++; + zip_INSERT_STRING(); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH + * these bytes are garbage, but it does not matter since the + * next lookahead bytes will always be emitted as literals. + */ + } while (--zip_prev_length != 0); + zip_match_available = 0; + zip_match_length = MIN_MATCH - 1; + zip_strstart++; + if (flush) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + } else if (zip_match_available != 0) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + if (zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) { + zip_flush_block(0); + zip_block_start = zip_strstart; + } + zip_strstart++; + zip_lookahead--; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + zip_match_available = 1; + zip_strstart++; + zip_lookahead--; + } + + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + while (zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) + zip_fill_window(); + } + }; + + var zip_init_deflate = function () { + if (zip_eofile) + return; + zip_bi_buf = 0; + zip_bi_valid = 0; + zip_ct_init(); + zip_lm_init(); + + zip_qhead = null; + zip_outcnt = 0; + zip_outoff = 0; + zip_match_available = 0; + + if (zip_compr_level <= 3) { + zip_prev_length = MIN_MATCH - 1; + zip_match_length = 0; + } + else { + zip_match_length = MIN_MATCH - 1; + zip_match_available = 0; + zip_match_available = 0; + } + + zip_complete = false; + }; + + /* ========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ + var zip_deflate_internal = function (buff, off, buff_size) { + var n; + + if (!zip_initflag) { + zip_init_deflate(); + zip_initflag = true; + if (zip_lookahead == 0) { // empty + zip_complete = true; + return 0; + } + } + + if ((n = zip_qcopy(buff, off, buff_size)) == buff_size) + return buff_size; + + if (zip_complete) + return n; + + if (zip_compr_level <= 3) // optimized for speed + zip_deflate_fast(); + else + zip_deflate_better(); + if (zip_lookahead == 0) { + if (zip_match_available != 0) + zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff); + zip_flush_block(1); + zip_complete = true; + } + return n + zip_qcopy(buff, n + off, buff_size - n); + }; + + var zip_qcopy = function (buff, off, buff_size) { + var n, i, j; + + n = 0; + while (zip_qhead != null && n < buff_size) { + i = buff_size - n; + if (i > zip_qhead.len) + i = zip_qhead.len; + for (j = 0; j < i; j++) + buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]; + + zip_qhead.off += i; + zip_qhead.len -= i; + n += i; + if (zip_qhead.len == 0) { + var p; + p = zip_qhead; + zip_qhead = zip_qhead.next; + zip_reuse_queue(p); + } + } + + if (n == buff_size) + return n; + + if (zip_outoff < zip_outcnt) { + i = buff_size - n; + if (i > zip_outcnt - zip_outoff) + i = zip_outcnt - zip_outoff; + // System.arraycopy(outbuf, outoff, buff, off + n, i); + for (j = 0; j < i; j++) + buff[off + n + j] = zip_outbuf[zip_outoff + j]; + zip_outoff += i; + n += i; + if (zip_outcnt == zip_outoff) + zip_outcnt = zip_outoff = 0; + } + return n; + }; + + /* ========================================================================== + * Allocate the match buffer, initialize the various tables and save the + * location of the internal file attribute (ascii/binary) and method + * (DEFLATE/STORE). + */ + var zip_ct_init = function () { + var n; // iterates over tree elements + var bits; // bit counter + var length; // length value + var code; // code value + var dist; // distance index + + if (zip_static_dtree[0].dl != 0) return; // ct_init already called + + zip_l_desc.dyn_tree = zip_dyn_ltree; + zip_l_desc.static_tree = zip_static_ltree; + zip_l_desc.extra_bits = zip_extra_lbits; + zip_l_desc.extra_base = zip_LITERALS + 1; + zip_l_desc.elems = zip_L_CODES; + zip_l_desc.max_length = zip_MAX_BITS; + zip_l_desc.max_code = 0; + + zip_d_desc.dyn_tree = zip_dyn_dtree; + zip_d_desc.static_tree = zip_static_dtree; + zip_d_desc.extra_bits = zip_extra_dbits; + zip_d_desc.extra_base = 0; + zip_d_desc.elems = zip_D_CODES; + zip_d_desc.max_length = zip_MAX_BITS; + zip_d_desc.max_code = 0; + + zip_bl_desc.dyn_tree = zip_bl_tree; + zip_bl_desc.static_tree = null; + zip_bl_desc.extra_bits = zip_extra_blbits; + zip_bl_desc.extra_base = 0; + zip_bl_desc.elems = zip_BL_CODES; + zip_bl_desc.max_length = zip_MAX_BL_BITS; + zip_bl_desc.max_code = 0; + + // Initialize the mapping length (0..255) -> length code (0..28) + length = 0; + for (code = 0; code < zip_LENGTH_CODES - 1; code++) { + zip_base_length[code] = length; + for (n = 0; n < (1 << zip_extra_lbits[code]); n++) + zip_length_code[length++] = code; + } + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + zip_length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + zip_base_dist[code] = dist; + for (n = 0; n < (1 << zip_extra_dbits[code]); n++) { + zip_dist_code[dist++] = code; + } + } + dist >>= 7; // from now on, all distances are divided by 128 + for (; code < zip_D_CODES; code++) { + zip_base_dist[code] = dist << 7; + for (n = 0; n < (1 << (zip_extra_dbits[code] - 7)); n++) + zip_dist_code[256 + dist++] = code; + } + // Construct the codes of the static literal tree + for (bits = 0; bits <= zip_MAX_BITS; bits++) + zip_bl_count[bits] = 0; + n = 0; + while (n <= 143) { + zip_static_ltree[n++].dl = 8; + zip_bl_count[8]++; + } + while (n <= 255) { + zip_static_ltree[n++].dl = 9; + zip_bl_count[9]++; + } + while (n <= 279) { + zip_static_ltree[n++].dl = 7; + zip_bl_count[7]++; + } + while (n <= 287) { + zip_static_ltree[n++].dl = 8; + zip_bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + zip_gen_codes(zip_static_ltree, zip_L_CODES + 1); + + /* The static distance tree is trivial: */ + for (n = 0; n < zip_D_CODES; n++) { + zip_static_dtree[n].dl = 5; + zip_static_dtree[n].fc = zip_bi_reverse(n, 5); + } + + // Initialize the first block of the first file: + zip_init_block(); + }; + + /* ========================================================================== + * Initialize a new block. + */ + var zip_init_block = function () { + var n; // iterates over tree elements + + // Initialize the trees. + for (n = 0; n < zip_L_CODES; n++) zip_dyn_ltree[n].fc = 0; + for (n = 0; n < zip_D_CODES; n++) zip_dyn_dtree[n].fc = 0; + for (n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0; + + zip_dyn_ltree[zip_END_BLOCK].fc = 1; + zip_opt_len = zip_static_len = 0; + zip_last_lit = zip_last_dist = zip_last_flags = 0; + zip_flags = 0; + zip_flag_bit = 1; + }; + + /* ========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ + var zip_pqdownheap = function (tree, // the tree to restore + k) { // node to move down + var v = zip_heap[k]; + var j = k << 1; // left son of k + + while (j <= zip_heap_len) { + // Set j to the smallest of the two sons: + if (j < zip_heap_len && + zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) + j++; + + // Exit if v is smaller than both sons + if (zip_SMALLER(tree, v, zip_heap[j])) + break; + + // Exchange v with the smallest son + zip_heap[k] = zip_heap[j]; + k = j; + + // And continue down the tree, setting j to the left son of k + j <<= 1; + } + zip_heap[k] = v; + }; + + /* ========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ + var zip_gen_bitlen = function (desc) { // the tree descriptor + var tree = desc.dyn_tree; + var extra = desc.extra_bits; + var base = desc.extra_base; + var max_code = desc.max_code; + var max_length = desc.max_length; + var stree = desc.static_tree; + var h; // heap index + var n, m; // iterate over the tree elements + var bits; // bit length + var xbits; // extra bits + var f; // frequency + var overflow = 0; // number of elements with bit length too large + + for (bits = 0; bits <= zip_MAX_BITS; bits++) + zip_bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap + + for (h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) { + n = zip_heap[h]; + bits = tree[tree[n].dl].dl + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n].dl = bits; + // We overwrite tree[n].dl which is no longer needed + + if (n > max_code) + continue; // not a leaf node + + zip_bl_count[bits]++; + xbits = 0; + if (n >= base) + xbits = extra[n - base]; + f = tree[n].fc; + zip_opt_len += f * (bits + xbits); + if (stree != null) + zip_static_len += f * (stree[n].dl + xbits); + } + if (overflow == 0) + return; + + // This happens for example on obj2 and pic of the Calgary corpus + + // Find the first bit length which could increase: + do { + bits = max_length - 1; + while (zip_bl_count[bits] == 0) + bits--; + zip_bl_count[bits]--; // move one leaf down the tree + zip_bl_count[bits + 1] += 2; // move one overflow item as its brother + zip_bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = zip_bl_count[bits]; + while (n != 0) { + m = zip_heap[--h]; + if (m > max_code) + continue; + if (tree[m].dl != bits) { + zip_opt_len += (bits - tree[m].dl) * tree[m].fc; + tree[m].fc = bits; + } + n--; + } + } + }; + + /* ========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ + var zip_gen_codes = function (tree, // the tree to decorate + max_code) { // largest code with non zero frequency + var next_code = new Array(zip_MAX_BITS + 1); // next code value for each bit length + var code = 0; // running code value + var bits; // bit index + var n; // code index + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= zip_MAX_BITS; bits++) { + code = ((code + zip_bl_count[bits - 1]) << 1); + next_code[bits] = code; + } + + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + for (n = 0; n <= max_code; n++) { + var len = tree[n].dl; + if (len == 0) + continue; + // Now reverse the bits + tree[n].fc = zip_bi_reverse(next_code[len]++, len); + } + }; + + /* ========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ + var zip_build_tree = function (desc) { // the tree descriptor + var tree = desc.dyn_tree; + var stree = desc.static_tree; + var elems = desc.elems; + var n, m; // iterate over heap elements + var max_code = -1; // largest code with non zero frequency + var node = elems; // next internal node of the tree + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + zip_heap_len = 0; + zip_heap_max = zip_HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].fc != 0) { + zip_heap[++zip_heap_len] = max_code = n; + zip_depth[n] = 0; + } else + tree[n].dl = 0; + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (zip_heap_len < 2) { + var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0); + tree[xnew].fc = 1; + zip_depth[xnew] = 0; + zip_opt_len--; + if (stree != null) + zip_static_len -= stree[xnew].dl; + // new is 0 or 1 so it does not have extra bits + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = zip_heap_len >> 1; n >= 1; n--) + zip_pqdownheap(tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + do { + n = zip_heap[zip_SMALLEST]; + zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--]; + zip_pqdownheap(tree, zip_SMALLEST); + + m = zip_heap[zip_SMALLEST]; // m = node of next least frequency + + // keep the nodes sorted by frequency + zip_heap[--zip_heap_max] = n; + zip_heap[--zip_heap_max] = m; + + // Create a new node father of n and m + tree[node].fc = tree[n].fc + tree[m].fc; + if (zip_depth[n] > zip_depth[m] + 1) + zip_depth[node] = zip_depth[n]; + else + zip_depth[node] = zip_depth[m] + 1; + tree[n].dl = tree[m].dl = node; + + // and insert the new node in the heap + zip_heap[zip_SMALLEST] = node++; + zip_pqdownheap(tree, zip_SMALLEST); + + } while (zip_heap_len >= 2); + + zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + zip_gen_bitlen(desc); + + // The field len is now set, we can generate the bit codes + zip_gen_codes(tree, max_code); + }; + + /* ========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. Updates opt_len to take into account the repeat + * counts. (The contribution of the bit length codes will be added later + * during the construction of bl_tree.) + */ + var zip_scan_tree = function (tree,// the tree to be scanned + max_code) { // and its largest code of non zero frequency + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0].dl; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + tree[max_code + 1].dl = 0xffff; // guard + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[n + 1].dl; + if (++count < max_count && curlen == nextlen) + continue; + else if (count < min_count) + zip_bl_tree[curlen].fc += count; + else if (curlen != 0) { + if (curlen != prevlen) + zip_bl_tree[curlen].fc++; + zip_bl_tree[zip_REP_3_6].fc++; + } else if (count <= 10) + zip_bl_tree[zip_REPZ_3_10].fc++; + else + zip_bl_tree[zip_REPZ_11_138].fc++; + count = 0; + prevlen = curlen; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + }; + + /* ========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ + var zip_send_tree = function (tree, // the tree to be scanned + max_code) { // and its largest code of non zero frequency + var n; // iterates over all tree elements + var prevlen = -1; // last emitted length + var curlen; // length of current code + var nextlen = tree[0].dl; // length of next code + var count = 0; // repeat count of the current code + var max_count = 7; // max repeat count + var min_count = 4; // min repeat count + + /* tree[max_code+1].dl = -1; */ + /* guard already set */ + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[n + 1].dl; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { + zip_SEND_CODE(curlen, zip_bl_tree); + } while (--count != 0); + } else if (curlen != 0) { + if (curlen != prevlen) { + zip_SEND_CODE(curlen, zip_bl_tree); + count--; + } + // Assert(count >= 3 && count <= 6, " 3_6?"); + zip_SEND_CODE(zip_REP_3_6, zip_bl_tree); + zip_send_bits(count - 3, 2); + } else if (count <= 10) { + zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree); + zip_send_bits(count - 3, 3); + } else { + zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree); + zip_send_bits(count - 11, 7); + } + count = 0; + prevlen = curlen; + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else if (curlen == nextlen) { + max_count = 6; + min_count = 3; + } else { + max_count = 7; + min_count = 4; + } + } + }; + + /* ========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ + var zip_build_bl_tree = function () { + var max_blindex; // index of last bit length code of non zero freq + + // Determine the bit length frequencies for literal and distance trees + zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code); + zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code); + + // Build the bit length tree: + zip_build_tree(zip_bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = zip_BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + return max_blindex; + }; + + /* ========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ + var zip_send_all_trees = function (lcodes, dcodes, blcodes) { // number of codes for each tree + var rank; // index in bl_order + zip_send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt + zip_send_bits(dcodes - 1, 5); + zip_send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt + for (rank = 0; rank < blcodes; rank++) { + zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3); + } + + // send the literal tree + zip_send_tree(zip_dyn_ltree, lcodes - 1); + + // send the distance tree + zip_send_tree(zip_dyn_dtree, dcodes - 1); + }; + + /* ========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ + var zip_flush_block = function (eof) { // true if this is the last block for a file + var opt_lenb, static_lenb; // opt_len and static_len in bytes + var max_blindex; // index of last bit length code of non zero freq + var stored_len; // length of input block + + stored_len = zip_strstart - zip_block_start; + zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items + + // Construct the literal and distance trees + zip_build_tree(zip_l_desc); + zip_build_tree(zip_d_desc); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = zip_build_bl_tree(); + + // Determine the best encoding. Compute first the block length in bytes + opt_lenb = (zip_opt_len + 3 + 7) >> 3; + static_lenb = (zip_static_len + 3 + 7) >> 3; + if (static_lenb <= opt_lenb) + opt_lenb = static_lenb; + if (stored_len + 4 <= opt_lenb // 4: two words for the lengths + && zip_block_start >= 0) { + var i; + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3); + /* send block type */ + zip_bi_windup(); + /* align on byte boundary */ + zip_put_short(stored_len); + zip_put_short(~stored_len); + + // copy block + for (i = 0; i < stored_len; i++) + zip_put_byte(zip_window[zip_block_start + i]); + + } else if (static_lenb == opt_lenb) { + zip_send_bits((zip_STATIC_TREES << 1) + eof, 3); + zip_compress_block(zip_static_ltree, zip_static_dtree); + } else { + zip_send_bits((zip_DYN_TREES << 1) + eof, 3); + zip_send_all_trees(zip_l_desc.max_code + 1, + zip_d_desc.max_code + 1, + max_blindex + 1); + zip_compress_block(zip_dyn_ltree, zip_dyn_dtree); + } + + zip_init_block(); + + if (eof != 0) + zip_bi_windup(); + }; + + /* ========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ + var zip_ct_tally = function (dist, // distance of matched string + lc) { // match length-MIN_MATCH or unmatched char (if dist==0) + zip_l_buf[zip_last_lit++] = lc; + if (dist == 0) { + // lc is the unmatched char + zip_dyn_ltree[lc].fc++; + } else { + // Here, lc is the match length - MIN_MATCH + dist--; // dist = match distance - 1 + zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++; + zip_dyn_dtree[zip_D_CODE(dist)].fc++; + + zip_d_buf[zip_last_dist++] = dist; + zip_flags |= zip_flag_bit; + } + zip_flag_bit <<= 1; + + // Output the flags if they fill a byte + if ((zip_last_lit & 7) == 0) { + zip_flag_buf[zip_last_flags++] = zip_flags; + zip_flags = 0; + zip_flag_bit = 1; + } + // Try to guess if it is profitable to stop the current block here + if (zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) { + // Compute an upper bound for the compressed length + var out_length = zip_last_lit * 8; + var in_length = zip_strstart - zip_block_start; + var dcode; + + for (dcode = 0; dcode < zip_D_CODES; dcode++) { + out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]); + } + out_length >>= 3; + if (zip_last_dist < parseInt(zip_last_lit / 2) && + out_length < parseInt(in_length / 2)) + return true; + } + return (zip_last_lit == LIT_BUFSIZE - 1 || + zip_last_dist == zip_DIST_BUFSIZE); + /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ + }; + + /* ========================================================================== + * Send the block data compressed using the given Huffman trees + */ + var zip_compress_block = function (ltree, // literal tree + dtree) { // distance tree + var dist; // distance of matched string + var lc; // match length or unmatched char (if dist == 0) + var lx = 0; // running index in l_buf + var dx = 0; // running index in d_buf + var fx = 0; // running index in flag_buf + var flag = 0; // current flags + var code; // the code to send + var extra; // number of extra bits to send + + if (zip_last_lit != 0) do { + if ((lx & 7) == 0) + flag = zip_flag_buf[fx++]; + lc = zip_l_buf[lx++] & 0xff; + if ((flag & 1) == 0) { + zip_SEND_CODE(lc, ltree); + /* send a literal byte */ + } else { + // Here, lc is the match length - MIN_MATCH + code = zip_length_code[lc]; + zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code + extra = zip_extra_lbits[code]; + if (extra != 0) { + lc -= zip_base_length[code]; + zip_send_bits(lc, extra); // send the extra length bits + } + dist = zip_d_buf[dx++]; + // Here, dist is the match distance - 1 + code = zip_D_CODE(dist); + zip_SEND_CODE(code, dtree); // send the distance code + extra = zip_extra_dbits[code]; + if (extra != 0) { + dist -= zip_base_dist[code]; + zip_send_bits(dist, extra); // send the extra distance bits + } + } // literal or match pair ? + flag >>= 1; + } while (lx < zip_last_lit); + + zip_SEND_CODE(zip_END_BLOCK, ltree); + }; + + /* ========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ + var zip_Buf_size = 16; // bit size of bi_buf + var zip_send_bits = function (value, // value to send + length) { // number of bits + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (zip_bi_valid > zip_Buf_size - length) { + zip_bi_buf |= (value << zip_bi_valid); + zip_put_short(zip_bi_buf); + zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid)); + zip_bi_valid += length - zip_Buf_size; + } else { + zip_bi_buf |= value << zip_bi_valid; + zip_bi_valid += length; + } + }; + + /* ========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ + var zip_bi_reverse = function (code, // the value to invert + len) { // its bit length + var res = 0; + do { + res |= code & 1; + code >>= 1; + res <<= 1; + } while (--len > 0); + return res >> 1; + }; + + /* ========================================================================== + * Write out any remaining bits in an incomplete byte. + */ + var zip_bi_windup = function () { + if (zip_bi_valid > 8) { + zip_put_short(zip_bi_buf); + } else if (zip_bi_valid > 0) { + zip_put_byte(zip_bi_buf); + } + zip_bi_buf = 0; + zip_bi_valid = 0; + }; + + var zip_qoutbuf = function () { + if (zip_outcnt != 0) { + var q, i; + q = zip_new_queue(); + if (zip_qhead == null) + zip_qhead = zip_qtail = q; + else + zip_qtail = zip_qtail.next = q; + q.len = zip_outcnt - zip_outoff; + for (i = 0; i < q.len; i++) + q.ptr[i] = zip_outbuf[zip_outoff + i]; + zip_outcnt = zip_outoff = 0; + } + }; + + function deflate(buffData, level) { + zip_deflate_data = buffData; + zip_deflate_pos = 0; + zip_deflate_start(level); + + var buff = new Array(1024), + pages = [], + totalSize = 0, + i; + + for (i = 0; i < 1024; i++) buff[i] = 0; + while ((i = zip_deflate_internal(buff, 0, buff.length)) > 0) { + var buf = new Buffer(buff.slice(0, i)); + pages.push(buf); + totalSize += buf.length; + } + + if (pages.length == 1) { + return pages[0]; + } + + var result = new Buffer(totalSize), + index = 0; + + for (i = 0; i < pages.length; i++) { + pages[i].copy(result, index); + index = index + pages[i].length + } + + return result; + } + + return { + deflate: function () { + return deflate(inbuf, 8); + } + } +} + +module.exports = function (/*Buffer*/inbuf) { + + var zlib = require("zlib"); + + return { + deflate: function () { + return new JSDeflater(inbuf).deflate(); + }, + + deflateAsync: function (/*Function*/callback) { + var tmp = zlib.createDeflateRaw({chunkSize:(parseInt(inbuf.length / 1024) + 1)*1024}), + parts = [], total = 0; + tmp.on('data', function(data) { + parts.push(data); + total += data.length; + }); + tmp.on('end', function() { + var buf = new Buffer(total), written = 0; + buf.fill(0); + + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf); + } + } +}; diff --git a/node_modules/adm-zip/methods/index.js b/node_modules/adm-zip/methods/index.js new file mode 100644 index 000000000..ddcbba600 --- /dev/null +++ b/node_modules/adm-zip/methods/index.js @@ -0,0 +1,2 @@ +exports.Deflater = require("./deflater"); +exports.Inflater = require("./inflater"); \ No newline at end of file diff --git a/node_modules/adm-zip/methods/inflater.js b/node_modules/adm-zip/methods/inflater.js new file mode 100644 index 000000000..59536c90e --- /dev/null +++ b/node_modules/adm-zip/methods/inflater.js @@ -0,0 +1,448 @@ +var Buffer = require("buffer").Buffer; + +function JSInflater(/*Buffer*/input) { + + var WSIZE = 0x8000, + slide = new Buffer(0x10000), + windowPos = 0, + fixedTableList = null, + fixedTableDist, + fixedLookup, + bitBuf = 0, + bitLen = 0, + method = -1, + eof = false, + copyLen = 0, + copyDist = 0, + tblList, tblDist, bitList, bitdist, + + inputPosition = 0, + + MASK_BITS = [0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff], + LENS = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], + LEXT = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99], + DISTS = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], + DEXT = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], + BITORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + + function HuffTable(clen, cnum, cval, blist, elist, lookupm) { + + this.status = 0; + this.root = null; + this.maxbit = 0; + + var el, f, tail, + offsets = [], + countTbl = [], + sTbl = [], + values = [], + tentry = {extra: 0, bitcnt: 0, lbase: 0, next: null}; + + tail = this.root = null; + for(var i = 0; i < 0x11; i++) { countTbl[i] = 0; sTbl[i] = 0; offsets[i] = 0; } + for(i = 0; i < 0x120; i++) values[i] = 0; + + el = cnum > 256 ? clen[256] : 16; + + var pidx = -1; + while (++pidx < cnum) countTbl[clen[pidx]]++; + + if(countTbl[0] == cnum) return; + + for(var j = 1; j <= 16; j++) if(countTbl[j] != 0) break; + var bitLen = j; + for(i = 16; i != 0; i--) if(countTbl[i] != 0) break; + var maxLen = i; + + lookupm < j && (lookupm = j); + + var dCodes = 1 << j; + for(; j < i; j++, dCodes <<= 1) + if((dCodes -= countTbl[j]) < 0) { + this.status = 2; + this.maxbit = lookupm; + return; + } + + if((dCodes -= countTbl[i]) < 0) { + this.status = 2; + this.maxbit = lookupm; + return; + } + + countTbl[i] += dCodes; + offsets[1] = j = 0; + pidx = 1; + var xp = 2; + while(--i > 0) offsets[xp++] = (j += countTbl[pidx++]); + pidx = 0; + i = 0; + do { + (j = clen[pidx++]) && (values[offsets[j]++] = i); + } while(++i < cnum); + cnum = offsets[maxLen]; + offsets[0] = i = 0; + pidx = 0; + + var level = -1, + w = sTbl[0] = 0, + cnode = null, + tblCnt = 0, + tblStack = []; + + for(; bitLen <= maxLen; bitLen++) { + var kccnt = countTbl[bitLen]; + while(kccnt-- > 0) { + while(bitLen > w + sTbl[1 + level]) { + w += sTbl[1 + level]; + level++; + tblCnt = (tblCnt = maxLen - w) > lookupm ? lookupm : tblCnt; + if((f = 1 << (j = bitLen - w)) > kccnt + 1) { + f -= kccnt + 1; + xp = bitLen; + while(++j < tblCnt) { + if((f <<= 1) <= countTbl[++xp]) break; + f -= countTbl[xp]; + } + } + if(w + j > el && w < el) j = el - w; + tblCnt = 1 << j; + sTbl[1 + level] = j; + cnode = []; + while (cnode.length < tblCnt) cnode.push({extra: 0, bitcnt: 0, lbase: 0, next: null}); + if (tail == null) { + tail = this.root = {next:null, list:null}; + } else { + tail = tail.next = {next:null, list:null} + } + tail.next = null; + tail.list = cnode; + + tblStack[level] = cnode; + + if(level > 0) { + offsets[level] = i; + tentry.bitcnt = sTbl[level]; + tentry.extra = 16 + j; + tentry.next = cnode; + j = (i & ((1 << w) - 1)) >> (w - sTbl[level]); + + tblStack[level-1][j].extra = tentry.extra; + tblStack[level-1][j].bitcnt = tentry.bitcnt; + tblStack[level-1][j].lbase = tentry.lbase; + tblStack[level-1][j].next = tentry.next; + } + } + tentry.bitcnt = bitLen - w; + if(pidx >= cnum) + tentry.extra = 99; + else if(values[pidx] < cval) { + tentry.extra = (values[pidx] < 256 ? 16 : 15); + tentry.lbase = values[pidx++]; + } else { + tentry.extra = elist[values[pidx] - cval]; + tentry.lbase = blist[values[pidx++] - cval]; + } + + f = 1 << (bitLen - w); + for(j = i >> w; j < tblCnt; j += f) { + cnode[j].extra = tentry.extra; + cnode[j].bitcnt = tentry.bitcnt; + cnode[j].lbase = tentry.lbase; + cnode[j].next = tentry.next; + } + for(j = 1 << (bitLen - 1); (i & j) != 0; j >>= 1) + i ^= j; + i ^= j; + while((i & ((1 << w) - 1)) != offsets[level]) { + w -= sTbl[level]; + level--; + } + } + } + + this.maxbit = sTbl[1]; + this.status = ((dCodes != 0 && maxLen != 1) ? 1 : 0); + } + + function addBits(n) { + while(bitLen < n) { + bitBuf |= input[inputPosition++] << bitLen; + bitLen += 8; + } + return bitBuf; + } + + function cutBits(n) { + bitLen -= n; + return bitBuf >>= n; + } + + function maskBits(n) { + while(bitLen < n) { + bitBuf |= input[inputPosition++] << bitLen; + bitLen += 8; + } + var res = bitBuf & MASK_BITS[n]; + bitBuf >>= n; + bitLen -= n; + return res; + } + + function codes(buff, off, size) { + var e, t; + if(size == 0) return 0; + + var n = 0; + for(;;) { + t = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; + e = t.extra; + while(e > 16) { + if(e == 99) return -1; + cutBits(t.bitcnt); + e -= 16; + t = t.next[addBits(e) & MASK_BITS[e]]; + e = t.extra; + } + cutBits(t.bitcnt); + if(e == 16) { + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = t.lbase; + if(n == size) return size; + continue; + } + if(e == 15) break; + + copyLen = t.lbase + maskBits(e); + t = tblDist.list[addBits(bitdist) & MASK_BITS[bitdist]]; + e = t.extra; + + while(e > 16) { + if(e == 99) return -1; + cutBits(t.bitcnt); + e -= 16; + t = t.next[addBits(e) & MASK_BITS[e]]; + e = t.extra + } + cutBits(t.bitcnt); + copyDist = windowPos - t.lbase - maskBits(e); + + while(copyLen > 0 && n < size) { + copyLen--; + copyDist &= WSIZE - 1; + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = slide[copyDist++]; + } + + if(n == size) return size; + } + + method = -1; // done + return n; + } + + function stored(buff, off, size) { + cutBits(bitLen & 7); + var n = maskBits(0x10); + if(n != ((~maskBits(0x10)) & 0xffff)) return -1; + copyLen = n; + + n = 0; + while(copyLen > 0 && n < size) { + copyLen--; + windowPos &= WSIZE - 1; + buff[off + n++] = slide[windowPos++] = maskBits(8); + } + + if(copyLen == 0) method = -1; + return n; + } + + function fixed(buff, off, size) { + var fixed_bd = 0; + if(fixedTableList == null) { + var lengths = []; + + for(var symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; + for(; symbol < 256; symbol++) lengths[symbol] = 9; + for(; symbol < 280; symbol++) lengths[symbol] = 7; + for(; symbol < 288; symbol++) lengths[symbol] = 8; + + fixedLookup = 7; + + var htbl = new HuffTable(lengths, 288, 257, LENS, LEXT, fixedLookup); + + if(htbl.status != 0) return -1; + + fixedTableList = htbl.root; + fixedLookup = htbl.maxbit; + + for(symbol = 0; symbol < 30; symbol++) lengths[symbol] = 5; + fixed_bd = 5; + + htbl = new HuffTable(lengths, 30, 0, DISTS, DEXT, fixed_bd); + if(htbl.status > 1) { + fixedTableList = null; + return -1; + } + fixedTableDist = htbl.root; + fixed_bd = htbl.maxbit; + } + + tblList = fixedTableList; + tblDist = fixedTableDist; + bitList = fixedLookup; + bitdist = fixed_bd; + return codes(buff, off, size); + } + + function dynamic(buff, off, size) { + var ll = new Array(0x023C); + + for (var m = 0; m < 0x023C; m++) ll[m] = 0; + + var llencnt = 257 + maskBits(5), + dcodescnt = 1 + maskBits(5), + bitlencnt = 4 + maskBits(4); + + if(llencnt > 286 || dcodescnt > 30) return -1; + + for(var j = 0; j < bitlencnt; j++) ll[BITORDER[j]] = maskBits(3); + for(; j < 19; j++) ll[BITORDER[j]] = 0; + + // build decoding table for trees--single level, 7 bit lookup + bitList = 7; + var hufTable = new HuffTable(ll, 19, 19, null, null, bitList); + if(hufTable.status != 0) + return -1; // incomplete code set + + tblList = hufTable.root; + bitList = hufTable.maxbit; + var lencnt = llencnt + dcodescnt, + i = 0, + lastLen = 0; + while(i < lencnt) { + var hufLcode = tblList.list[addBits(bitList) & MASK_BITS[bitList]]; + j = hufLcode.bitcnt; + cutBits(j); + j = hufLcode.lbase; + if(j < 16) + ll[i++] = lastLen = j; + else if(j == 16) { + j = 3 + maskBits(2); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = lastLen; + } else if(j == 17) { + j = 3 + maskBits(3); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = 0; + lastLen = 0; + } else { + j = 11 + maskBits(7); + if(i + j > lencnt) return -1; + while(j-- > 0) ll[i++] = 0; + lastLen = 0; + } + } + bitList = 9; + hufTable = new HuffTable(ll, llencnt, 257, LENS, LEXT, bitList); + bitList == 0 && (hufTable.status = 1); + + if (hufTable.status != 0) return -1; + + tblList = hufTable.root; + bitList = hufTable.maxbit; + + for(i = 0; i < dcodescnt; i++) ll[i] = ll[i + llencnt]; + bitdist = 6; + hufTable = new HuffTable(ll, dcodescnt, 0, DISTS, DEXT, bitdist); + tblDist = hufTable.root; + bitdist = hufTable.maxbit; + + if((bitdist == 0 && llencnt > 257) || hufTable.status != 0) return -1; + + return codes(buff, off, size); + } + + return { + inflate : function(/*Buffer*/outputBuffer) { + tblList = null; + + var size = outputBuffer.length, + offset = 0, i; + + while(offset < size) { + if(eof && method == -1) return; + if(copyLen > 0) { + if(method != 0) { + while(copyLen > 0 && offset < size) { + copyLen--; + copyDist &= WSIZE - 1; + windowPos &= WSIZE - 1; + outputBuffer[offset++] = (slide[windowPos++] = slide[copyDist++]); + } + } else { + while(copyLen > 0 && offset < size) { + copyLen--; + windowPos &= WSIZE - 1; + outputBuffer[offset++] = (slide[windowPos++] = maskBits(8)); + } + copyLen == 0 && (method = -1); // done + } + if (offset == size) return; + } + + if(method == -1) { + if(eof) break; + eof = maskBits(1) != 0; + method = maskBits(2); + tblList = null; + copyLen = 0; + } + switch(method) { + case 0: i = stored(outputBuffer, offset, size - offset); break; + case 1: i = tblList != null ? codes(outputBuffer, offset, size - offset) : fixed(outputBuffer, offset, size - offset); break; + case 2: i = tblList != null ? codes(outputBuffer, offset, size - offset) : dynamic(outputBuffer, offset, size - offset); break; + default: i = -1; break; + } + + if(i == -1) return; + offset += i; + } + } + }; +} + +module.exports = function(/*Buffer*/inbuf) { + var zlib = require("zlib"); + return { + inflateAsync : function(/*Function*/callback) { + var tmp = zlib.createInflateRaw(), + parts = [], total = 0; + tmp.on('data', function(data) { + parts.push(data); + total += data.length; + }); + tmp.on('end', function() { + var buf = new Buffer(total), written = 0; + buf.fill(0); + + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf) + }, + + inflate : function(/*Buffer*/outputBuffer) { + var x = { + x: new JSInflater(inbuf) + }; + x.x.inflate(outputBuffer); + delete(x.x); + } + } +}; diff --git a/node_modules/adm-zip/package.json b/node_modules/adm-zip/package.json new file mode 100644 index 000000000..e068ba012 --- /dev/null +++ b/node_modules/adm-zip/package.json @@ -0,0 +1,31 @@ +{ + "name": "adm-zip", + "version": "0.4.4", + "description": "A Javascript implementation of zip for nodejs. Allows user to create or extract zip files both in memory or to/from disk", + "keywords": [ + "zip", + "methods", + "archive", + "unzip" + ], + "homepage": "http://github.com/cthackers/adm-zip", + "author": "Nasca Iacob (https://github.com/cthackers)", + "bugs": { + "email": "sy@another-d-mention.ro", + "url": "https://github.com/cthackers/adm-zip/issues" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/cthackers/adm-zip/master/MIT-LICENSE.txt" + } + ], + "main": "adm-zip.js", + "repository": { + "type": "git", + "url": "https://github.com/cthackers/adm-zip.git" + }, + "engines": { + "node": ">=0.3.0" + } +} diff --git a/node_modules/adm-zip/test/assets/attributes_test.zip b/node_modules/adm-zip/test/assets/attributes_test.zip new file mode 100644 index 0000000000000000000000000000000000000000..d57bfc075800e3f49b0a3e0ceca9a199d82c4c7f GIT binary patch literal 4189 zcmWIWW@h1H00FMbOb0LnN(cby#FCPt%%swi)Z%y`F3}HwtL8vcErLaLVsQ!{9hx|F z_@$OBgrruKD7fS&m*%GCmFSgJlprkrS%Kh!4ktSn++dSWwfX5n<3HEoL1F5d!{YZ9ZQq4O_y1vGVZ?B zJ#^AQp|`wthxz7%5Ba3t$7V}EX+F30^i`jQoJ+3XzF6@?jE#Brug)7a@vc^vdnV3p zsCuuv&L)dM*-GjhFU3~#KIo!)1&XS;j#R)5x}^WThE6#P&OS(!$pS}6lG<%w~-2i|^Ob$*)stiqPfm3lm-Z$$!M+Me_IWcT1XIJ0*Zx|n7|2W|ETsxzq zj#mOSe`*EIJJfdd$Gsy3B36^xc`X)3tn^nXKX6L;k5H-<^Z!`Qxa$g`DqULQGTDoK zJ~?Zhvds|;_u}2D(c%`Q+sHCMr0Kd#Si#hkA1Tojxof)?&%K~p_-+Xkn`m&9O8Xqm z6@05EnY#ZJ$@C6zw!0N@6cre?nemla=Pi^Cl@q{+43f zW#(?oJtrR|p>=YmMv_P5!EZILo+*KXy|#A_8a@tDvTciB)T*QDrsTc$gJiPTQu_t& zfuAL22$|}pEKd=1-{R+TVk%3aYW;=_s~(!%V+3U) z?1@s3m_!+0l$w~5pO;fPnmR{QCp}ZAI{wr-nk+{P&4DO12_(zn{M=Mn6J)e5AFa!& zU6(U5i7?=5xvKz6Ob`II;Xwes9nZy}02XItkYL!5|8C>gzh@X>w1M9C*&u#^H^K(Y z);_Wg*jf*uwm-5h1>LM0K&Haz3BqA32-%{^0J8<;+5{j*_Xo%pto;RiR>Pct>_N<4 z1+vx4u~?1T$3V94z`N1~Ag`g*$o66OL}2!TqUG-Wsog)=1&Ef@>M>m5khS34utU#XtM+<%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{NuAx$pN{9*kVW`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ymsIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`0xvl=zcl#0*)aeh#u_PJe%b694AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V literal 0 HcmV?d00001 diff --git a/node_modules/adm-zip/test/assets/fastest.zip b/node_modules/adm-zip/test/assets/fastest.zip new file mode 100644 index 0000000000000000000000000000000000000000..f4ed17b98c9d7bcd21efc4523ce75fbe2b071d0a GIT binary patch literal 4194 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPu^^f#DxB1A{7ljTxCK zDXDoNXU7Jf?VD{NuAx$pN{9*kVW`Q0FU+*myj^J;e>HC@Q`ObMwFOy!RCm;BFf$wXLnIQ}N*DrkG#?>(ezAN6Q zEH}P#Vb|;GmdS|@67PQ%tWIw}EPLhN?rYaN*ymsIDu!hBwR$4!GBst0mvX5@NH7~WVZJH5}uX1;s%Mt-)a`EM&Z?3^wfUCew* z^6=5pZOivZ=EhD>+fvuDa5KwY9md)7X04r>!Cm{Oz_`M=Pf#i1%HFEK>+|L+zMR4P z$zJKxm7TorKHcp68o2+Aa8Qy)%Jsw)?Z@($*u#7(rj zaq`oWBiXAIr$!#yxbx|Xo?PR)!U-UjDlPymZFGDt9l|M}3p z*6=JNjDGOyJ(wThjoSth24owsH7P*-0%TiM+99^UXyF71A7Trx-UG}QkZTiw7~LNr zTd?*ekgYE0X5H}h?-@pz)i4^_YRn!7venD6SdH5MK(_C|yV3<9`0xvl=zcl#0*)aeh#u_PJe%b694AD12w$|a`!2=*a8asUjTMwi0S*r)PRvBpRXJEGsJ@p{@ z5n?S$vlpBFtAf9Q?T69$>{o}|uL!h%1{+@cky|v_ELKeY4z?IZ6KAmk&|))AycQ!@ dR@f|tMKp{K@MZ=2gn@wz2rF0^7_M-GcmP+qZUz7V literal 0 HcmV?d00001 diff --git a/node_modules/adm-zip/test/assets/linux_arc.zip b/node_modules/adm-zip/test/assets/linux_arc.zip new file mode 100644 index 0000000000000000000000000000000000000000..188eccbe8bdb2b5b288857de8a397b77ff8e7414 GIT binary patch literal 415 zcmWIWW@Zs#U|`^2P@7ZZFx{>BaWati9*FrEWEe_Pi%axDgkExfURr1fCj+yAMzOy( z5SLbPGcdBeU}j(d6I0I|@QcA+THb;_774De=Tl4Hi@R|&9D zj6iZrBZ!Iab5@AY(R>Xt6PKePW->4cF#L5~4Kp(|1ZWhb$~`W1-7 F004HEX6gU{ literal 0 HcmV?d00001 diff --git a/node_modules/adm-zip/test/assets/maximum.zip b/node_modules/adm-zip/test/assets/maximum.zip new file mode 100644 index 0000000000000000000000000000000000000000..86a8ec776107c075ce2c7f803472aa97dc25cbf7 GIT binary patch literal 4086 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(yMz9sgOW(_5XqZ~qRqG+=fSD%&BaXj!8_Fg-RYh z!HeWd`ApTHdNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr literal 0 HcmV?d00001 diff --git a/node_modules/adm-zip/test/assets/normal.zip b/node_modules/adm-zip/test/assets/normal.zip new file mode 100644 index 0000000000000000000000000000000000000000..b4602c94ee000ee54c71c9302b9db956b3fd9f0e GIT binary patch literal 4170 zcmWIWW@Zs#0D-93bq-(#ln?;Yi6tdPnMtK3sm1X?T%sR%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKuPvB~f#DxB1A{7ljTxCK zDXDoNXQu|9?VD{NuAx$pN{9*kVW@$~4X$#pJL>1_46YY#n?i+b*}Jo-uVy^_v)ZUoP&g=ls%;9f#N2_1;tU*kv)*ZNBCl z-}UVu)+enwT{LHlbnuJP1$KIJ-FhO{rpj7Rex&JGnEG-WWqgs{^slshzT@je^A-Oi zCUQ@GopEk{TH)oB8*WIdh93FC7A_`Qzw%tNY9D{vtTUpE7rxwiU2)>?c`8EDZ!i7{ zGxY9Z-~2JdG-8MRgHO9&ZGL*JY}SJna@@hTbt((L^dvX$`CL(P*RR0P?8RU4&%9rY zxp?oNvK17GVBY#bUT3l78jt4ppVs(H&ELHQu{H+UonPXJe ztl@Uscx;vL#?ujB`Ld6M#yB1HQkxi3}R?!ts-ccvbLyk&a;IDC*Jb4jE5a-Q>)q;Nxwq0jG zc(0h#Qs1cSsHtmuO6&y%QRiH)L#ITHf+m$q1RuVDn=hXZE~=bjfG!@G5q2Qp>W>+aV+kSs;^%VS4^2Aa^kAO zkIO&r{bPV-U(8ggM@*`WFG@{J$0osl=zcl#0*)a{tU8ZPJe%b694ABQdw$|a`!2=*a8asUjTMwi0S*r)PRvBpRTVVGKJ@p{@5n?S$BNv{o}|uL!iihYhd&$gLP`7AvNH2U`rIiL+P%Xt4?>UW<{dDQp(QA{s^q Vc(Ve1!oa`Wk(r-b2E=Vnm2Q0iJ5-rM<2kDhpf=eLwvlT`|@htI1E^_ zCf>_SRLS$?eMd zu|R=g!WhIu7>xX6pDB>V;77-Bz>*Xd;(q4yh)4V2!yrC5mT_h_LNjSR%ntp8;p71P zG>r$`M|%)VbM0ruqs*o7YBpl9=}t8^ZwN@h{7~i*T4PW=fhw`M^1~4N zY??6S@<^tkA{>lv(oZv7c)V6{Ls_h45yn+j;}*pBA9U^%khu?=0rG2Lt!-KK8tKppi=%L7C2 z=pGvNEFj?2l&+y(3p$$9XrpDdt{b|yr^qecGs$MlazF)Jbv(V%HB<-eu47xShWI9$ zHFdM)AVuqFrdLBMj)8UyZ@_JrgWkPT1O+OXKJ|>O0`JPY(;PiC9I1<7rsDKQw_9*%VW+hU+tveEf$d4 z(-e@~3G;(E3XiKwQdN?wl2nxhi-xpVNv^N2BvlEiHY3$$q}q&VYc?bQQ9{yq%x1^1 z>O7-Bb)Eq_tySll|KE9Liv>Q$8~*FMWBg?!;oexFlTb+if!d3y)1#W;wvw7*qGAKX3v z-NPq8Y!v81meHrXU}f~zOVIN@u`=)e?~^ZycjnDJ#6p%6db)E~@My_?S+P~Z!>4qKaHUqS5W=hw!VW9Lr!%lO~8e+hme*YU5<_*aqt^K)zY w<+H&u@KyG=02lJ%1O-2R!Gat zNrmZ!c<~RKURm6F^K(*Ci}3hY8jDtt%hOObaxjPiy?vyKug#8$f#DxB1A{7ljTxCK zDXDoNXNLrOXB{!%x%*orDNL7T*LzK_x2!VJeW5bi5k-gZ?Avsb=Zu!4|9kcN#M_=N zJD50Aa(3KH%-*MUj5Wxa#ZO>UzO>!~o_+To9#C_85NaE`O1grh=FZ&QEHlZ6OP1$n zoEF@}!TxC(`$Xsa8&_R_IDN%}1GCdwZht?zW3T_@j(rxZ3^uT{sAoP~cOhU)poA26 z0Pj-w(;r&6-GYYM2hL5r^yAT*(l1*lJYiMheYtftZz>OSSaPqN z{2hl4BI#T$OmpHcos|uc+iv*(wTqEj`m?`VIXk`ghHgG`vXke~<&Wacw^G)r>$RQ_ z)Gg>Wkvh4&*q-g@)c*x#Grum_6m>;1(eA*Wdc$FU#Iu+Qs}E4{VhzkYX4 zkaAn1#-8(yMz9sgOW(_5XqZ~qRqG+=fSD%&BaXj!8_Fg-RYh z!HeWd`ApTHdNUM~njz1-iCc)9dkk*AEfh1U*pPLG6MvT_SqxCT*^)VxpJp-_o^8>tb+aSV#Yy-9y0I02wY>P@e z#1|h^VKhE#_2AYj1FgLQ>?)zB9wa|PtVL<1VzYl$@HepiFdCoz>TvrNf%Ye{;k6&R zZGz2W#nkU$i(xcz7ApWPe#(K@V&obLo5iq*hS34utU#YIFmM531q%a11~-TY0JSC= A-v9sr literal 0 HcmV?d00001 diff --git a/node_modules/adm-zip/test/index.js b/node_modules/adm-zip/test/index.js new file mode 100644 index 000000000..70acb5176 --- /dev/null +++ b/node_modules/adm-zip/test/index.js @@ -0,0 +1,5 @@ +var Attr = require("../util").FileAttr, + Zip = require("../adm-zip"), + fs = require("fs"); + +//zip.addLocalFile("./test/readonly.txt"); diff --git a/node_modules/adm-zip/util/constants.js b/node_modules/adm-zip/util/constants.js new file mode 100644 index 000000000..054805417 --- /dev/null +++ b/node_modules/adm-zip/util/constants.js @@ -0,0 +1,84 @@ +module.exports = { + /* The local file header */ + LOCHDR : 30, // LOC header size + LOCSIG : 0x04034b50, // "PK\003\004" + LOCVER : 4, // version needed to extract + LOCFLG : 6, // general purpose bit flag + LOCHOW : 8, // compression method + LOCTIM : 10, // modification time (2 bytes time, 2 bytes date) + LOCCRC : 14, // uncompressed file crc-32 value + LOCSIZ : 18, // compressed size + LOCLEN : 22, // uncompressed size + LOCNAM : 26, // filename length + LOCEXT : 28, // extra field length + + /* The Data descriptor */ + EXTSIG : 0x08074b50, // "PK\007\008" + EXTHDR : 16, // EXT header size + EXTCRC : 4, // uncompressed file crc-32 value + EXTSIZ : 8, // compressed size + EXTLEN : 12, // uncompressed size + + /* The central directory file header */ + CENHDR : 46, // CEN header size + CENSIG : 0x02014b50, // "PK\001\002" + CENVEM : 4, // version made by + CENVER : 6, // version needed to extract + CENFLG : 8, // encrypt, decrypt flags + CENHOW : 10, // compression method + CENTIM : 12, // modification time (2 bytes time, 2 bytes date) + CENCRC : 16, // uncompressed file crc-32 value + CENSIZ : 20, // compressed size + CENLEN : 24, // uncompressed size + CENNAM : 28, // filename length + CENEXT : 30, // extra field length + CENCOM : 32, // file comment length + CENDSK : 34, // volume number start + CENATT : 36, // internal file attributes + CENATX : 38, // external file attributes (host system dependent) + CENOFF : 42, // LOC header offset + + /* The entries in the end of central directory */ + ENDHDR : 22, // END header size + ENDSIG : 0x06054b50, // "PK\005\006" + ENDSUB : 8, // number of entries on this disk + ENDTOT : 10, // total number of entries + ENDSIZ : 12, // central directory size in bytes + ENDOFF : 16, // offset of first CEN header + ENDCOM : 20, // zip file comment length + + /* Compression methods */ + STORED : 0, // no compression + SHRUNK : 1, // shrunk + REDUCED1 : 2, // reduced with compression factor 1 + REDUCED2 : 3, // reduced with compression factor 2 + REDUCED3 : 4, // reduced with compression factor 3 + REDUCED4 : 5, // reduced with compression factor 4 + IMPLODED : 6, // imploded + // 7 reserved + DEFLATED : 8, // deflated + ENHANCED_DEFLATED: 9, // enhanced deflated + PKWARE : 10,// PKWare DCL imploded + // 11 reserved + BZIP2 : 12, // compressed using BZIP2 + // 13 reserved + LZMA : 14, // LZMA + // 15-17 reserved + IBM_TERSE : 18, // compressed using IBM TERSE + IBM_LZ77 : 19, //IBM LZ77 z + + /* General purpose bit flag */ + FLG_ENC : 0, // encripted file + FLG_COMP1 : 1, // compression option + FLG_COMP2 : 2, // compression option + FLG_DESC : 4, // data descriptor + FLG_ENH : 8, // enhanced deflation + FLG_STR : 16, // strong encryption + FLG_LNG : 1024, // language encoding + FLG_MSK : 4096, // mask header values + + /* Load type */ + FILE : 0, + BUFFER : 1, + NONE : 2 +}; diff --git a/node_modules/adm-zip/util/errors.js b/node_modules/adm-zip/util/errors.js new file mode 100644 index 000000000..db5d69e9a --- /dev/null +++ b/node_modules/adm-zip/util/errors.js @@ -0,0 +1,35 @@ +module.exports = { + /* Header error messages */ + "INVALID_LOC" : "Invalid LOC header (bad signature)", + "INVALID_CEN" : "Invalid CEN header (bad signature)", + "INVALID_END" : "Invalid END header (bad signature)", + + /* ZipEntry error messages*/ + "NO_DATA" : "Nothing to decompress", + "BAD_CRC" : "CRC32 checksum failed", + "FILE_IN_THE_WAY" : "There is a file in the way: %s", + "UNKNOWN_METHOD" : "Invalid/unsupported compression method", + + /* Inflater error messages */ + "AVAIL_DATA" : "inflate::Available inflate data did not terminate", + "INVALID_DISTANCE" : "inflate::Invalid literal/length or distance code in fixed or dynamic block", + "TO_MANY_CODES" : "inflate::Dynamic block code description: too many length or distance codes", + "INVALID_REPEAT_LEN" : "inflate::Dynamic block code description: repeat more than specified lengths", + "INVALID_REPEAT_FIRST" : "inflate::Dynamic block code description: repeat lengths with no first length", + "INCOMPLETE_CODES" : "inflate::Dynamic block code description: code lengths codes incomplete", + "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths", + "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths", + "INVALID_STORE_BLOCK" : "inflate::Stored block length did not match one's complement", + "INVALID_BLOCK_TYPE" : "inflate::Invalid block type (type == 3)", + + /* ADM-ZIP error messages */ + "CANT_EXTRACT_FILE" : "Could not extract the file", + "CANT_OVERRIDE" : "Target file already exists", + "NO_ZIP" : "No zip file was loaded", + "NO_ENTRY" : "Entry doesn't exist", + "DIRECTORY_CONTENT_ERROR" : "A directory cannot have content", + "FILE_NOT_FOUND" : "File not found: %s", + "NOT_IMPLEMENTED" : "Not implemented", + "INVALID_FILENAME" : "Invalid filename", + "INVALID_FORMAT" : "Invalid or unsupported zip format. No END header found" +}; \ No newline at end of file diff --git a/node_modules/adm-zip/util/fattr.js b/node_modules/adm-zip/util/fattr.js new file mode 100644 index 000000000..2191ec1c1 --- /dev/null +++ b/node_modules/adm-zip/util/fattr.js @@ -0,0 +1,84 @@ +var fs = require("fs"), + pth = require("path"); + +fs.existsSync = fs.existsSync || pth.existsSync; + +module.exports = function(/*String*/path) { + + var _path = path || "", + _permissions = 0, + _obj = newAttr(), + _stat = null; + + function newAttr() { + return { + directory : false, + readonly : false, + hidden : false, + executable : false, + mtime : 0, + atime : 0 + } + } + + if (_path && fs.existsSync(_path)) { + _stat = fs.statSync(_path); + _obj.directory = _stat.isDirectory(); + _obj.mtime = _stat.mtime; + _obj.atime = _stat.atime; + _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); + _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt ("777", 8)).toString (8)[0])); + _obj.hidden = pth.basename(_path)[0] === "."; + } else { + console.warn("Invalid path: " + _path) + } + + return { + + get directory () { + return _obj.directory; + }, + + get readOnly () { + return _obj.readonly; + }, + + get hidden () { + return _obj.hidden; + }, + + get mtime () { + return _obj.mtime; + }, + + get atime () { + return _obj.atime; + }, + + + get executable () { + return _obj.executable; + }, + + decodeAttributes : function(val) { + + }, + + encodeAttributes : function (val) { + + }, + + toString : function() { + return '{\n' + + '\t"path" : "' + _path + ",\n" + + '\t"isDirectory" : ' + _obj.directory + ",\n" + + '\t"isReadOnly" : ' + _obj.readonly + ",\n" + + '\t"isHidden" : ' + _obj.hidden + ",\n" + + '\t"isExecutable" : ' + _obj.executable + ",\n" + + '\t"mTime" : ' + _obj.mtime + "\n" + + '\t"aTime" : ' + _obj.atime + "\n" + + '}'; + } + } + +}; diff --git a/node_modules/adm-zip/util/index.js b/node_modules/adm-zip/util/index.js new file mode 100644 index 000000000..935fc1a4f --- /dev/null +++ b/node_modules/adm-zip/util/index.js @@ -0,0 +1,4 @@ +module.exports = require("./utils"); +module.exports.Constants = require("./constants"); +module.exports.Errors = require("./errors"); +module.exports.FileAttr = require("./fattr"); \ No newline at end of file diff --git a/node_modules/adm-zip/util/utils.js b/node_modules/adm-zip/util/utils.js new file mode 100644 index 000000000..b14db8c1c --- /dev/null +++ b/node_modules/adm-zip/util/utils.js @@ -0,0 +1,145 @@ +var fs = require("fs"), + pth = require('path'); + +fs.existsSync = fs.existsSync || pth.existsSync; + +module.exports = (function() { + + var crcTable = [], + Constants = require('./constants'), + Errors = require('./errors'), + + PATH_SEPARATOR = pth.normalize("/"); + + + function mkdirSync(/*String*/path) { + var resolvedPath = path.split(PATH_SEPARATOR)[0]; + path.split(PATH_SEPARATOR).forEach(function(name) { + if (!name || name.substr(-1,1) == ":") return; + resolvedPath += PATH_SEPARATOR + name; + var stat; + try { + stat = fs.statSync(resolvedPath); + } catch (e) { + fs.mkdirSync(resolvedPath); + } + if (stat && stat.isFile()) + throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath); + }); + } + + function findSync(/*String*/root, /*RegExp*/pattern, /*Boolean*/recoursive) { + if (typeof pattern === 'boolean') { + recoursive = pattern; + pattern = undefined; + } + var files = []; + fs.readdirSync(root).forEach(function(file) { + var path = pth.join(root, file); + + if (fs.statSync(path).isDirectory() && recoursive) + files = files.concat(findSync(path, pattern, recoursive)); + + if (!pattern || pattern.test(path)) { + files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : "")); + } + + }); + return files; + } + + return { + makeDir : function(/*String*/path) { + mkdirSync(path); + }, + + crc32 : function(buf) { + var b = new Buffer(4); + if (!crcTable.length) { + for (var n = 0; n < 256; n++) { + var c = n; + for (var k = 8; --k >= 0;) // + if ((c & 1) != 0) { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; } + if (c < 0) { + b.writeInt32LE(c, 0); + c = b.readUInt32LE(0); + } + crcTable[n] = c; + } + } + var crc = 0, off = 0, len = buf.length, c1 = ~crc; + while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8); + crc = ~c1; + b.writeInt32LE(crc & 0xffffffff, 0); + return b.readUInt32LE(0); + }, + + methodToString : function(/*Number*/method) { + switch (method) { + case Constants.STORED: + return 'STORED (' + method + ')'; + case Constants.DEFLATED: + return 'DEFLATED (' + method + ')'; + default: + return 'UNSUPPORTED (' + method + ')' + } + + }, + + writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) { + if (fs.existsSync(path)) { + if (!overwrite) + return false; // cannot overwite + + var stat = fs.statSync(path); + if (stat.isDirectory()) { + return false; + } + } + var folder = pth.dirname(path); + if (!fs.existsSync(folder)) { + mkdirSync(folder); + } + + var fd; + try { + fd = fs.openSync(path, 'w', 438); // 0666 + } catch(e) { + fs.chmodSync(path, 438); + fd = fs.openSync(path, 'w', 438); + } + if (fd) { + fs.writeSync(fd, content, 0, content.length, 0); + fs.closeSync(fd); + } + fs.chmodSync(path, attr || 438); + return true; + }, + + findFiles : function(/*String*/path) { + return findSync(path, true); + }, + + getAttributes : function(/*String*/path) { + + }, + + setAttributes : function(/*String*/path) { + + }, + + toBuffer : function(input) { + if (Buffer.isBuffer(input)) { + return input; + } else { + if (input.length == 0) { + return new Buffer(0) + } + return new Buffer(input, 'utf8'); + } + }, + + Constants : Constants, + Errors : Errors + } +})(); diff --git a/node_modules/adm-zip/zipEntry.js b/node_modules/adm-zip/zipEntry.js new file mode 100644 index 000000000..02c317256 --- /dev/null +++ b/node_modules/adm-zip/zipEntry.js @@ -0,0 +1,224 @@ +var Utils = require("./util"), + Headers = require("./headers"), + Constants = Utils.Constants, + Methods = require("./methods"); + +module.exports = function (/*Buffer*/input) { + + var _entryHeader = new Headers.EntryHeader(), + _entryName = new Buffer(0), + _comment = new Buffer(0), + _isDirectory = false, + uncompressedData = null, + _extra = new Buffer(0); + + function getCompressedDataFromZip() { + if (!input || !Buffer.isBuffer(input)) { + return new Buffer(0); + } + _entryHeader.loadDataHeaderFromBinary(input); + return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize) + } + + function crc32OK(data) { + // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written + if (_entryHeader.flags & 0x8 != 0x8) { + if (Utils.crc32(data) != _entryHeader.crc) { + return false; + } + } else { + // @TODO: load and check data descriptor header + // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure + // (optionally preceded by a 4-byte signature) immediately after the compressed data: + } + return true; + } + + function decompress(/*Boolean*/async, /*Function*/callback) { + if (_isDirectory) { + if (async && callback) { + callback(new Buffer(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error. + } + return new Buffer(0); + } + + var compressedData = getCompressedDataFromZip(); + if (compressedData.length == 0) { + if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error. + return compressedData; + } + + var data = new Buffer(_entryHeader.size); + data.fill(0); + + switch (_entryHeader.method) { + case Utils.Constants.STORED: + compressedData.copy(data); + if (!crc32OK(data)) { + if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error + return Utils.Errors.BAD_CRC; + } else {//si added otherwise did not seem to return data. + if (async && callback) callback(data); + return data; + } + break; + case Utils.Constants.DEFLATED: + var inflater = new Methods.Inflater(compressedData); + if (!async) { + inflater.inflate(data); + if (!crc32OK(data)) { + console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString()) + } + return data; + } else { + inflater.inflateAsync(function(result) { + result.copy(data, 0); + if (crc32OK(data)) { + if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error + } else { //si added otherwise did not seem to return data. + if (callback) callback(data); + } + }) + } + break; + default: + if (async && callback) callback(new Buffer(0), Utils.Errors.UNKNOWN_METHOD); + return Utils.Errors.UNKNOWN_METHOD; + } + } + + function compress(/*Boolean*/async, /*Function*/callback) { + if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { + // no data set or the data wasn't changed to require recompression + if (async && callback) callback(getCompressedDataFromZip()); + return getCompressedDataFromZip(); + } + + if (uncompressedData.length && !_isDirectory) { + var compressedData; + // Local file header + switch (_entryHeader.method) { + case Utils.Constants.STORED: + _entryHeader.compressedSize = _entryHeader.size; + + compressedData = new Buffer(uncompressedData.length); + uncompressedData.copy(compressedData); + + if (async && callback) callback(compressedData); + return compressedData; + + break; + default: + case Utils.Constants.DEFLATED: + + var deflater = new Methods.Deflater(uncompressedData); + if (!async) { + var deflated = deflater.deflate(); + _entryHeader.compressedSize = deflated.length; + return deflated; + } else { + deflater.deflateAsync(function(data) { + compressedData = new Buffer(data.length); + _entryHeader.compressedSize = data.length; + data.copy(compressedData); + callback && callback(compressedData); + }) + } + deflater = null; + break; + } + } else { + if (async && callback) { + callback(new Buffer(0)); + } else { + return new Buffer(0); + } + } + } + + return { + get entryName () { return _entryName.toString(); }, + get rawEntryName() { return _entryName; }, + set entryName (val) { + _entryName = Utils.toBuffer(val); + var lastChar = _entryName[_entryName.length - 1]; + _isDirectory = (lastChar == 47) || (lastChar == 92); + _entryHeader.fileNameLength = _entryName.length; + }, + + get extra () { return _extra; }, + set extra (val) { + _extra = val; + _entryHeader.extraLength = val.length; + }, + + get comment () { return _comment.toString(); }, + set comment (val) { + _comment = Utils.toBuffer(val); + _entryHeader.commentLength = _comment.length; + }, + + get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); }, + get isDirectory () { return _isDirectory }, + + getCompressedData : function() { + return compress(false, null) + }, + + getCompressedDataAsync : function(/*Function*/callback) { + compress(true, callback) + }, + + setData : function(value) { + uncompressedData = Utils.toBuffer(value); + if (!_isDirectory && uncompressedData.length) { + _entryHeader.size = uncompressedData.length; + _entryHeader.method = Utils.Constants.DEFLATED; + _entryHeader.crc = Utils.crc32(value); + } else { // folders and blank files should be stored + _entryHeader.method = Utils.Constants.STORED; + } + }, + + getData : function() { + return decompress(false, null); + }, + + getDataAsync : function(/*Function*/callback) { + decompress(true, callback) + }, + + set header(/*Buffer*/data) { + _entryHeader.loadFromBinary(data); + }, + + get header() { + return _entryHeader; + }, + + packHeader : function() { + var header = _entryHeader.entryHeaderToBinary(); + // add + _entryName.copy(header, Utils.Constants.CENHDR); + if (_entryHeader.extraLength) { + _extra.copy(header, Utils.Constants.CENHDR + _entryName.length) + } + if (_entryHeader.commentLength) { + _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length); + } + return header; + }, + + toString : function() { + return '{\n' + + '\t"entryName" : "' + _entryName.toString() + "\",\n" + + '\t"name" : "' + _entryName.toString().split("/").pop() + "\",\n" + + '\t"comment" : "' + _comment.toString() + "\",\n" + + '\t"isDirectory" : ' + _isDirectory + ",\n" + + '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t") + ",\n" + + '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + + '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + + '}'; + } + } +}; diff --git a/node_modules/adm-zip/zipFile.js b/node_modules/adm-zip/zipFile.js new file mode 100644 index 000000000..f066d7ed0 --- /dev/null +++ b/node_modules/adm-zip/zipFile.js @@ -0,0 +1,311 @@ +var ZipEntry = require("./zipEntry"), + Headers = require("./headers"), + Utils = require("./util"); + +module.exports = function(/*String|Buffer*/input, /*Number*/inputType) { + var entryList = [], + entryTable = {}, + _comment = new Buffer(0), + filename = "", + fs = require("fs"), + inBuffer = null, + mainHeader = new Headers.MainHeader(); + + if (inputType == Utils.Constants.FILE) { + // is a filename + filename = input; + inBuffer = fs.readFileSync(filename); + readMainHeader(); + } else if (inputType == Utils.Constants.BUFFER) { + // is a memory buffer + inBuffer = input; + readMainHeader(); + } else { + // none. is a new file + } + + function readEntries() { + entryTable = {}; + entryList = new Array(mainHeader.diskEntries); // total number of entries + var index = mainHeader.offset; // offset of first CEN header + for(var i = 0; i < entryList.length; i++) { + + var tmp = index, + entry = new ZipEntry(inBuffer); + entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); + + entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); + + if (entry.header.extraLength) { + entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); + } + + if (entry.header.commentLength) + entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); + + index += entry.header.entryHeaderSize; + + entryList[i] = entry; + entryTable[entry.entryName] = entry; + } + } + + function readMainHeader() { + var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size + n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length + endOffset = 0; // Start offset of the END header + + for (i; i >= n; i--) { + if (inBuffer[i] != 0x50) continue; // quick check that the byte is 'P' + if (inBuffer.readUInt32LE(i) == Utils.Constants.ENDSIG) { // "PK\005\006" + endOffset = i; + break; + } + } + if (!endOffset) + throw Utils.Errors.INVALID_FORMAT; + + mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR)); + if (mainHeader.commentLength) { + _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR); + } + readEntries(); + } + + return { + /** + * Returns an array of ZipEntry objects existent in the current opened archive + * @return Array + */ + get entries () { + return entryList; + }, + + /** + * Archive comment + * @return {String} + */ + get comment () { return _comment.toString(); }, + set comment(val) { + mainHeader.commentLength = val.length; + _comment = val; + }, + + /** + * Returns a reference to the entry with the given name or null if entry is inexistent + * + * @param entryName + * @return ZipEntry + */ + getEntry : function(/*String*/entryName) { + return entryTable[entryName] || null; + }, + + /** + * Adds the given entry to the entry list + * + * @param entry + */ + setEntry : function(/*ZipEntry*/entry) { + entryList.push(entry); + entryTable[entry.entryName] = entry; + mainHeader.totalEntries = entryList.length; + }, + + /** + * Removes the entry with the given name from the entry list. + * + * If the entry is a directory, then all nested files and directories will be removed + * @param entryName + */ + deleteEntry : function(/*String*/entryName) { + var entry = entryTable[entryName]; + if (entry && entry.isDirectory) { + var _self = this; + this.getEntryChildren(entry).forEach(function(child) { + if (child.entryName != entryName) { + _self.deleteEntry(child.entryName) + } + }) + } + entryList.splice(entryList.indexOf(entry), 1); + delete(entryTable[entryName]); + mainHeader.totalEntries = entryList.length; + }, + + /** + * Iterates and returns all nested files and directories of the given entry + * + * @param entry + * @return Array + */ + getEntryChildren : function(/*ZipEntry*/entry) { + if (entry.isDirectory) { + var list = [], + name = entry.entryName, + len = name.length; + + entryList.forEach(function(zipEntry) { + if (zipEntry.entryName.substr(0, len) == name) { + list.push(zipEntry); + } + }); + return list; + } + return [] + }, + + /** + * Returns the zip file + * + * @return Buffer + */ + compressToBuffer : function() { + if (entryList.length > 1) { + entryList.sort(function(a, b) { + var nameA = a.entryName.toLowerCase(); + var nameB = b.entryName.toLowerCase(); + if (nameA < nameB) {return -1} + if (nameA > nameB) {return 1} + return 0; + }); + } + + var totalSize = 0, + dataBlock = [], + entryHeaders = [], + dindex = 0; + + mainHeader.size = 0; + mainHeader.offset = 0; + + entryList.forEach(function(entry) { + entry.header.offset = dindex; + + // compress data and set local and entry header accordingly. Reason why is called first + var compressedData = entry.getCompressedData(); + // data header + var dataHeader = entry.header.dataHeaderToBinary(); + var postHeader = new Buffer(entry.entryName + entry.extra.toString()); + var dataLength = dataHeader.length + postHeader.length + compressedData.length; + + dindex += dataLength; + + dataBlock.push(dataHeader); + dataBlock.push(postHeader); + dataBlock.push(compressedData); + + var entryHeader = entry.packHeader(); + entryHeaders.push(entryHeader); + mainHeader.size += entryHeader.length; + totalSize += (dataLength + entryHeader.length); + }); + + totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length + // point to end of data and begining of central directory first record + mainHeader.offset = dindex; + + dindex = 0; + var outBuffer = new Buffer(totalSize); + dataBlock.forEach(function(content) { + content.copy(outBuffer, dindex); // write data blocks + dindex += content.length; + }); + entryHeaders.forEach(function(content) { + content.copy(outBuffer, dindex); // write central directory entries + dindex += content.length; + }); + + var mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment + } + + mh.copy(outBuffer, dindex); // write main header + + return outBuffer + }, + + toAsyncBuffer : function(/*Function*/onSuccess,/*Function*/onFail,/*Function*/onItemStart,/*Function*/onItemEnd) { + if (entryList.length > 1) { + entryList.sort(function(a, b) { + var nameA = a.entryName.toLowerCase(); + var nameB = b.entryName.toLowerCase(); + if (nameA > nameB) {return -1} + if (nameA < nameB) {return 1} + return 0; + }); + } + + var totalSize = 0, + dataBlock = [], + entryHeaders = [], + dindex = 0; + + mainHeader.size = 0; + mainHeader.offset = 0; + + var compress=function(entryList){ + var self=arguments.callee; + var entry; + if(entryList.length){ + var entry=entryList.pop(); + var name=entry.entryName + entry.extra.toString(); + if(onItemStart)onItemStart(name); + entry.getCompressedDataAsync(function(compressedData){ + if(onItemEnd)onItemEnd(name); + + entry.header.offset = dindex; + // data header + var dataHeader = entry.header.dataHeaderToBinary(); + var postHeader = new Buffer(name); + var dataLength = dataHeader.length + postHeader.length + compressedData.length; + + dindex += dataLength; + + dataBlock.push(dataHeader); + dataBlock.push(postHeader); + dataBlock.push(compressedData); + + var entryHeader = entry.packHeader(); + entryHeaders.push(entryHeader); + mainHeader.size += entryHeader.length; + totalSize += (dataLength + entryHeader.length); + + if(entryList.length){ + self(entryList); + }else{ + + + totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length + // point to end of data and begining of central directory first record + mainHeader.offset = dindex; + + dindex = 0; + var outBuffer = new Buffer(totalSize); + dataBlock.forEach(function(content) { + content.copy(outBuffer, dindex); // write data blocks + dindex += content.length; + }); + entryHeaders.forEach(function(content) { + content.copy(outBuffer, dindex); // write central directory entries + dindex += content.length; + }); + + var mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment + } + + mh.copy(outBuffer, dindex); // write main header + + onSuccess(outBuffer); + } + }); + } + }; + + compress(entryList); + } + } +}; diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json index b2f9cd017..bca8b6d29 100644 --- a/node_modules/ansi-regex/package.json +++ b/node_modules/ansi-regex/package.json @@ -1,73 +1,28 @@ { - "_args": [ - [ - { - "raw": "ansi-regex@^2.0.0", - "scope": null, - "escapedName": "ansi-regex", - "name": "ansi-regex", - "rawSpec": "^2.0.0", - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/has-ansi" - ] - ], - "_from": "ansi-regex@>=2.0.0 <3.0.0", - "_id": "ansi-regex@2.0.0", - "_inCache": true, - "_location": "/ansi-regex", - "_nodeVersion": "0.12.5", - "_npmUser": { - "name": "sindresorhus", - "email": "sindresorhus@gmail.com" - }, - "_npmVersion": "2.11.2", - "_phantomChildren": {}, - "_requested": { - "raw": "ansi-regex@^2.0.0", - "scope": null, - "escapedName": "ansi-regex", - "name": "ansi-regex", - "rawSpec": "^2.0.0", - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/has-ansi", - "/strip-ansi" - ], - "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "_shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107", - "_shrinkwrap": null, - "_spec": "ansi-regex@^2.0.0", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/has-ansi", + "name": "ansi-regex", + "version": "2.0.0", + "description": "Regular expression for matching ANSI escape codes", + "license": "MIT", + "repository": "sindresorhus/ansi-regex", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", "url": "sindresorhus.com" }, - "bugs": { - "url": "https://github.com/sindresorhus/ansi-regex/issues" - }, - "dependencies": {}, - "description": "Regular expression for matching ANSI escape codes", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107", - "tarball": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" - }, + "maintainers": [ + "Sindre Sorhus (sindresorhus.com)", + "Joshua Appelman (jbnicolai.com)" + ], "engines": { "node": ">=0.10.0" }, + "scripts": { + "test": "mocha test/test.js", + "view-supported": "node test/viewCodes.js" + }, "files": [ "index.js" ], - "gitHead": "57c3f2941a73079fa8b081e02a522e3d29913e2f", - "homepage": "https://github.com/sindresorhus/ansi-regex", "keywords": [ "ansi", "styles", @@ -95,27 +50,7 @@ "find", "pattern" ], - "license": "MIT", - "maintainers": [ - { - "name": "sindresorhus", - "email": "sindresorhus@gmail.com" - }, - { - "name": "jbnicolai", - "email": "jappelman@xebia.com" - } - ], - "name": "ansi-regex", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/ansi-regex.git" - }, - "scripts": { - "test": "mocha test/test.js", - "view-supported": "node test/viewCodes.js" - }, - "version": "2.0.0" + "devDependencies": { + "mocha": "*" + } } diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json index 88a72245b..78c535f74 100644 --- a/node_modules/ansi-styles/package.json +++ b/node_modules/ansi-styles/package.json @@ -1,76 +1,27 @@ { - "_args": [ - [ - { - "raw": "ansi-styles@^2.2.1", - "scope": null, - "escapedName": "ansi-styles", - "name": "ansi-styles", - "rawSpec": "^2.2.1", - "spec": ">=2.2.1 <3.0.0", - "type": "range" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/chalk" - ] - ], - "_from": "ansi-styles@>=2.2.1 <3.0.0", - "_id": "ansi-styles@2.2.1", - "_inCache": true, - "_location": "/ansi-styles", - "_nodeVersion": "4.3.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/ansi-styles-2.2.1.tgz_1459197317833_0.9694824463222176" - }, - "_npmUser": { - "name": "sindresorhus", - "email": "sindresorhus@gmail.com" - }, - "_npmVersion": "3.8.3", - "_phantomChildren": {}, - "_requested": { - "raw": "ansi-styles@^2.2.1", - "scope": null, - "escapedName": "ansi-styles", - "name": "ansi-styles", - "rawSpec": "^2.2.1", - "spec": ">=2.2.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/chalk" - ], - "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "_shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe", - "_shrinkwrap": null, - "_spec": "ansi-styles@^2.2.1", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/chalk", + "name": "ansi-styles", + "version": "2.2.1", + "description": "ANSI escape codes for styling strings in the terminal", + "license": "MIT", + "repository": "chalk/ansi-styles", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", "url": "sindresorhus.com" }, - "bugs": { - "url": "https://github.com/chalk/ansi-styles/issues" - }, - "dependencies": {}, - "description": "ANSI escape codes for styling strings in the terminal", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe", - "tarball": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - }, + "maintainers": [ + "Sindre Sorhus (sindresorhus.com)", + "Joshua Appelman (jbnicolai.com)" + ], "engines": { "node": ">=0.10.0" }, + "scripts": { + "test": "mocha" + }, "files": [ "index.js" ], - "gitHead": "95c59b23be760108b6530ca1c89477c21b258032", - "homepage": "https://github.com/chalk/ansi-styles#readme", "keywords": [ "ansi", "styles", @@ -93,22 +44,7 @@ "command-line", "text" ], - "license": "MIT", - "maintainers": [ - { - "name": "sindresorhus", - "email": "sindresorhus@gmail.com" - } - ], - "name": "ansi-styles", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/ansi-styles.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "2.2.1" + "devDependencies": { + "mocha": "*" + } } diff --git a/node_modules/archiver-utils/node_modules/isarray/package.json b/node_modules/archiver-utils/node_modules/isarray/package.json deleted file mode 100644 index d44f82d5f..000000000 --- a/node_modules/archiver-utils/node_modules/isarray/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - { - "raw": "isarray@~1.0.0", - "scope": null, - "escapedName": "isarray", - "name": "isarray", - "rawSpec": "~1.0.0", - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/archiver-utils/node_modules/readable-stream" - ] - ], - "_from": "isarray@>=1.0.0 <1.1.0", - "_id": "isarray@1.0.0", - "_inCache": true, - "_location": "/archiver-utils/isarray", - "_nodeVersion": "5.1.0", - "_npmUser": { - "name": "juliangruber", - "email": "julian@juliangruber.com" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "raw": "isarray@~1.0.0", - "scope": null, - "escapedName": "isarray", - "name": "isarray", - "rawSpec": "~1.0.0", - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/archiver-utils/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "_shasum": "bb935d48582cba168c06834957a54a3e07124f11", - "_shrinkwrap": null, - "_spec": "isarray@~1.0.0", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/archiver-utils/node_modules/readable-stream", - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/isarray/issues" - }, - "dependencies": {}, - "description": "Array#isArray for older browsers", - "devDependencies": { - "tape": "~2.13.4" - }, - "directories": {}, - "dist": { - "shasum": "bb935d48582cba168c06834957a54a3e07124f11", - "tarball": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - }, - "gitHead": "2a23a281f369e9ae06394c0fb4d2381355a6ba33", - "homepage": "https://github.com/juliangruber/isarray", - "keywords": [ - "browser", - "isarray", - "array" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "name": "juliangruber", - "email": "julian@juliangruber.com" - } - ], - "name": "isarray", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/isarray.git" - }, - "scripts": { - "test": "tape test.js" - }, - "testling": { - "files": "test.js", - "browsers": [ - "ie/8..latest", - "firefox/17..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - }, - "version": "1.0.0" -} diff --git a/node_modules/archiver-utils/node_modules/lodash/LICENSE b/node_modules/archiver-utils/node_modules/lodash/LICENSE deleted file mode 100644 index e0c69d560..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/node_modules/archiver-utils/node_modules/lodash/README.md b/node_modules/archiver-utils/node_modules/lodash/README.md deleted file mode 100644 index 72b66b2b4..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# lodash v4.16.4 - -The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. - -## Installation - -Using npm: -```shell -$ npm i -g npm -$ npm i --save lodash -``` - -In Node.js: -```js -// Load the full build. -var _ = require('lodash'); -// Load the core build. -var _ = require('lodash/core'); -// Load the FP build for immutable auto-curried iteratee-first data-last methods. -var fp = require('lodash/fp'); - -// Load method categories. -var array = require('lodash/array'); -var object = require('lodash/fp/object'); - -// Cherry-pick methods for smaller browserify/rollup/webpack bundles. -var at = require('lodash/at'); -var curryN = require('lodash/fp/curryN'); -``` - -See the [package source](https://github.com/lodash/lodash/tree/4.16.4-npm) for more details. - -**Note:**
-Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. - -## Support - -Tested in Chrome 52-53, Firefox 48-49, IE 11, Edge 14, Safari 9-10, Node.js 4-6, & PhantomJS 2.1.1.
-Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/node_modules/archiver-utils/node_modules/lodash/_Hash.js b/node_modules/archiver-utils/node_modules/lodash/_Hash.js deleted file mode 100644 index 667d5ab5a..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_Hash.js +++ /dev/null @@ -1,32 +0,0 @@ -var hashClear = require('./_hashClear'), - hashDelete = require('./_hashDelete'), - hashGet = require('./_hashGet'), - hashHas = require('./_hashHas'), - hashSet = require('./_hashSet'); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; diff --git a/node_modules/archiver-utils/node_modules/lodash/_ListCache.js b/node_modules/archiver-utils/node_modules/lodash/_ListCache.js deleted file mode 100644 index 73f46450b..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_ListCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var listCacheClear = require('./_listCacheClear'), - listCacheDelete = require('./_listCacheDelete'), - listCacheGet = require('./_listCacheGet'), - listCacheHas = require('./_listCacheHas'), - listCacheSet = require('./_listCacheSet'); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; diff --git a/node_modules/archiver-utils/node_modules/lodash/_MapCache.js b/node_modules/archiver-utils/node_modules/lodash/_MapCache.js deleted file mode 100644 index 69f03a4a4..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_MapCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var mapCacheClear = require('./_mapCacheClear'), - mapCacheDelete = require('./_mapCacheDelete'), - mapCacheGet = require('./_mapCacheGet'), - mapCacheHas = require('./_mapCacheHas'), - mapCacheSet = require('./_mapCacheSet'); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; diff --git a/node_modules/archiver-utils/node_modules/lodash/_SetCache.js b/node_modules/archiver-utils/node_modules/lodash/_SetCache.js deleted file mode 100644 index a80efd582..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_SetCache.js +++ /dev/null @@ -1,27 +0,0 @@ -var MapCache = require('./_MapCache'), - setCacheAdd = require('./_setCacheAdd'), - setCacheHas = require('./_setCacheHas'); - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -module.exports = SetCache; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayAggregator.js b/node_modules/archiver-utils/node_modules/lodash/_arrayAggregator.js deleted file mode 100644 index 7ca498a86..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayAggregator.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; -} - -module.exports = arrayAggregator; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayEach.js b/node_modules/archiver-utils/node_modules/lodash/_arrayEach.js deleted file mode 100644 index 5f770bcbe..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayEach.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEach; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayEachRight.js b/node_modules/archiver-utils/node_modules/lodash/_arrayEachRight.js deleted file mode 100644 index 72e780ca0..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayEachRight.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEachRight(array, iteratee) { - var length = array ? array.length : 0; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEachRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayEvery.js b/node_modules/archiver-utils/node_modules/lodash/_arrayEvery.js deleted file mode 100644 index f4fb4254d..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayEvery.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ -function arrayEvery(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; -} - -module.exports = arrayEvery; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayFilter.js b/node_modules/archiver-utils/node_modules/lodash/_arrayFilter.js deleted file mode 100644 index b904fda62..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayFilter.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = arrayFilter; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayIncludes.js b/node_modules/archiver-utils/node_modules/lodash/_arrayIncludes.js deleted file mode 100644 index be53e60dc..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayIncludes.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; -} - -module.exports = arrayIncludes; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayIncludesWith.js b/node_modules/archiver-utils/node_modules/lodash/_arrayIncludesWith.js deleted file mode 100644 index 72ff0c8ed..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayIncludesWith.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -module.exports = arrayIncludesWith; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayMap.js b/node_modules/archiver-utils/node_modules/lodash/_arrayMap.js deleted file mode 100644 index 748bdbe6d..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayMap.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -module.exports = arrayMap; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayReduce.js b/node_modules/archiver-utils/node_modules/lodash/_arrayReduce.js deleted file mode 100644 index 57c8727ab..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayReduce.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -module.exports = arrayReduce; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayReduceRight.js b/node_modules/archiver-utils/node_modules/lodash/_arrayReduceRight.js deleted file mode 100644 index 4c85ee630..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arrayReduceRight.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array ? array.length : 0; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; -} - -module.exports = arrayReduceRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arraySome.js b/node_modules/archiver-utils/node_modules/lodash/_arraySome.js deleted file mode 100644 index 9b6e5d17c..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_arraySome.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -module.exports = arraySome; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseAt.js b/node_modules/archiver-utils/node_modules/lodash/_baseAt.js deleted file mode 100644 index ed67d9bd3..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseAt.js +++ /dev/null @@ -1,23 +0,0 @@ -var get = require('./get'); - -/** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths of elements to pick. - * @returns {Array} Returns the picked elements. - */ -function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); - - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; -} - -module.exports = baseAt; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseDifference.js b/node_modules/archiver-utils/node_modules/lodash/_baseDifference.js deleted file mode 100644 index dcccad335..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseDifference.js +++ /dev/null @@ -1,67 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ -function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; -} - -module.exports = baseDifference; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseGetTag.js b/node_modules/archiver-utils/node_modules/lodash/_baseGetTag.js deleted file mode 100644 index c8b9e394f..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseGetTag.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `getTag`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - return objectToString.call(value); -} - -module.exports = baseGetTag; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsArguments.js b/node_modules/archiver-utils/node_modules/lodash/_baseIsArguments.js deleted file mode 100644 index a176e18a0..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseIsArguments.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && objectToString.call(value) == argsTag; -} - -module.exports = baseIsArguments; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsArrayBuffer.js b/node_modules/archiver-utils/node_modules/lodash/_baseIsArrayBuffer.js deleted file mode 100644 index 024ec8514..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseIsArrayBuffer.js +++ /dev/null @@ -1,26 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -var arrayBufferTag = '[object ArrayBuffer]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ -function baseIsArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; -} - -module.exports = baseIsArrayBuffer; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsDate.js b/node_modules/archiver-utils/node_modules/lodash/_baseIsDate.js deleted file mode 100644 index 9dacf9b15..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseIsDate.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var dateTag = '[object Date]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ -function baseIsDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; -} - -module.exports = baseIsDate; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsRegExp.js b/node_modules/archiver-utils/node_modules/lodash/_baseIsRegExp.js deleted file mode 100644 index 926fbb3bd..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseIsRegExp.js +++ /dev/null @@ -1,27 +0,0 @@ -var isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; -} - -module.exports = baseIsRegExp; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsTypedArray.js b/node_modules/archiver-utils/node_modules/lodash/_baseIsTypedArray.js deleted file mode 100644 index 9e92756cb..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseIsTypedArray.js +++ /dev/null @@ -1,69 +0,0 @@ -var isLength = require('./isLength'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var 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]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -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] = false; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; -} - -module.exports = baseIsTypedArray; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseMean.js b/node_modules/archiver-utils/node_modules/lodash/_baseMean.js deleted file mode 100644 index ac99a4231..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseMean.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSum = require('./_baseSum'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ -function baseMean(array, iteratee) { - var length = array ? array.length : 0; - return length ? (baseSum(array, iteratee) / length) : NAN; -} - -module.exports = baseMean; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSortedIndex.js b/node_modules/archiver-utils/node_modules/lodash/_baseSortedIndex.js deleted file mode 100644 index 0e82dc7d9..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseSortedIndex.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseSortedIndexBy = require('./_baseSortedIndexBy'), - identity = require('./identity'), - isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - -/** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); -} - -module.exports = baseSortedIndex; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/archiver-utils/node_modules/lodash/_baseSortedIndexBy.js deleted file mode 100644 index fde79285e..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseSortedIndexBy.js +++ /dev/null @@ -1,64 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeMin = Math.min; - -/** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); -} - -module.exports = baseSortedIndexBy; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseXor.js b/node_modules/archiver-utils/node_modules/lodash/_baseXor.js deleted file mode 100644 index 7e62d1b24..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_baseXor.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayPush = require('./_arrayPush'), - baseDifference = require('./_baseDifference'), - baseUniq = require('./_baseUniq'); - -/** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ -function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; - - while (++index < length) { - var result = result - ? arrayPush( - baseDifference(result, arrays[index], iteratee, comparator), - baseDifference(arrays[index], result, iteratee, comparator) - ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; -} - -module.exports = baseXor; diff --git a/node_modules/archiver-utils/node_modules/lodash/_getTag.js b/node_modules/archiver-utils/node_modules/lodash/_getTag.js deleted file mode 100644 index 6954db1b6..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_getTag.js +++ /dev/null @@ -1,68 +0,0 @@ -var DataView = require('./_DataView'), - Map = require('./_Map'), - Promise = require('./_Promise'), - Set = require('./_Set'), - WeakMap = require('./_WeakMap'), - baseGetTag = require('./_baseGetTag'), - toSource = require('./_toSource'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; - -var dataViewTag = '[object DataView]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; - -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((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 = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - 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; - }; -} - -module.exports = getTag; diff --git a/node_modules/archiver-utils/node_modules/lodash/_hasPath.js b/node_modules/archiver-utils/node_modules/lodash/_hasPath.js deleted file mode 100644 index 770be4b88..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_hasPath.js +++ /dev/null @@ -1,40 +0,0 @@ -var castPath = require('./_castPath'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isIndex = require('./_isIndex'), - isKey = require('./_isKey'), - isLength = require('./isLength'), - toKey = require('./_toKey'); - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); -} - -module.exports = hasPath; diff --git a/node_modules/archiver-utils/node_modules/lodash/_shortOut.js b/node_modules/archiver-utils/node_modules/lodash/_shortOut.js deleted file mode 100644 index a4e6507fb..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_shortOut.js +++ /dev/null @@ -1,37 +0,0 @@ -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 500, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -module.exports = shortOut; diff --git a/node_modules/archiver-utils/node_modules/lodash/_toSource.js b/node_modules/archiver-utils/node_modules/lodash/_toSource.js deleted file mode 100644 index 00ac45485..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_toSource.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -module.exports = toSource; diff --git a/node_modules/archiver-utils/node_modules/lodash/_unicodeWords.js b/node_modules/archiver-utils/node_modules/lodash/_unicodeWords.js deleted file mode 100644 index a02e93074..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/_unicodeWords.js +++ /dev/null @@ -1,63 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]", - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', - rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; - -/** Used to match complex or compound words. */ -var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, - rsUpper + '+' + rsOptUpperContr, - rsDigits, - rsEmoji -].join('|'), 'g'); - -/** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function unicodeWords(string) { - return string.match(reUnicodeWord) || []; -} - -module.exports = unicodeWords; diff --git a/node_modules/archiver-utils/node_modules/lodash/chunk.js b/node_modules/archiver-utils/node_modules/lodash/chunk.js deleted file mode 100644 index 356510f53..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/chunk.js +++ /dev/null @@ -1,50 +0,0 @@ -var baseSlice = require('./_baseSlice'), - isIterateeCall = require('./_isIterateeCall'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ -function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; -} - -module.exports = chunk; diff --git a/node_modules/archiver-utils/node_modules/lodash/cloneDeepWith.js b/node_modules/archiver-utils/node_modules/lodash/cloneDeepWith.js deleted file mode 100644 index 4a345fb2d..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/cloneDeepWith.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ -function cloneDeepWith(value, customizer) { - return baseClone(value, true, true, customizer); -} - -module.exports = cloneDeepWith; diff --git a/node_modules/archiver-utils/node_modules/lodash/cloneWith.js b/node_modules/archiver-utils/node_modules/lodash/cloneWith.js deleted file mode 100644 index c85f573f1..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/cloneWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ -function cloneWith(value, customizer) { - return baseClone(value, false, true, customizer); -} - -module.exports = cloneWith; diff --git a/node_modules/archiver-utils/node_modules/lodash/compact.js b/node_modules/archiver-utils/node_modules/lodash/compact.js deleted file mode 100644 index 790f31199..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/compact.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ -function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = compact; diff --git a/node_modules/archiver-utils/node_modules/lodash/cond.js b/node_modules/archiver-utils/node_modules/lodash/cond.js deleted file mode 100644 index 91515c167..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/cond.js +++ /dev/null @@ -1,60 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that iterates over `pairs` and invokes the corresponding - * function of the first predicate to return truthy. The predicate-function - * pairs are invoked with the `this` binding and arguments of the created - * function. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Array} pairs The predicate-function pairs. - * @returns {Function} Returns the new composite function. - * @example - * - * var func = _.cond([ - * [_.matches({ 'a': 1 }), _.constant('matches A')], - * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], - * [_.stubTrue, _.constant('no match')] - * ]); - * - * func({ 'a': 1, 'b': 2 }); - * // => 'matches A' - * - * func({ 'a': 0, 'b': 1 }); - * // => 'matches B' - * - * func({ 'a': '1', 'b': '2' }); - * // => 'no match' - */ -function cond(pairs) { - var length = pairs ? pairs.length : 0, - toIteratee = baseIteratee; - - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - - return baseRest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); -} - -module.exports = cond; diff --git a/node_modules/archiver-utils/node_modules/lodash/core.js b/node_modules/archiver-utils/node_modules/lodash/core.js deleted file mode 100644 index c891e7844..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/core.js +++ /dev/null @@ -1,3831 +0,0 @@ -/** - * @license - * lodash (Custom Build) - * Build: `lodash core -o ./dist/lodash.core.js` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.16.4'; - - /** Error message constants. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to compose bitmasks for function metadata. */ - var BIND_FLAG = 1, - PARTIAL_FLAG = 32; - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - numberTag = '[object Number]', - objectTag = '[object Object]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - stringTag = '[object String]'; - - /** Used to match HTML entities and HTML characters. */ - var reUnescapedHtml = /[&<>"']/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /*--------------------------------------------------------------------------*/ - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - array.push.apply(array, values); - return array; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return baseMap(props, function(key) { - return object[key]; - }); - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /*--------------------------------------------------------------------------*/ - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Built-in value references. */ - var objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsFinite = root.isFinite, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - return value instanceof LodashWrapper - ? value - : new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - } - - LodashWrapper.prototype = baseCreate(lodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - object[key] = value; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !false) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return baseFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - var baseIsArguments = noop; - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = objectToString.call(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = objectToString.call(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - stack || (stack = []); - var objStack = find(stack, function(entry) { - return entry[0] == object; - }); - var othStack = find(stack, function(entry) { - return entry[0] == other; - }); - if (objStack && othStack) { - return objStack[1] == other; - } - stack.push([object, other]); - stack.push([other, object]); - if (isSameTag && !objIsObj) { - var result = (objIsArr) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - stack.pop(); - return result; - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - 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; - - var result = equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - stack.pop(); - return result; - } - } - if (!isSameTag) { - return false; - } - var result = equalObjects(object, other, equalFunc, customizer, bitmask, stack); - stack.pop(); - return result; - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(func) { - if (typeof func == 'function') { - return func; - } - if (func == null) { - return identity; - } - return (typeof func == 'object' ? baseMatches : baseProperty)(func); - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var props = nativeKeys(source); - return function(object) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length]; - if (!(key in object && - baseIsEqual(source[key], object[key], undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG) - )) { - return false; - } - } - return true; - }; - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return reduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source) { - return baseSlice(source, 0, source.length); - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - return reduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = false; - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = false; - - 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; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(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; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return fn.apply(isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? [] : undefined; - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - var compared; - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!baseSome(other, function(othValue, othIndex) { - if (!indexOf(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var result = true; - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - var compared; - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value); - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return func.apply(this, otherArgs); - }; - } - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = identity; - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - var toKey = String; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - return baseFilter(array, Boolean); - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else { - fromIndex = 0; - } - var index = (fromIndex || 0) - 1, - isReflexive = value === value; - - while (++index < length) { - var other = array[index]; - if ((isReflexive ? other === value : other !== other)) { - return index; - } - } - return -1; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - start = start == null ? 0 : +start; - end = end === undefined ? length : +end; - return length ? baseSlice(array, start, end) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseEvery(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - return baseFilter(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - return baseEach(collection, baseIteratee(iteratee)); - } - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - return baseMap(collection, baseIteratee(iteratee)); - } - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - collection = isArrayLike(collection) ? collection : nativeKeys(collection); - return collection.length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseSome(collection, baseIteratee(predicate)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - function sortBy(collection, iteratee) { - var index = 0; - iteratee = baseIteratee(iteratee); - - return baseMap(baseMap(collection, function(value, key, collection) { - return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; - }).sort(function(object, other) { - return compareAscending(object.criteria, other.criteria) || (object.index - other.index); - }), baseProperty('value')); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - return createPartial(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials); - }); - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - if (!isObject(value)) { - return value; - } - return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = baseIsDate; - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || - isFunction(value.splice) || isArguments(value))) { - return !value.length; - } - return !nativeKeys(value).length; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag || tag == proxyTag; - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = baseIsRegExp; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!isArrayLike(value)) { - return values(value); - } - return value.length ? copyArray(value) : []; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - var toInteger = Number; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - var toNumber = Number; - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - if (typeof value == 'string') { - return value; - } - return value == null ? '' : (value + ''); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - copyObject(source, nativeKeys(source), object); - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, nativeKeysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? assign(result, properties) : result; - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return assignInWith.apply(undefined, args); - }); - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasOwnProperty.call(object, path); - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - var keys = nativeKeys; - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - var keysIn = nativeKeysIn; - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, props) { - return object == null ? {} : basePick(object, baseMap(props, toKey)); - }); - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - var value = object == null ? undefined : object[path]; - if (value === undefined) { - value = defaultValue; - } - return isFunction(value) ? value.call(object) : value; - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /*------------------------------------------------------------------------*/ - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ - var iteratee = baseIteratee; - - /** - * Creates a function that performs a partial deep comparison between a given - * object and `source`, returning `true` if the given object has equivalent - * property values, else `false`. - * - * **Note:** The created function is equivalent to `_.isMatch` with `source` - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 1, 'b': 2, 'c': 3 }, - * { 'a': 4, 'b': 5, 'c': 6 } - * ]; - * - * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); - * // => [{ 'a': 4, 'b': 5, 'c': 6 }] - */ - function matches(source) { - return baseMatches(assign({}, source)); - } - - /** - * Adds all own enumerable string keyed function properties of a source - * object to the destination object. If `object` is a function, then methods - * are added to its prototype as well. - * - * **Note:** Use `_.runInContext` to create a pristine `lodash` function to - * avoid conflicts caused by modifying the original. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Function|Object} [object=lodash] The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.chain=true] Specify whether mixins are chainable. - * @returns {Function|Object} Returns `object`. - * @example - * - * function vowels(string) { - * return _.filter(string, function(v) { - * return /[aeiou]/i.test(v); - * }); - * } - * - * _.mixin({ 'vowels': vowels }); - * _.vowels('fred'); - * // => ['e'] - * - * _('fred').vowels().value(); - * // => ['e'] - * - * _.mixin({ 'vowels': vowels }, { 'chain': false }); - * _('fred').vowels(); - * // => ['e'] - */ - function mixin(object, source, options) { - var props = keys(source), - methodNames = baseFunctions(source, props); - - if (options == null && - !(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); - - baseEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = copyArray(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; - return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - - return object; - } - - /** - * Reverts the `_` variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - - /** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ - function noop() { - // No operation performed. - } - - /** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ - function max(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseGt) - : undefined; - } - - /** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ - function min(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseLt) - : undefined; - } - - /*------------------------------------------------------------------------*/ - - // Add methods that return wrapped values in chain sequences. - lodash.assignIn = assignIn; - lodash.before = before; - lodash.bind = bind; - lodash.chain = chain; - lodash.compact = compact; - lodash.concat = concat; - lodash.create = create; - lodash.defaults = defaults; - lodash.defer = defer; - lodash.delay = delay; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.iteratee = iteratee; - lodash.keys = keys; - lodash.map = map; - lodash.matches = matches; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.once = once; - lodash.pick = pick; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.tap = tap; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.values = values; - - // Add aliases. - lodash.extend = assignIn; - - // Add methods to `lodash.prototype`. - mixin(lodash, lodash); - - /*------------------------------------------------------------------------*/ - - // Add methods that return unwrapped values in chain sequences. - lodash.clone = clone; - lodash.escape = escape; - lodash.every = every; - lodash.find = find; - lodash.forEach = forEach; - lodash.has = has; - lodash.head = head; - lodash.identity = identity; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isBoolean = isBoolean; - lodash.isDate = isDate; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isNaN = isNaN; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isRegExp = isRegExp; - lodash.isString = isString; - lodash.isUndefined = isUndefined; - lodash.last = last; - lodash.max = max; - lodash.min = min; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.reduce = reduce; - lodash.result = result; - lodash.size = size; - lodash.some = some; - lodash.uniqueId = uniqueId; - - // Add aliases. - lodash.each = forEach; - lodash.first = head; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }()), { 'chain': false }); - - /*------------------------------------------------------------------------*/ - - /** - * The semantic version number. - * - * @static - * @memberOf _ - * @type {string} - */ - lodash.VERSION = VERSION; - - // Add `Array` methods to `lodash.prototype`. - baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { - var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:pop|join|replace|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); - }); - }; - }); - - // Add chain sequence methods to the `lodash` wrapper. - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - - /*--------------------------------------------------------------------------*/ - - // Some AMD build optimizers, like r.js, check for condition patterns like: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { - // Expose Lodash on the global object to prevent errors when Lodash is - // loaded by a script tag in the presence of an AMD loader. - // See http://requirejs.org/docs/errors.html#mismatch for more details. - // Use `_.noConflict` to remove Lodash from the global object. - root._ = lodash; - - // Define as an anonymous module so, through path mapping, it can be - // referenced as the "underscore" module. - define(function() { - return lodash; - }); - } - // Check for `exports` after `define` in case a build optimizer adds it. - else if (freeModule) { - // Export for Node.js. - (freeModule.exports = lodash)._ = lodash; - // Export for CommonJS support. - freeExports._ = lodash; - } - else { - // Export to the global object. - root._ = lodash; - } -}.call(this)); diff --git a/node_modules/archiver-utils/node_modules/lodash/core.min.js b/node_modules/archiver-utils/node_modules/lodash/core.min.js deleted file mode 100644 index c1fb1cd18..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/core.min.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @license - * lodash (Custom Build) /license | Underscore.js 1.8.3 underscorejs.org/LICENSE - * Build: `lodash core -o ./dist/lodash.core.js` - */ -;(function(){function n(n){return K(n)&&pn.call(n,"callee")&&!bn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?nn:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return d(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r,e){return n===nn||M(n,ln[r])&&!pn.call(e,r)?t:n}function f(n,t,r){ -if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(nn,r)},t)}function a(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function l(n,t,r){for(var e=-1,u=n.length;++et}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!K(t)?n!==n&&t!==t:g(n,t,b,r,e,u))}function g(n,t,r,e,u,o){var i=Sn(n),c=Sn(t),f="[object Array]",a="[object Array]";i||(f=hn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=hn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]); -var p=En(o,function(t){return t[0]==n}),s=En(o,function(n){return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=B(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=M(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 2&u||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o), -o.pop(),r):(i=i?n.value():n,f=f?t.value():t,r=r(i,f,e,u,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?Y:(typeof n=="object"?m:r)(n)}function j(n,t){return nt&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++ei))return false;for(var c=-1,f=true,a=1&u?[]:nn;++cr?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,mn); -}function J(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Tn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=nn),r}}function M(n,t){return n===t||n!==n&&t!==t}function U(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1=t),t&&!V(n)}function V(n){return n=H(n)?hn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n||"[object Proxy]"==n}function H(n){var t=typeof n;return null!=n&&("object"==t||"function"==t); -}function K(n){return null!=n&&typeof n=="object"}function L(n){return typeof n=="number"||K(n)&&"[object Number]"==hn.call(n)}function Q(n){return typeof n=="string"||!Sn(n)&&K(n)&&"[object String]"==hn.call(n)}function W(n){return typeof n=="string"?n:null==n?"":n+""}function X(n){return n?u(n,qn(n)):[]}function Y(n){return n}function Z(n,r,e){var u=qn(r),o=v(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=v(r,qn(r)));var i=!(H(e)&&"chain"in e&&!e.chain),c=V(n);return mn(o,function(e){ -var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var nn,tn=1/0,rn=/[&<>"']/g,en=RegExp(rn.source),un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){ -return function(t){return null==n?nn:n[t]}}({"&":"&","<":"<",">":">",'"':""","'":"'"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,yn=Object.create,bn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return H(t)?yn?yn(t):(n.prototype=t,t=new n,n.prototype=nn,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i; -var mn=function(n,t){return function(r,e){if(null==r)return r;if(!U(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++or&&(r=jn(e+r,0));n:{for(t=_(t),e=n.length,r+=-1;++re||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ -var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } -}); - -module.exports = countBy; diff --git a/node_modules/archiver-utils/node_modules/lodash/create.js b/node_modules/archiver-utils/node_modules/lodash/create.js deleted file mode 100644 index a99067ff4..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/create.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseAssign = require('./_baseAssign'), - baseCreate = require('./_baseCreate'); - -/** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ -function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; -} - -module.exports = create; diff --git a/node_modules/archiver-utils/node_modules/lodash/drop.js b/node_modules/archiver-utils/node_modules/lodash/drop.js deleted file mode 100644 index 6124ef769..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/drop.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); -} - -module.exports = drop; diff --git a/node_modules/archiver-utils/node_modules/lodash/dropRight.js b/node_modules/archiver-utils/node_modules/lodash/dropRight.js deleted file mode 100644 index 8aa3576e3..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/dropRight.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); -} - -module.exports = dropRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/dropWhile.js b/node_modules/archiver-utils/node_modules/lodash/dropWhile.js deleted file mode 100644 index f89444ed4..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/dropWhile.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true) - : []; -} - -module.exports = dropWhile; diff --git a/node_modules/archiver-utils/node_modules/lodash/every.js b/node_modules/archiver-utils/node_modules/lodash/every.js deleted file mode 100644 index 114f40f1a..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/every.js +++ /dev/null @@ -1,57 +0,0 @@ -var arrayEvery = require('./_arrayEvery'), - baseEvery = require('./_baseEvery'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ -function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = every; diff --git a/node_modules/archiver-utils/node_modules/lodash/fill.js b/node_modules/archiver-utils/node_modules/lodash/fill.js deleted file mode 100644 index 5730b7d12..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/fill.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseFill = require('./_baseFill'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ -function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); -} - -module.exports = fill; diff --git a/node_modules/archiver-utils/node_modules/lodash/filter.js b/node_modules/archiver-utils/node_modules/lodash/filter.js deleted file mode 100644 index 3df977bb0..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/filter.js +++ /dev/null @@ -1,49 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - baseFilter = require('./_baseFilter'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ -function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = filter; diff --git a/node_modules/archiver-utils/node_modules/lodash/find.js b/node_modules/archiver-utils/node_modules/lodash/find.js deleted file mode 100644 index b6d0950d8..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/find.js +++ /dev/null @@ -1,43 +0,0 @@ -var createFind = require('./_createFind'), - findIndex = require('./findIndex'); - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = createFind(findIndex); - -module.exports = find; diff --git a/node_modules/archiver-utils/node_modules/lodash/findIndex.js b/node_modules/archiver-utils/node_modules/lodash/findIndex.js deleted file mode 100644 index 0b11d9315..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/findIndex.js +++ /dev/null @@ -1,56 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); -} - -module.exports = findIndex; diff --git a/node_modules/archiver-utils/node_modules/lodash/findLast.js b/node_modules/archiver-utils/node_modules/lodash/findLast.js deleted file mode 100644 index 3ce09f47e..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/findLast.js +++ /dev/null @@ -1,26 +0,0 @@ -var createFind = require('./_createFind'), - findLastIndex = require('./findLastIndex'); - -/** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ -var findLast = createFind(findLastIndex); - -module.exports = findLast; diff --git a/node_modules/archiver-utils/node_modules/lodash/findLastIndex.js b/node_modules/archiver-utils/node_modules/lodash/findLastIndex.js deleted file mode 100644 index 63e877044..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/findLastIndex.js +++ /dev/null @@ -1,60 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ -function findLastIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index, true); -} - -module.exports = findLastIndex; diff --git a/node_modules/archiver-utils/node_modules/lodash/flatMap.js b/node_modules/archiver-utils/node_modules/lodash/flatMap.js deleted file mode 100644 index 8c5d83281..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/flatMap.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); -} - -module.exports = flatMap; diff --git a/node_modules/archiver-utils/node_modules/lodash/flatMapDeep.js b/node_modules/archiver-utils/node_modules/lodash/flatMapDeep.js deleted file mode 100644 index 9359882ff..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/flatMapDeep.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); -} - -module.exports = flatMapDeep; diff --git a/node_modules/archiver-utils/node_modules/lodash/flatMapDepth.js b/node_modules/archiver-utils/node_modules/lodash/flatMapDepth.js deleted file mode 100644 index 2182bed67..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/flatMapDepth.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'), - toInteger = require('./toInteger'); - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ -function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); -} - -module.exports = flatMapDepth; diff --git a/node_modules/archiver-utils/node_modules/lodash/flatten.js b/node_modules/archiver-utils/node_modules/lodash/flatten.js deleted file mode 100644 index bd4f43978..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/flatten.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; -} - -module.exports = flatten; diff --git a/node_modules/archiver-utils/node_modules/lodash/flattenDeep.js b/node_modules/archiver-utils/node_modules/lodash/flattenDeep.js deleted file mode 100644 index c20c781a8..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/flattenDeep.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ -function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; -} - -module.exports = flattenDeep; diff --git a/node_modules/archiver-utils/node_modules/lodash/flattenDepth.js b/node_modules/archiver-utils/node_modules/lodash/flattenDepth.js deleted file mode 100644 index a0f4b5259..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/flattenDepth.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - toInteger = require('./toInteger'); - -/** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ -function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); -} - -module.exports = flattenDepth; diff --git a/node_modules/archiver-utils/node_modules/lodash/forEach.js b/node_modules/archiver-utils/node_modules/lodash/forEach.js deleted file mode 100644 index 0ce879f93..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/forEach.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseEach = require('./_baseEach'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, baseIteratee(iteratee, 3)); -} - -module.exports = forEach; diff --git a/node_modules/archiver-utils/node_modules/lodash/forEachRight.js b/node_modules/archiver-utils/node_modules/lodash/forEachRight.js deleted file mode 100644 index c5d6e06dc..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/forEachRight.js +++ /dev/null @@ -1,31 +0,0 @@ -var arrayEachRight = require('./_arrayEachRight'), - baseEachRight = require('./_baseEachRight'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ -function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, baseIteratee(iteratee, 3)); -} - -module.exports = forEachRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/forIn.js b/node_modules/archiver-utils/node_modules/lodash/forIn.js deleted file mode 100644 index 2e757da44..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/forIn.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseFor = require('./_baseFor'), - baseIteratee = require('./_baseIteratee'), - keysIn = require('./keysIn'); - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, baseIteratee(iteratee, 3), keysIn); -} - -module.exports = forIn; diff --git a/node_modules/archiver-utils/node_modules/lodash/forInRight.js b/node_modules/archiver-utils/node_modules/lodash/forInRight.js deleted file mode 100644 index a47d6bb43..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/forInRight.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseForRight = require('./_baseForRight'), - baseIteratee = require('./_baseIteratee'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ -function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, baseIteratee(iteratee, 3), keysIn); -} - -module.exports = forInRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/forOwn.js b/node_modules/archiver-utils/node_modules/lodash/forOwn.js deleted file mode 100644 index 034c30b12..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/forOwn.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - baseIteratee = require('./_baseIteratee'); - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && baseForOwn(object, baseIteratee(iteratee, 3)); -} - -module.exports = forOwn; diff --git a/node_modules/archiver-utils/node_modules/lodash/forOwnRight.js b/node_modules/archiver-utils/node_modules/lodash/forOwnRight.js deleted file mode 100644 index 0f7aab85d..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/forOwnRight.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ -function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, baseIteratee(iteratee, 3)); -} - -module.exports = forOwnRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/_baseConvert.js b/node_modules/archiver-utils/node_modules/lodash/fp/_baseConvert.js deleted file mode 100644 index 0def5f67c..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/fp/_baseConvert.js +++ /dev/null @@ -1,535 +0,0 @@ -var mapping = require('./_mapping'), - mutateMap = mapping.mutate, - fallbackHolder = require('./placeholder'); - -/** - * Creates a function, with an arity of `n`, that invokes `func` with the - * arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} n The arity of the new function. - * @returns {Function} Returns the new function. - */ -function baseArity(func, n) { - return n == 2 - ? function(a, b) { return func.apply(undefined, arguments); } - : function(a) { return func.apply(undefined, arguments); }; -} - -/** - * Creates a function that invokes `func`, with up to `n` arguments, ignoring - * any additional arguments. - * - * @private - * @param {Function} func The function to cap arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ -function baseAry(func, n) { - return n == 2 - ? function(a, b) { return func(a, b); } - : function(a) { return func(a); }; -} - -/** - * Creates a clone of `array`. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the cloned array. - */ -function cloneArray(array) { - var length = array ? array.length : 0, - result = Array(length); - - while (length--) { - result[length] = array[length]; - } - return result; -} - -/** - * Creates a function that clones a given object using the assignment `func`. - * - * @private - * @param {Function} func The assignment function. - * @returns {Function} Returns the new cloner function. - */ -function createCloner(func) { - return function(object) { - return func({}, object); - }; -} - -/** - * Creates a function that wraps `func` and uses `cloner` to clone the first - * argument it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} cloner The function to clone arguments. - * @returns {Function} Returns the new immutable function. - */ -function wrapImmutable(func, cloner) { - return function() { - var length = arguments.length; - if (!length) { - return; - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var result = args[0] = cloner.apply(undefined, args); - func.apply(undefined, args); - return result; - }; -} - -/** - * The base implementation of `convert` which accepts a `util` object of methods - * required to perform conversions. - * - * @param {Object} util The util object. - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @param {Object} [options] The options object. - * @param {boolean} [options.cap=true] Specify capping iteratee arguments. - * @param {boolean} [options.curry=true] Specify currying. - * @param {boolean} [options.fixed=true] Specify fixed arity. - * @param {boolean} [options.immutable=true] Specify immutable operations. - * @param {boolean} [options.rearg=true] Specify rearranging arguments. - * @returns {Function|Object} Returns the converted function or object. - */ -function baseConvert(util, name, func, options) { - var setPlaceholder, - isLib = typeof name == 'function', - isObj = name === Object(name); - - if (isObj) { - options = func; - func = name; - name = undefined; - } - if (func == null) { - throw new TypeError; - } - options || (options = {}); - - var config = { - 'cap': 'cap' in options ? options.cap : true, - 'curry': 'curry' in options ? options.curry : true, - 'fixed': 'fixed' in options ? options.fixed : true, - 'immutable': 'immutable' in options ? options.immutable : true, - 'rearg': 'rearg' in options ? options.rearg : true - }; - - var forceCurry = ('curry' in options) && options.curry, - forceFixed = ('fixed' in options) && options.fixed, - forceRearg = ('rearg' in options) && options.rearg, - placeholder = isLib ? func : fallbackHolder, - pristine = isLib ? func.runInContext() : undefined; - - var helpers = isLib ? func : { - 'ary': util.ary, - 'assign': util.assign, - 'clone': util.clone, - 'curry': util.curry, - 'forEach': util.forEach, - 'isArray': util.isArray, - 'isFunction': util.isFunction, - 'iteratee': util.iteratee, - 'keys': util.keys, - 'rearg': util.rearg, - 'spread': util.spread, - 'toInteger': util.toInteger, - 'toPath': util.toPath - }; - - var ary = helpers.ary, - assign = helpers.assign, - clone = helpers.clone, - curry = helpers.curry, - each = helpers.forEach, - isArray = helpers.isArray, - isFunction = helpers.isFunction, - keys = helpers.keys, - rearg = helpers.rearg, - spread = helpers.spread, - toInteger = helpers.toInteger, - toPath = helpers.toPath; - - var aryMethodKeys = keys(mapping.aryMethod); - - var wrappers = { - 'castArray': function(castArray) { - return function() { - var value = arguments[0]; - return isArray(value) - ? castArray(cloneArray(value)) - : castArray.apply(undefined, arguments); - }; - }, - 'iteratee': function(iteratee) { - return function() { - var func = arguments[0], - arity = arguments[1], - result = iteratee(func, arity), - length = result.length; - - if (config.cap && typeof arity == 'number') { - arity = arity > 2 ? (arity - 2) : 1; - return (length && length <= arity) ? result : baseAry(result, arity); - } - return result; - }; - }, - 'mixin': function(mixin) { - return function(source) { - var func = this; - if (!isFunction(func)) { - return mixin(func, Object(source)); - } - var pairs = []; - each(keys(source), function(key) { - if (isFunction(source[key])) { - pairs.push([key, func.prototype[key]]); - } - }); - - mixin(func, Object(source)); - - each(pairs, function(pair) { - var value = pair[1]; - if (isFunction(value)) { - func.prototype[pair[0]] = value; - } else { - delete func.prototype[pair[0]]; - } - }); - return func; - }; - }, - 'nthArg': function(nthArg) { - return function(n) { - var arity = n < 0 ? 1 : (toInteger(n) + 1); - return curry(nthArg(n), arity); - }; - }, - 'rearg': function(rearg) { - return function(func, indexes) { - var arity = indexes ? indexes.length : 0; - return curry(rearg(func, indexes), arity); - }; - }, - 'runInContext': function(runInContext) { - return function(context) { - return baseConvert(util, runInContext(context), options); - }; - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Casts `func` to a function with an arity capped iteratee if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @returns {Function} Returns the cast function. - */ - function castCap(name, func) { - if (config.cap) { - var indexes = mapping.iterateeRearg[name]; - if (indexes) { - return iterateeRearg(func, indexes); - } - var n = !isLib && mapping.iterateeAry[name]; - if (n) { - return iterateeAry(func, n); - } - } - return func; - } - - /** - * Casts `func` to a curried function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castCurry(name, func, n) { - return (forceCurry || (config.curry && n > 1)) - ? curry(func, n) - : func; - } - - /** - * Casts `func` to a fixed arity function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity cap. - * @returns {Function} Returns the cast function. - */ - function castFixed(name, func, n) { - if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { - var data = mapping.methodSpread[name], - start = data && data.start; - - return start === undefined ? ary(func, n) : spread(func, start); - } - return func; - } - - /** - * Casts `func` to an rearged function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castRearg(name, func, n) { - return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) - ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) - : func; - } - - /** - * Creates a clone of `object` by `path`. - * - * @private - * @param {Object} object The object to clone. - * @param {Array|string} path The path to clone by. - * @returns {Object} Returns the cloned object. - */ - function cloneByPath(object, path) { - path = toPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - result = clone(Object(object)), - nested = result; - - while (nested != null && ++index < length) { - var key = path[index], - value = nested[key]; - - if (value != null) { - nested[path[index]] = clone(index == lastIndex ? value : Object(value)); - } - nested = nested[key]; - } - return result; - } - - /** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ - function convertLib(options) { - return _.runInContext.convert(options)(undefined); - } - - /** - * Create a converter function for `func` of `name`. - * - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @returns {Function} Returns the new converter function. - */ - function createConverter(name, func) { - var oldOptions = options; - return function(options) { - var newUtil = isLib ? pristine : helpers, - newFunc = isLib ? pristine[name] : func, - newOptions = assign(assign({}, oldOptions), options); - - return baseConvert(newUtil, name, newFunc, newOptions); - }; - } - - /** - * Creates a function that wraps `func` to invoke its iteratee, with up to `n` - * arguments, ignoring any additional arguments. - * - * @private - * @param {Function} func The function to cap iteratee arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ - function iterateeAry(func, n) { - return overArg(func, function(func) { - return typeof func == 'function' ? baseAry(func, n) : func; - }); - } - - /** - * Creates a function that wraps `func` to invoke its iteratee with arguments - * arranged according to the specified `indexes` where the argument value at - * the first index is provided as the first argument, the argument value at - * the second index is provided as the second argument, and so on. - * - * @private - * @param {Function} func The function to rearrange iteratee arguments for. - * @param {number[]} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - */ - function iterateeRearg(func, indexes) { - return overArg(func, function(func) { - var n = indexes.length; - return baseArity(rearg(baseAry(func, n), indexes), n); - }); - } - - /** - * Creates a function that invokes `func` with its first argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function() { - var length = arguments.length; - if (!length) { - return func(); - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var index = config.rearg ? 0 : (length - 1); - args[index] = transform(args[index]); - return func.apply(undefined, args); - }; - } - - /** - * Creates a function that wraps `func` and applys the conversions - * rules by `name`. - * - * @private - * @param {string} name The name of the function to wrap. - * @param {Function} func The function to wrap. - * @returns {Function} Returns the converted function. - */ - function wrap(name, func) { - name = mapping.aliasToReal[name] || name; - - var result, - wrapped = func, - wrapper = wrappers[name]; - - if (wrapper) { - wrapped = wrapper(func); - } - else if (config.immutable) { - if (mutateMap.array[name]) { - wrapped = wrapImmutable(func, cloneArray); - } - else if (mutateMap.object[name]) { - wrapped = wrapImmutable(func, createCloner(func)); - } - else if (mutateMap.set[name]) { - wrapped = wrapImmutable(func, cloneByPath); - } - } - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(otherName) { - if (name == otherName) { - var spreadData = mapping.methodSpread[name], - afterRearg = spreadData && spreadData.afterRearg; - - result = afterRearg - ? castFixed(name, castRearg(name, wrapped, aryKey), aryKey) - : castRearg(name, castFixed(name, wrapped, aryKey), aryKey); - - result = castCap(name, result); - result = castCurry(name, result, aryKey); - return false; - } - }); - return !result; - }); - - result || (result = wrapped); - if (result == func) { - result = forceCurry ? curry(result, 1) : function() { - return func.apply(this, arguments); - }; - } - result.convert = createConverter(name, func); - if (mapping.placeholder[name]) { - setPlaceholder = true; - result.placeholder = func.placeholder = placeholder; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - if (!isObj) { - return wrap(name, func); - } - var _ = func; - - // Convert methods by ary cap. - var pairs = []; - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(key) { - var func = _[mapping.remap[key] || key]; - if (func) { - pairs.push([key, wrap(key, func)]); - } - }); - }); - - // Convert remaining methods. - each(keys(_), function(key) { - var func = _[key]; - if (typeof func == 'function') { - var length = pairs.length; - while (length--) { - if (pairs[length][0] == key) { - return; - } - } - func.convert = createConverter(key, func); - pairs.push([key, func]); - } - }); - - // Assign to `_` leaving `_.prototype` unchanged to allow chaining. - each(pairs, function(pair) { - _[pair[0]] = pair[1]; - }); - - _.convert = convertLib; - if (setPlaceholder) { - _.placeholder = placeholder; - } - // Assign aliases. - each(keys(_), function(key) { - each(mapping.realToAlias[key] || [], function(alias) { - _[alias] = _[key]; - }); - }); - - return _; -} - -module.exports = baseConvert; diff --git a/node_modules/archiver-utils/node_modules/lodash/fromPairs.js b/node_modules/archiver-utils/node_modules/lodash/fromPairs.js deleted file mode 100644 index 39f5fb342..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/fromPairs.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ -function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; -} - -module.exports = fromPairs; diff --git a/node_modules/archiver-utils/node_modules/lodash/groupBy.js b/node_modules/archiver-utils/node_modules/lodash/groupBy.js deleted file mode 100644 index 5b73b4104..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/groupBy.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ -var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } -}); - -module.exports = groupBy; diff --git a/node_modules/archiver-utils/node_modules/lodash/indexOf.js b/node_modules/archiver-utils/node_modules/lodash/indexOf.js deleted file mode 100644 index 8c9b86dc6..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/indexOf.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ -function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); -} - -module.exports = indexOf; diff --git a/node_modules/archiver-utils/node_modules/lodash/initial.js b/node_modules/archiver-utils/node_modules/lodash/initial.js deleted file mode 100644 index 63e0c93ec..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/initial.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ -function initial(array) { - var length = array ? array.length : 0; - return length ? baseSlice(array, 0, -1) : []; -} - -module.exports = initial; diff --git a/node_modules/archiver-utils/node_modules/lodash/intersectionWith.js b/node_modules/archiver-utils/node_modules/lodash/intersectionWith.js deleted file mode 100644 index 0ba2f9a61..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/intersectionWith.js +++ /dev/null @@ -1,42 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ -var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; -}); - -module.exports = intersectionWith; diff --git a/node_modules/archiver-utils/node_modules/lodash/isBoolean.js b/node_modules/archiver-utils/node_modules/lodash/isBoolean.js deleted file mode 100644 index 45cbdc1ce..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isBoolean.js +++ /dev/null @@ -1,38 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ -function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); -} - -module.exports = isBoolean; diff --git a/node_modules/archiver-utils/node_modules/lodash/isElement.js b/node_modules/archiver-utils/node_modules/lodash/isElement.js deleted file mode 100644 index 0c151a475..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isElement.js +++ /dev/null @@ -1,25 +0,0 @@ -var isObjectLike = require('./isObjectLike'), - isPlainObject = require('./isPlainObject'); - -/** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ -function isElement(value) { - return value != null && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); -} - -module.exports = isElement; diff --git a/node_modules/archiver-utils/node_modules/lodash/isEmpty.js b/node_modules/archiver-utils/node_modules/lodash/isEmpty.js deleted file mode 100644 index e19042570..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isEmpty.js +++ /dev/null @@ -1,74 +0,0 @@ -var baseKeys = require('./_baseKeys'), - getTag = require('./_getTag'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLike = require('./isArrayLike'), - isBuffer = require('./isBuffer'), - isPrototype = require('./_isPrototype'), - isTypedArray = require('./isTypedArray'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ -function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - 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 false; - } - } - return true; -} - -module.exports = isEmpty; diff --git a/node_modules/archiver-utils/node_modules/lodash/isError.js b/node_modules/archiver-utils/node_modules/lodash/isError.js deleted file mode 100644 index 85884b520..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isError.js +++ /dev/null @@ -1,42 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var errorTag = '[object Error]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ -function isError(value) { - if (!isObjectLike(value)) { - return false; - } - return (objectToString.call(value) == errorTag) || - (typeof value.message == 'string' && typeof value.name == 'string'); -} - -module.exports = isError; diff --git a/node_modules/archiver-utils/node_modules/lodash/isFunction.js b/node_modules/archiver-utils/node_modules/lodash/isFunction.js deleted file mode 100644 index 17ccf3239..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isFunction.js +++ /dev/null @@ -1,42 +0,0 @@ -var isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag || tag == proxyTag; -} - -module.exports = isFunction; diff --git a/node_modules/archiver-utils/node_modules/lodash/isNumber.js b/node_modules/archiver-utils/node_modules/lodash/isNumber.js deleted file mode 100644 index b8662920e..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isNumber.js +++ /dev/null @@ -1,47 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var numberTag = '[object Number]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ -function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); -} - -module.exports = isNumber; diff --git a/node_modules/archiver-utils/node_modules/lodash/isPlainObject.js b/node_modules/archiver-utils/node_modules/lodash/isPlainObject.js deleted file mode 100644 index 035fbb2a1..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isPlainObject.js +++ /dev/null @@ -1,68 +0,0 @@ -var getPrototype = require('./_getPrototype'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString.call(Object); - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ -function isPlainObject(value) { - if (!isObjectLike(value) || objectToString.call(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); -} - -module.exports = isPlainObject; diff --git a/node_modules/archiver-utils/node_modules/lodash/isString.js b/node_modules/archiver-utils/node_modules/lodash/isString.js deleted file mode 100644 index 7b8be86ce..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isString.js +++ /dev/null @@ -1,39 +0,0 @@ -var isArray = require('./isArray'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); -} - -module.exports = isString; diff --git a/node_modules/archiver-utils/node_modules/lodash/isSymbol.js b/node_modules/archiver-utils/node_modules/lodash/isSymbol.js deleted file mode 100644 index aef51150f..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isSymbol.js +++ /dev/null @@ -1,38 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); -} - -module.exports = isSymbol; diff --git a/node_modules/archiver-utils/node_modules/lodash/isWeakSet.js b/node_modules/archiver-utils/node_modules/lodash/isWeakSet.js deleted file mode 100644 index 290164b4b..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/isWeakSet.js +++ /dev/null @@ -1,37 +0,0 @@ -var isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakSetTag = '[object WeakSet]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ -function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; -} - -module.exports = isWeakSet; diff --git a/node_modules/archiver-utils/node_modules/lodash/join.js b/node_modules/archiver-utils/node_modules/lodash/join.js deleted file mode 100644 index fe3106766..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/join.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeJoin = arrayProto.join; - -/** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ -function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; -} - -module.exports = join; diff --git a/node_modules/archiver-utils/node_modules/lodash/keyBy.js b/node_modules/archiver-utils/node_modules/lodash/keyBy.js deleted file mode 100644 index d0047a5f2..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/keyBy.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ -var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); -}); - -module.exports = keyBy; diff --git a/node_modules/archiver-utils/node_modules/lodash/last.js b/node_modules/archiver-utils/node_modules/lodash/last.js deleted file mode 100644 index 6402a4c33..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/last.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; -} - -module.exports = last; diff --git a/node_modules/archiver-utils/node_modules/lodash/lastIndexOf.js b/node_modules/archiver-utils/node_modules/lodash/lastIndexOf.js deleted file mode 100644 index 9201cb9a2..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/lastIndexOf.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIsNaN = require('./_baseIsNaN'), - strictLastIndexOf = require('./_strictLastIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ -function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); -} - -module.exports = lastIndexOf; diff --git a/node_modules/archiver-utils/node_modules/lodash/lodash.js b/node_modules/archiver-utils/node_modules/lodash/lodash.js deleted file mode 100644 index 361e74d90..000000000 --- a/node_modules/archiver-utils/node_modules/lodash/lodash.js +++ /dev/null @@ -1,16982 +0,0 @@ -/** - * @license - * lodash - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.16.4'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Error message constants. */ - var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://github.com/es-shims.', - FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for function metadata. */ - var BIND_FLAG = 1, - BIND_KEY_FLAG = 2, - CURRY_BOUND_FLAG = 4, - CURRY_FLAG = 8, - CURRY_RIGHT_FLAG = 16, - PARTIAL_FLAG = 32, - PARTIAL_RIGHT_FLAG = 64, - ARY_FLAG = 128, - REARG_FLAG = 256, - FLIP_FLAG = 512; - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 500, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', ARY_FLAG], - ['bind', BIND_FLAG], - ['bindKey', BIND_KEY_FLAG], - ['curry', CURRY_FLAG], - ['curryRight', CURRY_RIGHT_FLAG], - ['flip', FLIP_FLAG], - ['partial', PARTIAL_FLAG], - ['partialRight', PARTIAL_RIGHT_FLAG], - ['rearg', REARG_FLAG] - ]; - - /** `Object#toString` result references. */ - var 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]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var 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]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g, - reTrimStart = /^\s+/, - reTrimEnd = /\s+$/; - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', - rsComboSymbolsRange = '\\u20d0-\\u20f0', - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', - rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, - rsUpper + '+' + rsOptUpperContr, - rsDigits, - rsEmoji - ].join('|'), 'g'); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var 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' - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - 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] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - 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] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - return freeProcess && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ - function addMapEntry(map, pair) { - // Don't return `map.set` because it's not chainable in IE 11. - map.set(pair[0], pair[1]); - return map; - } - - /** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ - function addSetEntry(set, value) { - // Don't return `set.add` because it's not chainable in IE 11. - set.add(value); - return set; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - 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); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array ? array.length : 0; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array ? array.length : 0; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array ? array.length : 0; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); - } - - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; - } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array ? array.length : 0; - return length ? (baseSum(array, iteratee) / length) : NAN; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters); - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = (function runInContext(context) { - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - iteratorSymbol = Symbol ? Symbol.iterator : undefined, - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** Mocked built-ins. */ - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - 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); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB). Change the following template settings to use - * alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash - } - }; - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - 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__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(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 || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(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; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values ? values.length : 0; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - 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) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths of elements to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - isNil = object == null, - length = paths.length, - result = Array(length); - - while (++index < length) { - result[index] = isNil ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {boolean} [isFull] Specify a clone including symbols. - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, isFull, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); - }); - return result; - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } - - /** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - /** - * The base implementation of `getTag`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - return objectToString.call(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (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: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - if (!isKey(path, object)) { - path = castPath(path); - object = parent(object, path); - path = last(path); - } - var func = object == null ? object : object[toKey(path)]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && objectToString.call(value) == argsTag; - } - - /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && objectToString.call(value) == arrayBufferTag; - } - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && objectToString.call(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - 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; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, equalFunc, customizer, bitmask, stack); - } - - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) - : result - )) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObject(value) && objectToString.call(value) == regexpTag; - } - - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return basePickBy(object, props, function(value, key) { - return key in object; - }); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick from. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, props, predicate) { - var index = -1, - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (predicate(value, key)) { - baseAssignValue(result, key, value); - } - } - return result; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } - else if (!isKey(index, array)) { - var path = castPath(index), - object = parent(array, path); - - if (object != null) { - delete object[toKey(last(path))]; - } - } - else { - delete array[toKey(index)]; - } - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values(collection)); - } - - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } - - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - object = parent(object, path); - - var key = toKey(last(path)); - return !(object != null && hasOwnProperty.call(object, key)) || delete object[key]; - } - - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((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)); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var index = -1, - length = arrays.length; - - while (++index < length) { - var result = result - ? arrayPush( - baseDifference(result, arrays[index], iteratee, comparator), - baseDifference(arrays[index], result, iteratee, comparator) - ) - : arrays[index]; - } - return (result && result.length) ? baseUniq(result, iteratee, comparator) : []; - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value) { - return isArray(value) ? value : stringToPath(value); - } - - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest; - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). - * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. - */ - var clearTimeout = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - /** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ - function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ - function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - 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; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Copies own symbol properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - 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); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - 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; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - 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); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(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; - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & ARY_FLAG, - isBind = bitmask & BIND_FLAG, - isBindKey = bitmask & BIND_KEY_FLAG, - isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), - isFlip = bitmask & FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (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; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = 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); - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); - - if (!(bitmask & CURRY_BOUND_FLAG)) { - bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } - - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; - - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++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 (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= UNORDERED_COMPARE_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } - - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * Creates an array of the own enumerable symbol properties of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; - - /** - * Creates an array of the own and inherited enumerable symbol properties - * of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag; - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ((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 = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - 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; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++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); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - 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 cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; - } - - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); - - var isCombo = - ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || - ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; - } - // Compose partial arguments. - 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]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack); - stack['delete'](srcValue); - } - return objValue; - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData); - - /** - * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @returns {number|Object} Returns the timer id or timeout object. - */ - var setTimeout = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function(string) { - string = toString(string); - - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array ? array.length : 0; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array ? array.length : 0; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs ? pairs.length : 0, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array ? array.length : 0; - return length ? baseSlice(array, 0, -1) : []; - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (comparator === last(mapped)) { - comparator = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; - }); - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array ? nativeJoin.call(array, separator) : ''; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); - } - - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = baseRest(pullAll); - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, getIteratee(iteratee, 2)) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, undefined, comparator) - : array; - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = flatRest(function(array, indexes) { - var length = array ? array.length : 0, - result = baseAt(array, indexes); - - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array ? nativeReverse.call(array) : array; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array ? array.length : 0; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return (array && array.length) - ? baseSortedUniq(array) - : []; - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) - ? baseSortedUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - var length = array ? array.length : 0; - return length ? baseSlice(array, 1, length) : []; - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false}, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. Result values are chosen from - * the first array in which the value occurs. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) - ? baseUniq(array) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) - ? baseUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The order of result values is - * determined by the order they occur in the array.The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - return (array && array.length) - ? baseUniq(array, undefined, comparator) - : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The order of result values is determined - * by the order they occur in the arrays. The iteratee is invoked with one - * argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] - * The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The order of result values is - * determined by the order they occur in the arrays. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = baseRest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; - - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function(paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; - - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { 'done': done, 'value': value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] - * The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex); - - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); - - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - isProp = isKey(path), - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); - result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); - }); - return result; - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] - * The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); - }); - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = ctxNow || function() { - return root.Date.now(); - }; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = baseRest(function(object, key, partials) { - var bitmask = BIND_FLAG | BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrap(func, FLIP_FLAG); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - 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); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - - // Expose `MapCache`. - memoize.Cache = MapCache; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - 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); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with its arguments transformed. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms=[_.identity]] - * The argument transforms. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = castRest(function(func, transforms) { - transforms = (transforms.length == 1 && isArray(transforms[0])) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, PARTIAL_FLAG, undefined, partials, holders); - }); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = flatRest(function(func, indexes) { - return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? start : toInteger(start); - return baseRest(func, start); - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); - - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } - - /** - * Creates a function that provides `value` to `wrapper` as its first - * argument. Any additional arguments provided to the function are appended - * to those provided to the `wrapper`. The wrapper is invoked with the `this` - * binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - wrapper = wrapper == null ? identity : wrapper; - return partial(wrapper, value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, false, true); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - return baseClone(value, false, true, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, true, true); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - return baseClone(value, true, true, customizer); - } - - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && objectToString.call(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return value != null && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value); - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - 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 false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - return (objectToString.call(value) == errorTag) || - (typeof value.message == 'string' && typeof value.name == 'string'); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag || tag == proxyTag; - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && objectToString.call(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || objectToString.call(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && objectToString.call(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (iteratorSymbol && value[iteratorSymbol]) { - return iteratorToArray(value[iteratorSymbol]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths of elements to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties ? baseAssign(result, properties) : result; - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value); - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); - }); - return result; - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable string keyed properties of `object` that are - * not omitted. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function(object, props) { - if (object == null) { - return {}; - } - props = arrayMap(props, toKey); - return basePick(object, baseDifference(getAllKeysIn(object), props)); - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, props) { - return object == null ? {} : basePick(object, arrayMap(props, toKey)); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - return object == null ? {} : basePickBy(object, getAllKeysIn(object), getIteratee(predicate)); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - object = undefined; - length = 1; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); - - iteratee = getIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } - else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object ? baseValues(object, keys(object)) : []; - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (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); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = 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) - ); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (string + createPadding(length - strLength, chars)) - : string; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (createPadding(length - strLength, chars) + string) - : string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || - (separator != null && !isRegExp(separator)) - )) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = baseClamp(toInteger(position), 0, string.length); - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' +``` + +Using [`npm`](http://npmjs.org/): + +```bash +npm install lodash + +npm install -g lodash +npm link lodash +``` + +To avoid potential issues, update `npm` before installing Lo-Dash: + +```bash +npm install npm -g +``` + +In [Node.js](http://nodejs.org/) and [RingoJS v0.8.0+](http://ringojs.org/): + +```js +var _ = require('lodash'); + +// or as a drop-in replacement for Underscore +var _ = require('lodash/lodash.underscore'); +``` + +**Note:** If Lo-Dash is installed globally, run [`npm link lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory before requiring it. + +In [RingoJS v0.7.0-](http://ringojs.org/): + +```js +var _ = require('lodash')._; +``` + +In [Rhino](http://www.mozilla.org/rhino/): + +```js +load('lodash.js'); +``` + +In an AMD loader like [RequireJS](http://requirejs.org/): + +```js +require({ + 'paths': { + 'underscore': 'path/to/lodash' + } +}, +['underscore'], function(_) { + console.log(_.VERSION); +}); +``` + +## Resources + +For more information check out these articles, screencasts, and other videos over Lo-Dash: + + * Posts + - [Say “Hello†to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/) + + * Videos + - [Introducing Lo-Dash](https://vimeo.com/44154599) + - [Lo-Dash optimizations and custom builds](https://vimeo.com/44154601) + - [Lo-Dash’s origin and why it’s a better utility belt](https://vimeo.com/44154600) + - [Unit testing in Lo-Dash](https://vimeo.com/45865290) + - [Lo-Dash’s approach to native method use](https://vimeo.com/48576012) + - [CascadiaJS: Lo-Dash for a better utility belt](http://www.youtube.com/watch?v=dpPy4f_SeEk) + +## Features + + * AMD loader support ([RequireJS](http://requirejs.org/), [curl.js](https://github.com/cujojs/curl), etc.) + * [_(…)](http://lodash.com/docs#_) supports intuitive chaining + * [_.at](http://lodash.com/docs#at) for cherry-picking collection values + * [_.bindKey](http://lodash.com/docs#bindKey) for binding [*“lazyâ€* defined](http://michaux.ca/articles/lazy-function-definition-pattern) methods + * [_.cloneDeep](http://lodash.com/docs#cloneDeep) for deep cloning arrays and objects + * [_.contains](http://lodash.com/docs#contains) accepts a `fromIndex` argument + * [_.forEach](http://lodash.com/docs#forEach) is chainable and supports exiting iteration early + * [_.forIn](http://lodash.com/docs#forIn) for iterating over an object’s own and inherited properties + * [_.forOwn](http://lodash.com/docs#forOwn) for iterating over an object’s own properties + * [_.isPlainObject](http://lodash.com/docs#isPlainObject) checks if values are created by the `Object` constructor + * [_.merge](http://lodash.com/docs#merge) for a deep [_.extend](http://lodash.com/docs#extend) + * [_.partial](http://lodash.com/docs#partial) and [_.partialRight](http://lodash.com/docs#partialRight) for partial application without `this` binding + * [_.template](http://lodash.com/docs#template) supports [*“importsâ€* options](http://lodash.com/docs#templateSettings_imports), [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6), and [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * [_.where](http://lodash.com/docs#where) supports deep object comparisons + * [_.clone](http://lodash.com/docs#clone), [_.omit](http://lodash.com/docs#omit), [_.pick](http://lodash.com/docs#pick), + [and more…](http://lodash.com/docs "_.assign, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept `callback` and `thisArg` arguments + * [_.contains](http://lodash.com/docs#contains), [_.size](http://lodash.com/docs#size), [_.toArray](http://lodash.com/docs#toArray), + [and more…](http://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.some, _.sortBy, _.where") accept strings + * [_.filter](http://lodash.com/docs#filter), [_.find](http://lodash.com/docs#find), [_.map](http://lodash.com/docs#map), + [and more…](http://lodash.com/docs "_.countBy, _.every, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluckâ€* and *“_.whereâ€* `callback` shorthands + +## Support + +Lo-Dash has been tested in at least Chrome 5~24, Firefox 1~18, IE 6-10, Opera 9.25-12, Safari 3-6, Node.js 0.4.8-0.8.20, Narwhal 0.3.2, PhantomJS 1.8.1, RingoJS 0.9, and Rhino 1.7RC5. diff --git a/node_modules/lodash/dist/lodash.compat.js b/node_modules/globule/node_modules/lodash/dist/lodash.compat.js similarity index 100% rename from node_modules/lodash/dist/lodash.compat.js rename to node_modules/globule/node_modules/lodash/dist/lodash.compat.js diff --git a/node_modules/lodash/dist/lodash.compat.min.js b/node_modules/globule/node_modules/lodash/dist/lodash.compat.min.js similarity index 100% rename from node_modules/lodash/dist/lodash.compat.min.js rename to node_modules/globule/node_modules/lodash/dist/lodash.compat.min.js diff --git a/node_modules/lodash/dist/lodash.js b/node_modules/globule/node_modules/lodash/dist/lodash.js similarity index 100% rename from node_modules/lodash/dist/lodash.js rename to node_modules/globule/node_modules/lodash/dist/lodash.js diff --git a/node_modules/lodash/dist/lodash.min.js b/node_modules/globule/node_modules/lodash/dist/lodash.min.js similarity index 100% rename from node_modules/lodash/dist/lodash.min.js rename to node_modules/globule/node_modules/lodash/dist/lodash.min.js diff --git a/node_modules/lodash/dist/lodash.underscore.js b/node_modules/globule/node_modules/lodash/dist/lodash.underscore.js similarity index 100% rename from node_modules/lodash/dist/lodash.underscore.js rename to node_modules/globule/node_modules/lodash/dist/lodash.underscore.js diff --git a/node_modules/lodash/dist/lodash.underscore.min.js b/node_modules/globule/node_modules/lodash/dist/lodash.underscore.min.js similarity index 100% rename from node_modules/lodash/dist/lodash.underscore.min.js rename to node_modules/globule/node_modules/lodash/dist/lodash.underscore.min.js diff --git a/node_modules/globule/node_modules/lodash/package.json b/node_modules/globule/node_modules/lodash/package.json new file mode 100644 index 000000000..3bfce8f46 --- /dev/null +++ b/node_modules/globule/node_modules/lodash/package.json @@ -0,0 +1,58 @@ +{ + "name": "lodash", + "version": "1.0.2", + "description": "A utility library delivering consistency, customization, performance, and extras.", + "homepage": "https://lodash.com/", + "license": "MIT", + "main": "./dist/lodash.js", + "keywords": [ + "browser", + "client", + "functional", + "performance", + "server", + "speed", + "util" + ], + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash.git" + }, + "engines": [ + "node", + "rhino" + ], + "jam": { + "main": "./dist/lodash.compat.js" + } +} diff --git a/node_modules/globule/node_modules/minimatch/package.json b/node_modules/globule/node_modules/minimatch/package.json index 6f600ed32..814cb0a73 100644 --- a/node_modules/globule/node_modules/minimatch/package.json +++ b/node_modules/globule/node_modules/minimatch/package.json @@ -1,92 +1,28 @@ { - "_args": [ - [ - { - "raw": "minimatch@~0.2.11", - "scope": null, - "escapedName": "minimatch", - "name": "minimatch", - "rawSpec": "~0.2.11", - "spec": ">=0.2.11 <0.3.0", - "type": "range" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/globule" - ] - ], - "_from": "minimatch@>=0.2.11 <0.3.0", - "_id": "minimatch@0.2.14", - "_inCache": true, - "_location": "/globule/minimatch", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" + "author": "Isaac Z. Schlueter (http://blog.izs.me)", + "name": "minimatch", + "description": "a glob matcher in javascript", + "version": "0.2.14", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" }, - "_npmVersion": "1.3.17", - "_phantomChildren": {}, - "_requested": { - "raw": "minimatch@~0.2.11", - "scope": null, - "escapedName": "minimatch", - "name": "minimatch", - "rawSpec": "~0.2.11", - "spec": ">=0.2.11 <0.3.0", - "type": "range" + "main": "minimatch.js", + "scripts": { + "test": "tap test/*.js" }, - "_requiredBy": [ - "/globule", - "/globule/glob" - ], - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "_shasum": "c74e780574f63c6f9a090e90efbe6ef53a6a756a", - "_shrinkwrap": null, - "_spec": "minimatch@~0.2.11", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/globule", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" + "engines": { + "node": "*" }, "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" }, - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "description": "a glob matcher in javascript", "devDependencies": { "tap": "" }, - "directories": {}, - "dist": { - "shasum": "c74e780574f63c6f9a090e90efbe6ef53a6a756a", - "tarball": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/isaacs/minimatch", "license": { "type": "MIT", "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - }, - "main": "minimatch.js", - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "name": "minimatch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "0.2.14" + } } diff --git a/node_modules/globule/package.json b/node_modules/globule/package.json index 2e4b1a0b4..9de7dacd9 100644 --- a/node_modules/globule/package.json +++ b/node_modules/globule/package.json @@ -1,76 +1,38 @@ { - "_args": [ - [ - { - "raw": "globule@~0.1.0", - "scope": null, - "escapedName": "globule", - "name": "globule", - "rawSpec": "~0.1.0", - "spec": ">=0.1.0 <0.2.0", - "type": "range" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/gaze" - ] - ], - "_from": "globule@>=0.1.0 <0.2.0", - "_id": "globule@0.1.0", - "_inCache": true, - "_location": "/globule", - "_npmUser": { - "name": "cowboy", - "email": "cowboy@rj3.net" - }, - "_npmVersion": "1.1.70", - "_phantomChildren": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - }, - "_requested": { - "raw": "globule@~0.1.0", - "scope": null, - "escapedName": "globule", - "name": "globule", - "rawSpec": "~0.1.0", - "spec": ">=0.1.0 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/gaze" - ], - "_resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "_shasum": "d9c8edde1da79d125a151b79533b978676346ae5", - "_shrinkwrap": null, - "_spec": "globule@~0.1.0", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/gaze", + "name": "globule", + "description": "An easy-to-use wildcard globbing library.", + "version": "0.1.0", + "homepage": "https://github.com/cowboy/node-globule", "author": { "name": "\"Cowboy\" Ben Alman", "url": "http://benalman.com/" }, + "repository": { + "type": "git", + "url": "git://github.com/cowboy/node-globule.git" + }, "bugs": { "url": "https://github.com/cowboy/node-globule/issues" }, - "dependencies": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "description": "An easy-to-use wildcard globbing library.", - "devDependencies": { - "grunt": "~0.4.1", - "grunt-contrib-jshint": "~0.1.1", - "grunt-contrib-nodeunit": "~0.1.2", - "grunt-contrib-watch": "~0.2.0" - }, - "directories": {}, - "dist": { - "shasum": "d9c8edde1da79d125a151b79533b978676346ae5", - "tarball": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz" - }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/cowboy/node-globule/blob/master/LICENSE-MIT" + } + ], + "main": "lib/globule", "engines": { "node": ">= 0.8.0" }, - "homepage": "https://github.com/cowboy/node-globule", + "scripts": { + "test": "grunt nodeunit" + }, + "devDependencies": { + "grunt-contrib-jshint": "~0.1.1", + "grunt-contrib-nodeunit": "~0.1.2", + "grunt-contrib-watch": "~0.2.0", + "grunt": "~0.4.1" + }, "keywords": [ "glob", "file", @@ -82,28 +44,9 @@ "sync", "awesome" ], - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/cowboy/node-globule/blob/master/LICENSE-MIT" - } - ], - "main": "lib/globule", - "maintainers": [ - { - "name": "cowboy", - "email": "cowboy@rj3.net" - } - ], - "name": "globule", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/cowboy/node-globule.git" - }, - "scripts": { - "test": "grunt nodeunit" - }, - "version": "0.1.0" + "dependencies": { + "lodash": "~1.0.1", + "glob": "~3.1.21", + "minimatch": "~0.2.11" + } } diff --git a/node_modules/glogg/package.json b/node_modules/glogg/package.json index ad1d5a38c..7ddcccc73 100644 --- a/node_modules/glogg/package.json +++ b/node_modules/glogg/package.json @@ -1,59 +1,25 @@ { - "_args": [ - [ - { - "raw": "glogg@^1.0.0", - "scope": null, - "escapedName": "glogg", - "name": "glogg", - "rawSpec": "^1.0.0", - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/gulplog" - ] - ], - "_from": "glogg@>=1.0.0 <2.0.0", - "_id": "glogg@1.0.0", - "_inCache": true, - "_location": "/glogg", - "_nodeVersion": "0.10.36", - "_npmUser": { - "name": "phated", - "email": "blaine@iceddev.com" - }, - "_npmVersion": "2.8.3", - "_phantomChildren": {}, - "_requested": { - "raw": "glogg@^1.0.0", - "scope": null, - "escapedName": "glogg", - "name": "glogg", - "rawSpec": "^1.0.0", - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/gulplog" - ], - "_resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "_shasum": "7fe0f199f57ac906cf512feead8f90ee4a284fc5", - "_shrinkwrap": null, - "_spec": "glogg@^1.0.0", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/gulplog", - "author": { - "name": "Blaine Bublitz", - "email": "blaine@iceddev.com", - "url": "http://iceddev.com/" - }, - "bugs": { - "url": "https://github.com/undertakerjs/glogg/issues" - }, + "name": "glogg", + "version": "1.0.0", + "description": "Global logging utility", + "author": "Blaine Bublitz (http://iceddev.com/)", "contributors": [], + "repository": "undertakerjs/glogg", + "license": "MIT", + "engines": { + "node": ">= 0.10" + }, + "main": "index.js", + "files": [ + "LICENSE", + "index.js" + ], + "scripts": { + "test": "lab -cvL --globals store@sparkles" + }, "dependencies": { "sparkles": "^1.0.0" }, - "description": "Global logging utility", "devDependencies": { "@phated/eslint-config-iceddev": "^0.2.1", "code": "^1.5.0", @@ -62,44 +28,11 @@ "eslint-plugin-react": "^3.3.2", "lab": "^5.16.0" }, - "directories": {}, - "dist": { - "shasum": "7fe0f199f57ac906cf512feead8f90ee4a284fc5", - "tarball": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz" - }, - "engines": { - "node": ">= 0.10" - }, - "files": [ - "LICENSE", - "index.js" - ], - "gitHead": "2683314c5bb5473e0d492418974b111f366168db", - "homepage": "https://github.com/undertakerjs/glogg#readme", "keywords": [ "global", "log", "logger", "logging", "shared" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "name": "phated", - "email": "blaine@iceddev.com" - } - ], - "name": "glogg", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/undertakerjs/glogg.git" - }, - "scripts": { - "test": "lab -cvL --globals store@sparkles" - }, - "version": "1.0.0" + ] } diff --git a/node_modules/graceful-fs/package.json b/node_modules/graceful-fs/package.json index 915f4ac30..50dde5075 100644 --- a/node_modules/graceful-fs/package.json +++ b/node_modules/graceful-fs/package.json @@ -1,82 +1,21 @@ { - "_args": [ - [ - { - "raw": "graceful-fs@^4.1.2", - "scope": null, - "escapedName": "graceful-fs", - "name": "graceful-fs", - "rawSpec": "^4.1.2", - "spec": ">=4.1.2 <5.0.0", - "type": "range" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/load-json-file" - ] - ], - "_from": "graceful-fs@>=4.1.2 <5.0.0", - "_id": "graceful-fs@4.1.9", - "_inCache": true, - "_location": "/graceful-fs", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/graceful-fs-4.1.9.tgz_1475103672016_0.7011275647673756" - }, - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "_npmVersion": "3.10.7", - "_phantomChildren": {}, - "_requested": { - "raw": "graceful-fs@^4.1.2", - "scope": null, - "escapedName": "graceful-fs", - "name": "graceful-fs", - "rawSpec": "^4.1.2", - "spec": ">=4.1.2 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/archiver-utils", - "/gulp-sourcemaps", - "/load-json-file", - "/path-type", - "/vinyl-fs" - ], - "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.9.tgz", - "_shasum": "baacba37d19d11f9d146d3578bc99958c3787e29", - "_shrinkwrap": null, - "_spec": "graceful-fs@^4.1.2", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/load-json-file", - "bugs": { - "url": "https://github.com/isaacs/node-graceful-fs/issues" - }, - "dependencies": {}, + "name": "graceful-fs", "description": "A drop-in replacement for fs, making various improvements.", - "devDependencies": { - "mkdirp": "^0.5.0", - "rimraf": "^2.2.8", - "tap": "^5.4.2" + "version": "4.1.10", + "repository": { + "type": "git", + "url": "https://github.com/isaacs/node-graceful-fs" + }, + "main": "graceful-fs.js", + "engines": { + "node": ">=0.4.0" }, "directories": { "test": "test" }, - "dist": { - "shasum": "baacba37d19d11f9d146d3578bc99958c3787e29", - "tarball": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.9.tgz" + "scripts": { + "test": "node test.js | tap -" }, - "engines": { - "node": ">=0.4.0" - }, - "files": [ - "fs.js", - "graceful-fs.js", - "legacy-streams.js", - "polyfills.js" - ], - "gitHead": "0798db3711e33de92de5a93979278bb89d629143", - "homepage": "https://github.com/isaacs/node-graceful-fs#readme", "keywords": [ "fs", "module", @@ -94,22 +33,15 @@ "EACCESS" ], "license": "ISC", - "main": "graceful-fs.js", - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "name": "graceful-fs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/node-graceful-fs.git" + "devDependencies": { + "mkdirp": "^0.5.0", + "rimraf": "^2.2.8", + "tap": "^5.4.2" }, - "scripts": { - "test": "node test.js | tap -" - }, - "version": "4.1.9" + "files": [ + "fs.js", + "graceful-fs.js", + "legacy-streams.js", + "polyfills.js" + ] } diff --git a/node_modules/graceful-fs/polyfills.js b/node_modules/graceful-fs/polyfills.js index cf474df73..ab6b32b67 100644 --- a/node_modules/graceful-fs/polyfills.js +++ b/node_modules/graceful-fs/polyfills.js @@ -80,15 +80,27 @@ function patch (fs) { // on Windows, A/V software can lock the directory, causing this // to fail with an EACCES or EPERM if the directory contains newly - // created files. Try again on failure, for up to 1 second. + // created files. Try again on failure, for up to 60 seconds. + + // Set the timeout this long because some Windows Anti-Virus, such as Parity + // bit9, may lock files for up to a minute, causing npm package install + // failures. Also, take care to yield the scheduler. Windows scheduling gives + // CPU to a busy looping process, which can cause the program causing the lock + // contention to be starved of CPU by node, so the contention doesn't resolve. if (process.platform === "win32") { fs.rename = (function (fs$rename) { return function (from, to, cb) { var start = Date.now() + var backoff = 0; fs$rename(from, to, function CB (er) { if (er && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 1000) { - return fs$rename(from, to, CB) + && Date.now() - start < 60000) { + setTimeout(function() { + fs$rename(from, to, CB); + }, backoff) + if (backoff < 100) + backoff += 10; + return; } if (cb) cb(er) }) diff --git a/node_modules/growl/package.json b/node_modules/growl/package.json index 82b63e125..962c7fae2 100644 --- a/node_modules/growl/package.json +++ b/node_modules/growl/package.json @@ -1,86 +1,15 @@ { - "_args": [ - [ - { - "raw": "growl@1.9.2", - "scope": null, - "escapedName": "growl", - "name": "growl", - "rawSpec": "1.9.2", - "spec": "1.9.2", - "type": "version" - }, - "/home/dold/repos/taler/wallet-webex/node_modules/mocha" - ] - ], - "_from": "growl@1.9.2", - "_id": "growl@1.9.2", - "_inCache": true, - "_location": "/growl", - "_nodeVersion": "0.12.7", - "_npmOperationalInternal": { - "host": "packages-6-west.internal.npmjs.com", - "tmp": "tmp/growl-1.9.2.tgz_1456056369289_0.9604133665561676" - }, - "_npmUser": { - "name": "jbnicolai", - "email": "jappelman@xebia.com" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "raw": "growl@1.9.2", - "scope": null, - "escapedName": "growl", - "name": "growl", - "rawSpec": "1.9.2", - "spec": "1.9.2", - "type": "version" - }, - "_requiredBy": [ - "/mocha" - ], - "_resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "_shasum": "0ea7743715db8d8de2c5ede1775e1b45ac85c02f", - "_shrinkwrap": null, - "_spec": "growl@1.9.2", - "_where": "/home/dold/repos/taler/wallet-webex/node_modules/mocha", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "bugs": { - "url": "https://github.com/tj/node-growl/issues" - }, - "dependencies": {}, - "description": "Growl unobtrusive notifications", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "0ea7743715db8d8de2c5ede1775e1b45ac85c02f", - "tarball": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz" - }, - "gitHead": "dc8aae046df328edd32dd69f3cd2d6b114d7018e", - "homepage": "https://github.com/tj/node-growl", - "license": "MIT", - "main": "./lib/growl.js", - "maintainers": [ - { - "name": "tjholowaychuk", - "email": "tj@vision-media.ca" - }, - { - "name": "jbnicolai", - "email": "jappelman@xebia.com" - } - ], "name": "growl", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", + "version": "1.9.2", + "description": "Growl unobtrusive notifications", + "author": "TJ Holowaychuk ", + "maintainers": [ + "Joshua Boy Nicolai Appelman " + ], "repository": { "type": "git", "url": "git://github.com/tj/node-growl.git" }, - "scripts": {}, - "version": "1.9.2" + "main": "./lib/growl.js", + "license": "MIT" } diff --git a/node_modules/vinyl/node_modules/clone-stats/LICENSE.md b/node_modules/gulp-concat/node_modules/clone-stats/LICENSE.md similarity index 100% rename from node_modules/vinyl/node_modules/clone-stats/LICENSE.md rename to node_modules/gulp-concat/node_modules/clone-stats/LICENSE.md diff --git a/node_modules/vinyl/node_modules/clone-stats/README.md b/node_modules/gulp-concat/node_modules/clone-stats/README.md similarity index 100% rename from node_modules/vinyl/node_modules/clone-stats/README.md rename to node_modules/gulp-concat/node_modules/clone-stats/README.md diff --git a/node_modules/vinyl/node_modules/clone-stats/index.js b/node_modules/gulp-concat/node_modules/clone-stats/index.js similarity index 100% rename from node_modules/vinyl/node_modules/clone-stats/index.js rename to node_modules/gulp-concat/node_modules/clone-stats/index.js diff --git a/node_modules/gulp-concat/node_modules/clone-stats/package.json b/node_modules/gulp-concat/node_modules/clone-stats/package.json new file mode 100644 index 000000000..2880625c1 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/clone-stats/package.json @@ -0,0 +1,31 @@ +{ + "name": "clone-stats", + "description": "Safely clone node's fs.Stats instances without losing their class methods", + "version": "0.0.1", + "main": "index.js", + "browser": "index.js", + "dependencies": {}, + "devDependencies": { + "tape": "~2.3.2" + }, + "scripts": { + "test": "node test" + }, + "author": "Hugh Kennedy (http://hughsk.io/)", + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/hughsk/clone-stats" + }, + "bugs": { + "url": "https://github.com/hughsk/clone-stats/issues" + }, + "homepage": "https://github.com/hughsk/clone-stats", + "keywords": [ + "stats", + "fs", + "clone", + "copy", + "prototype" + ] +} diff --git a/node_modules/vinyl/node_modules/clone-stats/test.js b/node_modules/gulp-concat/node_modules/clone-stats/test.js similarity index 100% rename from node_modules/vinyl/node_modules/clone-stats/test.js rename to node_modules/gulp-concat/node_modules/clone-stats/test.js diff --git a/node_modules/gulp-gzip/node_modules/gulp-util/LICENSE b/node_modules/gulp-concat/node_modules/gulp-util/LICENSE similarity index 100% rename from node_modules/gulp-gzip/node_modules/gulp-util/LICENSE rename to node_modules/gulp-concat/node_modules/gulp-util/LICENSE diff --git a/node_modules/gulp-concat/node_modules/gulp-util/README.md b/node_modules/gulp-concat/node_modules/gulp-util/README.md new file mode 100644 index 000000000..8c25a4d62 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/README.md @@ -0,0 +1,146 @@ +# gulp-util [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status][depstat-image]][depstat-url] + +## Information + + + + + + + + + + + + + +
Packagegulp-util
DescriptionUtility functions for gulp plugins
Node Version>= 0.10
+ +## Usage + +```javascript +var gutil = require('gulp-util'); + +gutil.log('stuff happened', 'Really it did', gutil.colors.magenta('123')); +gutil.beep(); + +gutil.replaceExtension('file.coffee', '.js'); // file.js + +var opt = { + name: 'todd', + file: someGulpFile +}; +gutil.template('test <%= name %> <%= file.path %>', opt) // test todd /js/hi.js +``` + +### log(msg...) + +Logs stuff. Already prefixed with [gulp] and all that. If you pass in multiple arguments it will join them by a space. + +The default gulp coloring using gutil.colors.: +``` +values (files, module names, etc.) = cyan +numbers (times, counts, etc) = magenta +``` + +### colors + +Is an instance of [chalk](https://github.com/sindresorhus/chalk). + +### replaceExtension(path, newExtension) + +Replaces a file extension in a path. Returns the new path. + +### isStream(obj) + +Returns true or false if an object is a stream. + +### isBuffer(obj) + +Returns true or false if an object is a Buffer. + +### template(string[, data]) + +This is a lodash.template function wrapper. You must pass in a valid gulp file object so it is available to the user or it will error. You can not configure any of the delimiters. Look at the [lodash docs](http://lodash.com/docs#template) for more info. + +## new File(obj) + +This is just [vinyl](https://github.com/wearefractal/vinyl) + +```javascript +var file = new gutil.File({ + base: path.join(__dirname, './fixtures/'), + cwd: __dirname, + path: path.join(__dirname, './fixtures/test.coffee') +}); +``` + +## noop() + +Returns a stream that does nothing but pass data straight through. + +```javascript +// gulp should be called like this : +// $ gulp --type production +gulp.task('scripts', function() { + gulp.src('src/**/*.js') + .pipe(concat('script.js')) + .pipe(gutil.env.type === 'production' ? uglify() : gutil.noop()) + .pipe(gulp.dest('dist/')); +}); +``` + +## buffer(cb) + +This is similar to es.wait but instead of buffering text into one string it buffers anything into an array (so very useful for file objects). + +Returns a stream that can be piped to. + +The stream will emit one data event after the stream piped to it has ended. The data will be the same array passed to the callback. + +Callback is optional and receives two arguments: error and data + +```javascript +gulp.src('stuff/*.js') + .pipe(gutil.buffer(function(err, files) { + + })); +``` + +## new PluginError(pluginName, message[, options]) + +- pluginName should be the module name of your plugin +- message can be a string or an existing error +- By default the stack will not be shown. Set `options.showStack` to true if you think the stack is important for your error. +- If you pass an error in as the message the stack will be pulled from that, otherwise one will be created. +- Note that if you pass in a custom stack string you need to include the message along with that. +- Error properties will be included in `err.toString()`. Can be omitted by including `{showProperties: false}` in the options. + +These are all acceptable forms of instantiation: + +```javascript +var err = new gutil.PluginError('test', { + message: 'something broke' +}); + +var err = new gutil.PluginError({ + plugin: 'test', + message: 'something broke' +}); + +var err = new gutil.PluginError('test', 'something broke'); + +var err = new gutil.PluginError('test', 'something broke', {showStack: true}); + +var existingError = new Error('OMG'); +var err = new gutil.PluginError('test', existingError, {showStack: true}); +``` + +[npm-url]: https://www.npmjs.com/package/gulp-util +[npm-image]: https://badge.fury.io/js/gulp-util.svg +[travis-url]: https://travis-ci.org/gulpjs/gulp-util +[travis-image]: https://img.shields.io/travis/gulpjs/gulp-util.svg?branch=master +[coveralls-url]: https://coveralls.io/r/gulpjs/gulp-util +[coveralls-image]: https://img.shields.io/coveralls/gulpjs/gulp-util.svg +[depstat-url]: https://david-dm.org/gulpjs/gulp-util +[depstat-image]: https://david-dm.org/gulpjs/gulp-util.svg diff --git a/node_modules/gulp-concat/node_modules/gulp-util/index.js b/node_modules/gulp-concat/node_modules/gulp-util/index.js new file mode 100644 index 000000000..199713c94 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/index.js @@ -0,0 +1,18 @@ +module.exports = { + File: require('vinyl'), + replaceExtension: require('replace-ext'), + colors: require('chalk'), + date: require('dateformat'), + log: require('./lib/log'), + template: require('./lib/template'), + env: require('./lib/env'), + beep: require('beeper'), + noop: require('./lib/noop'), + isStream: require('./lib/isStream'), + isBuffer: require('./lib/isBuffer'), + isNull: require('./lib/isNull'), + linefeed: '\n', + combine: require('./lib/combine'), + buffer: require('./lib/buffer'), + PluginError: require('./lib/PluginError') +}; diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/PluginError.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/PluginError.js new file mode 100644 index 000000000..d60159ab1 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/PluginError.js @@ -0,0 +1,130 @@ +var util = require('util'); +var arrayDiffer = require('array-differ'); +var arrayUniq = require('array-uniq'); +var chalk = require('chalk'); +var objectAssign = require('object-assign'); + +var nonEnumberableProperties = ['name', 'message', 'stack']; +var propertiesNotToDisplay = nonEnumberableProperties.concat(['plugin', 'showStack', 'showProperties', '__safety', '_stack']); + +// wow what a clusterfuck +var parseOptions = function(plugin, message, opt) { + opt = opt || {}; + if (typeof plugin === 'object') { + opt = plugin; + } else { + if (message instanceof Error) { + opt.error = message; + } else if (typeof message === 'object') { + opt = message; + } else { + opt.message = message; + } + opt.plugin = plugin; + } + + return objectAssign({ + showStack: false, + showProperties: true + }, opt); +}; + +function PluginError(plugin, message, opt) { + if (!(this instanceof PluginError)) throw new Error('Call PluginError using new'); + + Error.call(this); + + var options = parseOptions(plugin, message, opt); + var self = this; + + // if options has an error, grab details from it + if (options.error) { + // These properties are not enumerable, so we have to add them explicitly. + arrayUniq(Object.keys(options.error).concat(nonEnumberableProperties)) + .forEach(function(prop) { + self[prop] = options.error[prop]; + }); + } + + var properties = ['name', 'message', 'fileName', 'lineNumber', 'stack', 'showStack', 'showProperties', 'plugin']; + + // options object can override + properties.forEach(function(prop) { + if (prop in options) this[prop] = options[prop]; + }, this); + + // defaults + if (!this.name) this.name = 'Error'; + + if (!this.stack) { + // Error.captureStackTrace appends a stack property which relies on the toString method of the object it is applied to. + // Since we are using our own toString method which controls when to display the stack trace if we don't go through this + // safety object, then we'll get stack overflow problems. + var safety = { + toString: function() { + return this._messageWithDetails() + '\nStack:'; + }.bind(this) + }; + Error.captureStackTrace(safety, arguments.callee || this.constructor); + this.__safety = safety; + } + + if (!this.plugin) throw new Error('Missing plugin name'); + if (!this.message) throw new Error('Missing error message'); +} + +util.inherits(PluginError, Error); + +PluginError.prototype._messageWithDetails = function() { + var messageWithDetails = 'Message:\n ' + this.message; + var details = this._messageDetails(); + + if (details !== '') { + messageWithDetails += '\n' + details; + } + + return messageWithDetails; +}; + +PluginError.prototype._messageDetails = function() { + if (!this.showProperties) { + return ''; + } + + var properties = arrayDiffer(Object.keys(this), propertiesNotToDisplay); + + if (properties.length === 0) { + return ''; + } + + var self = this; + properties = properties.map(function stringifyProperty(prop) { + return ' ' + prop + ': ' + self[prop]; + }); + + return 'Details:\n' + properties.join('\n'); +}; + +PluginError.prototype.toString = function () { + var sig = chalk.red(this.name) + ' in plugin \'' + chalk.cyan(this.plugin) + '\''; + var detailsWithStack = function(stack) { + return this._messageWithDetails() + '\nStack:\n' + stack; + }.bind(this); + + var msg; + if (this.showStack) { + if (this.__safety) { // There is no wrapped error, use the stack captured in the PluginError ctor + msg = this.__safety.stack; + } else if (this._stack) { + msg = detailsWithStack(this._stack); + } else { // Stack from wrapped error + msg = detailsWithStack(this.stack); + } + } else { + msg = this._messageWithDetails(); + } + + return sig + '\n' + msg; +}; + +module.exports = PluginError; diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/buffer.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/buffer.js new file mode 100644 index 000000000..26c940db1 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/buffer.js @@ -0,0 +1,15 @@ +var through = require('through2'); + +module.exports = function(fn) { + var buf = []; + var end = function(cb) { + this.push(buf); + cb(); + if(fn) fn(null, buf); + }; + var push = function(data, enc, cb) { + buf.push(data); + cb(); + }; + return through.obj(push, end); +}; diff --git a/node_modules/gulp-gzip/node_modules/gulp-util/lib/combine.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/combine.js similarity index 100% rename from node_modules/gulp-gzip/node_modules/gulp-util/lib/combine.js rename to node_modules/gulp-concat/node_modules/gulp-util/lib/combine.js diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/env.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/env.js new file mode 100644 index 000000000..ee17c0e30 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/env.js @@ -0,0 +1,4 @@ +var parseArgs = require('minimist'); +var argv = parseArgs(process.argv.slice(2)); + +module.exports = argv; diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/isBuffer.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/isBuffer.js new file mode 100644 index 000000000..7c52f78c9 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/isBuffer.js @@ -0,0 +1,7 @@ +var buf = require('buffer'); +var Buffer = buf.Buffer; + +// could use Buffer.isBuffer but this is the same exact thing... +module.exports = function(o) { + return typeof o === 'object' && o instanceof Buffer; +}; diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/isNull.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/isNull.js new file mode 100644 index 000000000..7f22c63ae --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/isNull.js @@ -0,0 +1,3 @@ +module.exports = function(v) { + return v === null; +}; diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/isStream.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/isStream.js new file mode 100644 index 000000000..6b54e123b --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/isStream.js @@ -0,0 +1,5 @@ +var Stream = require('stream').Stream; + +module.exports = function(o) { + return !!o && o instanceof Stream; +}; diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/log.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/log.js new file mode 100644 index 000000000..bb843beef --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/log.js @@ -0,0 +1,14 @@ +var hasGulplog = require('has-gulplog'); + +module.exports = function(){ + if(hasGulplog()){ + // specifically deferring loading here to keep from registering it globally + var gulplog = require('gulplog'); + gulplog.info.apply(gulplog, arguments); + } else { + // specifically defering loading because it might not be used + var fancylog = require('fancy-log'); + fancylog.apply(null, arguments); + } + return this; +}; diff --git a/node_modules/gulp-gzip/node_modules/gulp-util/lib/noop.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/noop.js similarity index 100% rename from node_modules/gulp-gzip/node_modules/gulp-util/lib/noop.js rename to node_modules/gulp-concat/node_modules/gulp-util/lib/noop.js diff --git a/node_modules/gulp-concat/node_modules/gulp-util/lib/template.js b/node_modules/gulp-concat/node_modules/gulp-util/lib/template.js new file mode 100644 index 000000000..eef3bb376 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/lib/template.js @@ -0,0 +1,23 @@ +var template = require('lodash.template'); +var reEscape = require('lodash._reescape'); +var reEvaluate = require('lodash._reevaluate'); +var reInterpolate = require('lodash._reinterpolate'); + +var forcedSettings = { + escape: reEscape, + evaluate: reEvaluate, + interpolate: reInterpolate +}; + +module.exports = function(tmpl, data) { + var fn = template(tmpl, forcedSettings); + + var wrapped = function(o) { + if (typeof o === 'undefined' || typeof o.file === 'undefined') { + throw new Error('Failed to provide the current file as "file" to the template'); + } + return fn(o); + }; + + return (data ? wrapped(data) : wrapped); +}; diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/.bin/dateformat b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/.bin/dateformat new file mode 120000 index 000000000..2a6f7e6d6 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/.bin/dateformat @@ -0,0 +1 @@ +../../../../../dateformat/bin/cli.js \ No newline at end of file diff --git a/node_modules/archiver-utils/node_modules/isarray/.npmignore b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/.npmignore similarity index 100% rename from node_modules/archiver-utils/node_modules/isarray/.npmignore rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/.npmignore diff --git a/node_modules/archiver-utils/node_modules/isarray/.travis.yml b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/.travis.yml similarity index 100% rename from node_modules/archiver-utils/node_modules/isarray/.travis.yml rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/.travis.yml diff --git a/node_modules/archiver-utils/node_modules/isarray/Makefile b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/Makefile similarity index 100% rename from node_modules/archiver-utils/node_modules/isarray/Makefile rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/Makefile diff --git a/node_modules/archiver-utils/node_modules/isarray/README.md b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/README.md similarity index 100% rename from node_modules/archiver-utils/node_modules/isarray/README.md rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/README.md diff --git a/node_modules/bl/node_modules/isarray/component.json b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/component.json similarity index 100% rename from node_modules/bl/node_modules/isarray/component.json rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/component.json diff --git a/node_modules/archiver-utils/node_modules/isarray/index.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/index.js similarity index 100% rename from node_modules/archiver-utils/node_modules/isarray/index.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/index.js diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/package.json b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/package.json new file mode 100644 index 000000000..1a4317a9c --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/package.json @@ -0,0 +1,45 @@ +{ + "name": "isarray", + "description": "Array#isArray for older browsers", + "version": "1.0.0", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/isarray.git" + }, + "homepage": "https://github.com/juliangruber/isarray", + "main": "index.js", + "dependencies": {}, + "devDependencies": { + "tape": "~2.13.4" + }, + "keywords": [ + "browser", + "isarray", + "array" + ], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test.js", + "browsers": [ + "ie/8..latest", + "firefox/17..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "scripts": { + "test": "tape test.js" + } +} diff --git a/node_modules/archiver-utils/node_modules/isarray/test.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/test.js similarity index 100% rename from node_modules/archiver-utils/node_modules/isarray/test.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/isarray/test.js diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.npmignore b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.npmignore new file mode 100644 index 000000000..38344f87a --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.npmignore @@ -0,0 +1,5 @@ +build/ +test/ +examples/ +fs.js +zlib.js \ No newline at end of file diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.travis.yml b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.travis.yml new file mode 100644 index 000000000..1b8211846 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.travis.yml @@ -0,0 +1,52 @@ +sudo: false +language: node_js +before_install: + - npm install -g npm@2 + - npm install -g npm +notifications: + email: false +matrix: + fast_finish: true + allow_failures: + - env: TASK=browser BROWSER_NAME=ipad BROWSER_VERSION="6.0..latest" + - env: TASK=browser BROWSER_NAME=iphone BROWSER_VERSION="6.0..latest" + include: + - node_js: '0.8' + env: TASK=test + - node_js: '0.10' + env: TASK=test + - node_js: '0.11' + env: TASK=test + - node_js: '0.12' + env: TASK=test + - node_js: 1 + env: TASK=test + - node_js: 2 + env: TASK=test + - node_js: 3 + env: TASK=test + - node_js: 4 + env: TASK=test + - node_js: 5 + env: TASK=test + - node_js: 5 + env: TASK=browser BROWSER_NAME=android BROWSER_VERSION="4.0..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=ie BROWSER_VERSION="9..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=opera BROWSER_VERSION="11..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=chrome BROWSER_VERSION="-3..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=firefox BROWSER_VERSION="-3..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=ipad BROWSER_VERSION="6.0..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=iphone BROWSER_VERSION="6.0..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=safari BROWSER_VERSION="5..latest" +script: "npm run $TASK" +env: + global: + - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= + - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml new file mode 100644 index 000000000..96d9cfbd3 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml @@ -0,0 +1 @@ +ui: tape diff --git a/node_modules/archiver/node_modules/readable-stream/LICENSE b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/LICENSE similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/LICENSE rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/LICENSE diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/README.md b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/README.md new file mode 100644 index 000000000..86b95a3bf --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/README.md @@ -0,0 +1,36 @@ +# readable-stream + +***Node-core v5.8.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) + + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) + + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) + +```bash +npm install --save readable-stream +``` + +***Node-core streams for userland*** + +This package is a mirror of the Streams2 and Streams3 implementations in +Node-core, including [documentation](doc/stream.markdown). + +If you want to guarantee a stable streams base, regardless of what version of +Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). + +As of version 2.0.0 **readable-stream** uses semantic versioning. + +# Streams WG Team Members + +* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> + - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B +* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> + - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 +* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> + - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D +* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> +* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> +* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown new file mode 100644 index 000000000..0bc3819e6 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown @@ -0,0 +1,1760 @@ +# Stream + + Stability: 2 - Stable + +A stream is an abstract interface implemented by various objects in +Node.js. For example a [request to an HTTP server][http-incoming-message] is a +stream, as is [`process.stdout`][]. Streams are readable, writable, or both. All +streams are instances of [`EventEmitter`][]. + +You can load the Stream base classes by doing `require('stream')`. +There are base classes provided for [Readable][] streams, [Writable][] +streams, [Duplex][] streams, and [Transform][] streams. + +This document is split up into 3 sections: + +1. The first section explains the parts of the API that you need to be + aware of to use streams in your programs. +2. The second section explains the parts of the API that you need to + use if you implement your own custom streams yourself. The API is designed to + make this easy for you to do. +3. The third section goes into more depth about how streams work, + including some of the internal mechanisms and functions that you + should probably not modify unless you definitely know what you are + doing. + + +## API for Stream Consumers + + + +Streams can be either [Readable][], [Writable][], or both ([Duplex][]). + +All streams are EventEmitters, but they also have other custom methods +and properties depending on whether they are Readable, Writable, or +Duplex. + +If a stream is both Readable and Writable, then it implements all of +the methods and events. So, a [Duplex][] or [Transform][] stream is +fully described by this API, though their implementation may be +somewhat different. + +It is not necessary to implement Stream interfaces in order to consume +streams in your programs. If you **are** implementing streaming +interfaces in your own program, please also refer to +[API for Stream Implementors][]. + +Almost all Node.js programs, no matter how simple, use Streams in some +way. Here is an example of using Streams in an Node.js program: + +```js +const http = require('http'); + +var server = http.createServer( (req, res) => { + // req is an http.IncomingMessage, which is a Readable Stream + // res is an http.ServerResponse, which is a Writable Stream + + var body = ''; + // we want to get the data as utf8 strings + // If you don't set an encoding, then you'll get Buffer objects + req.setEncoding('utf8'); + + // Readable streams emit 'data' events once a listener is added + req.on('data', (chunk) => { + body += chunk; + }); + + // the end event tells you that you have entire body + req.on('end', () => { + try { + var data = JSON.parse(body); + } catch (er) { + // uh oh! bad json! + res.statusCode = 400; + return res.end(`error: ${er.message}`); + } + + // write back something interesting to the user: + res.write(typeof data); + res.end(); + }); +}); + +server.listen(1337); + +// $ curl localhost:1337 -d '{}' +// object +// $ curl localhost:1337 -d '"foo"' +// string +// $ curl localhost:1337 -d 'not json' +// error: Unexpected token o +``` + +### Class: stream.Duplex + +Duplex streams are streams that implement both the [Readable][] and +[Writable][] interfaces. + +Examples of Duplex streams include: + +* [TCP sockets][] +* [zlib streams][zlib] +* [crypto streams][crypto] + +### Class: stream.Readable + + + +The Readable stream interface is the abstraction for a *source* of +data that you are reading from. In other words, data comes *out* of a +Readable stream. + +A Readable stream will not start emitting data until you indicate that +you are ready to receive it. + +Readable streams have two "modes": a **flowing mode** and a **paused +mode**. When in flowing mode, data is read from the underlying system +and provided to your program as fast as possible. In paused mode, you +must explicitly call [`stream.read()`][stream-read] to get chunks of data out. +Streams start out in paused mode. + +**Note**: If no data event handlers are attached, and there are no +[`stream.pipe()`][] destinations, and the stream is switched into flowing +mode, then data will be lost. + +You can switch to flowing mode by doing any of the following: + +* Adding a [`'data'`][] event handler to listen for data. +* Calling the [`stream.resume()`][stream-resume] method to explicitly open the + flow. +* Calling the [`stream.pipe()`][] method to send the data to a [Writable][]. + +You can switch back to paused mode by doing either of the following: + +* If there are no pipe destinations, by calling the + [`stream.pause()`][stream-pause] method. +* If there are pipe destinations, by removing any [`'data'`][] event + handlers, and removing all pipe destinations by calling the + [`stream.unpipe()`][] method. + +Note that, for backwards compatibility reasons, removing [`'data'`][] +event handlers will **not** automatically pause the stream. Also, if +there are piped destinations, then calling [`stream.pause()`][stream-pause] will +not guarantee that the stream will *remain* paused once those +destinations drain and ask for more data. + +Examples of readable streams include: + +* [HTTP responses, on the client][http-incoming-message] +* [HTTP requests, on the server][http-incoming-message] +* [fs read streams][] +* [zlib streams][zlib] +* [crypto streams][crypto] +* [TCP sockets][] +* [child process stdout and stderr][] +* [`process.stdin`][] + +#### Event: 'close' + +Emitted when the stream and any of its underlying resources (a file +descriptor, for example) have been closed. The event indicates that +no more events will be emitted, and no further computation will occur. + +Not all streams will emit the `'close'` event. + +#### Event: 'data' + +* `chunk` {Buffer|String} The chunk of data. + +Attaching a `'data'` event listener to a stream that has not been +explicitly paused will switch the stream into flowing mode. Data will +then be passed as soon as it is available. + +If you just want to get all the data out of the stream as fast as +possible, this is the best way to do so. + +```js +var readable = getReadableStreamSomehow(); +readable.on('data', (chunk) => { + console.log('got %d bytes of data', chunk.length); +}); +``` + +#### Event: 'end' + +This event fires when there will be no more data to read. + +Note that the `'end'` event **will not fire** unless the data is +completely consumed. This can be done by switching into flowing mode, +or by calling [`stream.read()`][stream-read] repeatedly until you get to the +end. + +```js +var readable = getReadableStreamSomehow(); +readable.on('data', (chunk) => { + console.log('got %d bytes of data', chunk.length); +}); +readable.on('end', () => { + console.log('there will be no more data.'); +}); +``` + +#### Event: 'error' + +* {Error Object} + +Emitted if there was an error receiving data. + +#### Event: 'readable' + +When a chunk of data can be read from the stream, it will emit a +`'readable'` event. + +In some cases, listening for a `'readable'` event will cause some data +to be read into the internal buffer from the underlying system, if it +hadn't already. + +```javascript +var readable = getReadableStreamSomehow(); +readable.on('readable', () => { + // there is some data to read now +}); +``` + +Once the internal buffer is drained, a `'readable'` event will fire +again when more data is available. + +The `'readable'` event is not emitted in the "flowing" mode with the +sole exception of the last one, on end-of-stream. + +The `'readable'` event indicates that the stream has new information: +either new data is available or the end of the stream has been reached. +In the former case, [`stream.read()`][stream-read] will return that data. In the +latter case, [`stream.read()`][stream-read] will return null. For instance, in +the following example, `foo.txt` is an empty file: + +```js +const fs = require('fs'); +var rr = fs.createReadStream('foo.txt'); +rr.on('readable', () => { + console.log('readable:', rr.read()); +}); +rr.on('end', () => { + console.log('end'); +}); +``` + +The output of running this script is: + +``` +$ node test.js +readable: null +end +``` + +#### readable.isPaused() + +* Return: {Boolean} + +This method returns whether or not the `readable` has been **explicitly** +paused by client code (using [`stream.pause()`][stream-pause] without a +corresponding [`stream.resume()`][stream-resume]). + +```js +var readable = new stream.Readable + +readable.isPaused() // === false +readable.pause() +readable.isPaused() // === true +readable.resume() +readable.isPaused() // === false +``` + +#### readable.pause() + +* Return: `this` + +This method will cause a stream in flowing mode to stop emitting +[`'data'`][] events, switching out of flowing mode. Any data that becomes +available will remain in the internal buffer. + +```js +var readable = getReadableStreamSomehow(); +readable.on('data', (chunk) => { + console.log('got %d bytes of data', chunk.length); + readable.pause(); + console.log('there will be no more data for 1 second'); + setTimeout(() => { + console.log('now data will start flowing again'); + readable.resume(); + }, 1000); +}); +``` + +#### readable.pipe(destination[, options]) + +* `destination` {stream.Writable} The destination for writing data +* `options` {Object} Pipe options + * `end` {Boolean} End the writer when the reader ends. Default = `true` + +This method pulls all the data out of a readable stream, and writes it +to the supplied destination, automatically managing the flow so that +the destination is not overwhelmed by a fast readable stream. + +Multiple destinations can be piped to safely. + +```js +var readable = getReadableStreamSomehow(); +var writable = fs.createWriteStream('file.txt'); +// All the data from readable goes into 'file.txt' +readable.pipe(writable); +``` + +This function returns the destination stream, so you can set up pipe +chains like so: + +```js +var r = fs.createReadStream('file.txt'); +var z = zlib.createGzip(); +var w = fs.createWriteStream('file.txt.gz'); +r.pipe(z).pipe(w); +``` + +For example, emulating the Unix `cat` command: + +```js +process.stdin.pipe(process.stdout); +``` + +By default [`stream.end()`][stream-end] is called on the destination when the +source stream emits [`'end'`][], so that `destination` is no longer writable. +Pass `{ end: false }` as `options` to keep the destination stream open. + +This keeps `writer` open so that "Goodbye" can be written at the +end. + +```js +reader.pipe(writer, { end: false }); +reader.on('end', () => { + writer.end('Goodbye\n'); +}); +``` + +Note that [`process.stderr`][] and [`process.stdout`][] are never closed until +the process exits, regardless of the specified options. + +#### readable.read([size]) + +* `size` {Number} Optional argument to specify how much data to read. +* Return {String|Buffer|Null} + +The `read()` method pulls some data out of the internal buffer and +returns it. If there is no data available, then it will return +`null`. + +If you pass in a `size` argument, then it will return that many +bytes. If `size` bytes are not available, then it will return `null`, +unless we've ended, in which case it will return the data remaining +in the buffer. + +If you do not specify a `size` argument, then it will return all the +data in the internal buffer. + +This method should only be called in paused mode. In flowing mode, +this method is called automatically until the internal buffer is +drained. + +```js +var readable = getReadableStreamSomehow(); +readable.on('readable', () => { + var chunk; + while (null !== (chunk = readable.read())) { + console.log('got %d bytes of data', chunk.length); + } +}); +``` + +If this method returns a data chunk, then it will also trigger the +emission of a [`'data'`][] event. + +Note that calling [`stream.read([size])`][stream-read] after the [`'end'`][] +event has been triggered will return `null`. No runtime error will be raised. + +#### readable.resume() + +* Return: `this` + +This method will cause the readable stream to resume emitting [`'data'`][] +events. + +This method will switch the stream into flowing mode. If you do *not* +want to consume the data from a stream, but you *do* want to get to +its [`'end'`][] event, you can call [`stream.resume()`][stream-resume] to open +the flow of data. + +```js +var readable = getReadableStreamSomehow(); +readable.resume(); +readable.on('end', () => { + console.log('got to the end, but did not read anything'); +}); +``` + +#### readable.setEncoding(encoding) + +* `encoding` {String} The encoding to use. +* Return: `this` + +Call this function to cause the stream to return strings of the specified +encoding instead of Buffer objects. For example, if you do +`readable.setEncoding('utf8')`, then the output data will be interpreted as +UTF-8 data, and returned as strings. If you do `readable.setEncoding('hex')`, +then the data will be encoded in hexadecimal string format. + +This properly handles multi-byte characters that would otherwise be +potentially mangled if you simply pulled the Buffers directly and +called [`buf.toString(encoding)`][] on them. If you want to read the data +as strings, always use this method. + +Also you can disable any encoding at all with `readable.setEncoding(null)`. +This approach is very useful if you deal with binary data or with large +multi-byte strings spread out over multiple chunks. + +```js +var readable = getReadableStreamSomehow(); +readable.setEncoding('utf8'); +readable.on('data', (chunk) => { + assert.equal(typeof chunk, 'string'); + console.log('got %d characters of string data', chunk.length); +}); +``` + +#### readable.unpipe([destination]) + +* `destination` {stream.Writable} Optional specific stream to unpipe + +This method will remove the hooks set up for a previous [`stream.pipe()`][] +call. + +If the destination is not specified, then all pipes are removed. + +If the destination is specified, but no pipe is set up for it, then +this is a no-op. + +```js +var readable = getReadableStreamSomehow(); +var writable = fs.createWriteStream('file.txt'); +// All the data from readable goes into 'file.txt', +// but only for the first second +readable.pipe(writable); +setTimeout(() => { + console.log('stop writing to file.txt'); + readable.unpipe(writable); + console.log('manually close the file stream'); + writable.end(); +}, 1000); +``` + +#### readable.unshift(chunk) + +* `chunk` {Buffer|String} Chunk of data to unshift onto the read queue + +This is useful in certain cases where a stream is being consumed by a +parser, which needs to "un-consume" some data that it has +optimistically pulled out of the source, so that the stream can be +passed on to some other party. + +Note that `stream.unshift(chunk)` cannot be called after the [`'end'`][] event +has been triggered; a runtime error will be raised. + +If you find that you must often call `stream.unshift(chunk)` in your +programs, consider implementing a [Transform][] stream instead. (See [API +for Stream Implementors][].) + +```js +// Pull off a header delimited by \n\n +// use unshift() if we get too much +// Call the callback with (error, header, stream) +const StringDecoder = require('string_decoder').StringDecoder; +function parseHeader(stream, callback) { + stream.on('error', callback); + stream.on('readable', onReadable); + var decoder = new StringDecoder('utf8'); + var header = ''; + function onReadable() { + var chunk; + while (null !== (chunk = stream.read())) { + var str = decoder.write(chunk); + if (str.match(/\n\n/)) { + // found the header boundary + var split = str.split(/\n\n/); + header += split.shift(); + var remaining = split.join('\n\n'); + var buf = new Buffer(remaining, 'utf8'); + if (buf.length) + stream.unshift(buf); + stream.removeListener('error', callback); + stream.removeListener('readable', onReadable); + // now the body of the message can be read from the stream. + callback(null, header, stream); + } else { + // still reading the header. + header += str; + } + } + } +} +``` + +Note that, unlike [`stream.push(chunk)`][stream-push], `stream.unshift(chunk)` +will not end the reading process by resetting the internal reading state of the +stream. This can cause unexpected results if `unshift()` is called during a +read (i.e. from within a [`stream._read()`][stream-_read] implementation on a +custom stream). Following the call to `unshift()` with an immediate +[`stream.push('')`][stream-push] will reset the reading state appropriately, +however it is best to simply avoid calling `unshift()` while in the process of +performing a read. + +#### readable.wrap(stream) + +* `stream` {Stream} An "old style" readable stream + +Versions of Node.js prior to v0.10 had streams that did not implement the +entire Streams API as it is today. (See [Compatibility][] for +more information.) + +If you are using an older Node.js library that emits [`'data'`][] events and +has a [`stream.pause()`][stream-pause] method that is advisory only, then you +can use the `wrap()` method to create a [Readable][] stream that uses the old +stream as its data source. + +You will very rarely ever need to call this function, but it exists +as a convenience for interacting with old Node.js programs and libraries. + +For example: + +```js +const OldReader = require('./old-api-module.js').OldReader; +const Readable = require('stream').Readable; +const oreader = new OldReader; +const myReader = new Readable().wrap(oreader); + +myReader.on('readable', () => { + myReader.read(); // etc. +}); +``` + +### Class: stream.Transform + +Transform streams are [Duplex][] streams where the output is in some way +computed from the input. They implement both the [Readable][] and +[Writable][] interfaces. + +Examples of Transform streams include: + +* [zlib streams][zlib] +* [crypto streams][crypto] + +### Class: stream.Writable + + + +The Writable stream interface is an abstraction for a *destination* +that you are writing data *to*. + +Examples of writable streams include: + +* [HTTP requests, on the client][] +* [HTTP responses, on the server][] +* [fs write streams][] +* [zlib streams][zlib] +* [crypto streams][crypto] +* [TCP sockets][] +* [child process stdin][] +* [`process.stdout`][], [`process.stderr`][] + +#### Event: 'drain' + +If a [`stream.write(chunk)`][stream-write] call returns `false`, then the +`'drain'` event will indicate when it is appropriate to begin writing more data +to the stream. + +```js +// Write the data to the supplied writable stream one million times. +// Be attentive to back-pressure. +function writeOneMillionTimes(writer, data, encoding, callback) { + var i = 1000000; + write(); + function write() { + var ok = true; + do { + i -= 1; + if (i === 0) { + // last time! + writer.write(data, encoding, callback); + } else { + // see if we should continue, or wait + // don't pass the callback, because we're not done yet. + ok = writer.write(data, encoding); + } + } while (i > 0 && ok); + if (i > 0) { + // had to stop early! + // write some more once it drains + writer.once('drain', write); + } + } +} +``` + +#### Event: 'error' + +* {Error} + +Emitted if there was an error when writing or piping data. + +#### Event: 'finish' + +When the [`stream.end()`][stream-end] method has been called, and all data has +been flushed to the underlying system, this event is emitted. + +```javascript +var writer = getWritableStreamSomehow(); +for (var i = 0; i < 100; i ++) { + writer.write('hello, #${i}!\n'); +} +writer.end('this is the end\n'); +writer.on('finish', () => { + console.error('all writes are now complete.'); +}); +``` + +#### Event: 'pipe' + +* `src` {stream.Readable} source stream that is piping to this writable + +This is emitted whenever the [`stream.pipe()`][] method is called on a readable +stream, adding this writable to its set of destinations. + +```js +var writer = getWritableStreamSomehow(); +var reader = getReadableStreamSomehow(); +writer.on('pipe', (src) => { + console.error('something is piping into the writer'); + assert.equal(src, reader); +}); +reader.pipe(writer); +``` + +#### Event: 'unpipe' + +* `src` {[Readable][] Stream} The source stream that + [unpiped][`stream.unpipe()`] this writable + +This is emitted whenever the [`stream.unpipe()`][] method is called on a +readable stream, removing this writable from its set of destinations. + +```js +var writer = getWritableStreamSomehow(); +var reader = getReadableStreamSomehow(); +writer.on('unpipe', (src) => { + console.error('something has stopped piping into the writer'); + assert.equal(src, reader); +}); +reader.pipe(writer); +reader.unpipe(writer); +``` + +#### writable.cork() + +Forces buffering of all writes. + +Buffered data will be flushed either at [`stream.uncork()`][] or at +[`stream.end()`][stream-end] call. + +#### writable.end([chunk][, encoding][, callback]) + +* `chunk` {String|Buffer} Optional data to write +* `encoding` {String} The encoding, if `chunk` is a String +* `callback` {Function} Optional callback for when the stream is finished + +Call this method when no more data will be written to the stream. If supplied, +the callback is attached as a listener on the [`'finish'`][] event. + +Calling [`stream.write()`][stream-write] after calling +[`stream.end()`][stream-end] will raise an error. + +```js +// write 'hello, ' and then end with 'world!' +var file = fs.createWriteStream('example.txt'); +file.write('hello, '); +file.end('world!'); +// writing more now is not allowed! +``` + +#### writable.setDefaultEncoding(encoding) + +* `encoding` {String} The new default encoding + +Sets the default encoding for a writable stream. + +#### writable.uncork() + +Flush all data, buffered since [`stream.cork()`][] call. + +#### writable.write(chunk[, encoding][, callback]) + +* `chunk` {String|Buffer} The data to write +* `encoding` {String} The encoding, if `chunk` is a String +* `callback` {Function} Callback for when this chunk of data is flushed +* Returns: {Boolean} `true` if the data was handled completely. + +This method writes some data to the underlying system, and calls the +supplied callback once the data has been fully handled. + +The return value indicates if you should continue writing right now. +If the data had to be buffered internally, then it will return +`false`. Otherwise, it will return `true`. + +This return value is strictly advisory. You MAY continue to write, +even if it returns `false`. However, writes will be buffered in +memory, so it is best not to do this excessively. Instead, wait for +the [`'drain'`][] event before writing more data. + + +## API for Stream Implementors + + + +To implement any sort of stream, the pattern is the same: + +1. Extend the appropriate parent class in your own subclass. (The + [`util.inherits()`][] method is particularly helpful for this.) +2. Call the appropriate parent class constructor in your constructor, + to be sure that the internal mechanisms are set up properly. +3. Implement one or more specific methods, as detailed below. + +The class to extend and the method(s) to implement depend on the sort +of stream class you are writing: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Use-case

+
+

Class

+
+

Method(s) to implement

+
+

Reading only

+
+

[Readable](#stream_class_stream_readable_1)

+
+

[_read][stream-_read]

+
+

Writing only

+
+

[Writable](#stream_class_stream_writable_1)

+
+

[_write][stream-_write], [_writev][stream-_writev]

+
+

Reading and writing

+
+

[Duplex](#stream_class_stream_duplex_1)

+
+

[_read][stream-_read], [_write][stream-_write], [_writev][stream-_writev]

+
+

Operate on written data, then read the result

+
+

[Transform](#stream_class_stream_transform_1)

+
+

[_transform][stream-_transform], [_flush][stream-_flush]

+
+ +In your implementation code, it is very important to never call the methods +described in [API for Stream Consumers][]. Otherwise, you can potentially cause +adverse side effects in programs that consume your streaming interfaces. + +### Class: stream.Duplex + + + +A "duplex" stream is one that is both Readable and Writable, such as a TCP +socket connection. + +Note that `stream.Duplex` is an abstract class designed to be extended +with an underlying implementation of the [`stream._read(size)`][stream-_read] +and [`stream._write(chunk, encoding, callback)`][stream-_write] methods as you +would with a Readable or Writable stream class. + +Since JavaScript doesn't have multiple prototypal inheritance, this class +prototypally inherits from Readable, and then parasitically from Writable. It is +thus up to the user to implement both the low-level +[`stream._read(n)`][stream-_read] method as well as the low-level +[`stream._write(chunk, encoding, callback)`][stream-_write] method on extension +duplex classes. + +#### new stream.Duplex(options) + +* `options` {Object} Passed to both Writable and Readable + constructors. Also has the following fields: + * `allowHalfOpen` {Boolean} Default = `true`. If set to `false`, then + the stream will automatically end the readable side when the + writable side ends and vice versa. + * `readableObjectMode` {Boolean} Default = `false`. Sets `objectMode` + for readable side of the stream. Has no effect if `objectMode` + is `true`. + * `writableObjectMode` {Boolean} Default = `false`. Sets `objectMode` + for writable side of the stream. Has no effect if `objectMode` + is `true`. + +In classes that extend the Duplex class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +### Class: stream.PassThrough + +This is a trivial implementation of a [Transform][] stream that simply +passes the input bytes across to the output. Its purpose is mainly +for examples and testing, but there are occasionally use cases where +it can come in handy as a building block for novel sorts of streams. + +### Class: stream.Readable + + + +`stream.Readable` is an abstract class designed to be extended with an +underlying implementation of the [`stream._read(size)`][stream-_read] method. + +Please see [API for Stream Consumers][] for how to consume +streams in your programs. What follows is an explanation of how to +implement Readable streams in your programs. + +#### new stream.Readable([options]) + +* `options` {Object} + * `highWaterMark` {Number} The maximum number of bytes to store in + the internal buffer before ceasing to read from the underlying + resource. Default = `16384` (16kb), or `16` for `objectMode` streams + * `encoding` {String} If specified, then buffers will be decoded to + strings using the specified encoding. Default = `null` + * `objectMode` {Boolean} Whether this stream should behave + as a stream of objects. Meaning that [`stream.read(n)`][stream-read] returns + a single value instead of a Buffer of size n. Default = `false` + * `read` {Function} Implementation for the [`stream._read()`][stream-_read] + method. + +In classes that extend the Readable class, make sure to call the +Readable constructor so that the buffering settings can be properly +initialized. + +#### readable.\_read(size) + +* `size` {Number} Number of bytes to read asynchronously + +Note: **Implement this method, but do NOT call it directly.** + +This method is prefixed with an underscore because it is internal to the +class that defines it and should only be called by the internal Readable +class methods. All Readable stream implementations must provide a \_read +method to fetch data from the underlying resource. + +When `_read()` is called, if data is available from the resource, the `_read()` +implementation should start pushing that data into the read queue by calling +[`this.push(dataChunk)`][stream-push]. `_read()` should continue reading from +the resource and pushing data until push returns `false`, at which point it +should stop reading from the resource. Only when `_read()` is called again after +it has stopped should it start reading more data from the resource and pushing +that data onto the queue. + +Note: once the `_read()` method is called, it will not be called again until +the [`stream.push()`][stream-push] method is called. + +The `size` argument is advisory. Implementations where a "read" is a +single call that returns data can use this to know how much data to +fetch. Implementations where that is not relevant, such as TCP or +TLS, may ignore this argument, and simply provide data whenever it +becomes available. There is no need, for example to "wait" until +`size` bytes are available before calling [`stream.push(chunk)`][stream-push]. + +#### readable.push(chunk[, encoding]) + + +* `chunk` {Buffer|Null|String} Chunk of data to push into the read queue +* `encoding` {String} Encoding of String chunks. Must be a valid + Buffer encoding, such as `'utf8'` or `'ascii'` +* return {Boolean} Whether or not more pushes should be performed + +Note: **This method should be called by Readable implementors, NOT +by consumers of Readable streams.** + +If a value other than null is passed, The `push()` method adds a chunk of data +into the queue for subsequent stream processors to consume. If `null` is +passed, it signals the end of the stream (EOF), after which no more data +can be written. + +The data added with `push()` can be pulled out by calling the +[`stream.read()`][stream-read] method when the [`'readable'`][] event fires. + +This API is designed to be as flexible as possible. For example, +you may be wrapping a lower-level source which has some sort of +pause/resume mechanism, and a data callback. In those cases, you +could wrap the low-level source object by doing something like this: + +```js +// source is an object with readStop() and readStart() methods, +// and an `ondata` member that gets called when it has data, and +// an `onend` member that gets called when the data is over. + +util.inherits(SourceWrapper, Readable); + +function SourceWrapper(options) { + Readable.call(this, options); + + this._source = getLowlevelSourceObject(); + + // Every time there's data, we push it into the internal buffer. + this._source.ondata = (chunk) => { + // if push() returns false, then we need to stop reading from source + if (!this.push(chunk)) + this._source.readStop(); + }; + + // When the source ends, we push the EOF-signaling `null` chunk + this._source.onend = () => { + this.push(null); + }; +} + +// _read will be called when the stream wants to pull more data in +// the advisory size argument is ignored in this case. +SourceWrapper.prototype._read = function(size) { + this._source.readStart(); +}; +``` + +#### Example: A Counting Stream + + + +This is a basic example of a Readable stream. It emits the numerals +from 1 to 1,000,000 in ascending order, and then ends. + +```js +const Readable = require('stream').Readable; +const util = require('util'); +util.inherits(Counter, Readable); + +function Counter(opt) { + Readable.call(this, opt); + this._max = 1000000; + this._index = 1; +} + +Counter.prototype._read = function() { + var i = this._index++; + if (i > this._max) + this.push(null); + else { + var str = '' + i; + var buf = new Buffer(str, 'ascii'); + this.push(buf); + } +}; +``` + +#### Example: SimpleProtocol v1 (Sub-optimal) + +This is similar to the `parseHeader` function described +[here](#stream_readable_unshift_chunk), but implemented as a custom stream. +Also, note that this implementation does not convert the incoming data to a +string. + +However, this would be better implemented as a [Transform][] stream. See +[SimpleProtocol v2][] for a better implementation. + +```js +// A parser for a simple data protocol. +// The "header" is a JSON object, followed by 2 \n characters, and +// then a message body. +// +// NOTE: This can be done more simply as a Transform stream! +// Using Readable directly for this is sub-optimal. See the +// alternative example below under the Transform section. + +const Readable = require('stream').Readable; +const util = require('util'); + +util.inherits(SimpleProtocol, Readable); + +function SimpleProtocol(source, options) { + if (!(this instanceof SimpleProtocol)) + return new SimpleProtocol(source, options); + + Readable.call(this, options); + this._inBody = false; + this._sawFirstCr = false; + + // source is a readable stream, such as a socket or file + this._source = source; + + var self = this; + source.on('end', () => { + self.push(null); + }); + + // give it a kick whenever the source is readable + // read(0) will not consume any bytes + source.on('readable', () => { + self.read(0); + }); + + this._rawHeader = []; + this.header = null; +} + +SimpleProtocol.prototype._read = function(n) { + if (!this._inBody) { + var chunk = this._source.read(); + + // if the source doesn't have data, we don't have data yet. + if (chunk === null) + return this.push(''); + + // check if the chunk has a \n\n + var split = -1; + for (var i = 0; i < chunk.length; i++) { + if (chunk[i] === 10) { // '\n' + if (this._sawFirstCr) { + split = i; + break; + } else { + this._sawFirstCr = true; + } + } else { + this._sawFirstCr = false; + } + } + + if (split === -1) { + // still waiting for the \n\n + // stash the chunk, and try again. + this._rawHeader.push(chunk); + this.push(''); + } else { + this._inBody = true; + var h = chunk.slice(0, split); + this._rawHeader.push(h); + var header = Buffer.concat(this._rawHeader).toString(); + try { + this.header = JSON.parse(header); + } catch (er) { + this.emit('error', new Error('invalid simple protocol data')); + return; + } + // now, because we got some extra data, unshift the rest + // back into the read queue so that our consumer will see it. + var b = chunk.slice(split); + this.unshift(b); + // calling unshift by itself does not reset the reading state + // of the stream; since we're inside _read, doing an additional + // push('') will reset the state appropriately. + this.push(''); + + // and let them know that we are done parsing the header. + this.emit('header', this.header); + } + } else { + // from there on, just provide the data to our consumer. + // careful not to push(null), since that would indicate EOF. + var chunk = this._source.read(); + if (chunk) this.push(chunk); + } +}; + +// Usage: +// var parser = new SimpleProtocol(source); +// Now parser is a readable stream that will emit 'header' +// with the parsed header data. +``` + +### Class: stream.Transform + +A "transform" stream is a duplex stream where the output is causally +connected in some way to the input, such as a [zlib][] stream or a +[crypto][] stream. + +There is no requirement that the output be the same size as the input, +the same number of chunks, or arrive at the same time. For example, a +Hash stream will only ever have a single chunk of output which is +provided when the input is ended. A zlib stream will produce output +that is either much smaller or much larger than its input. + +Rather than implement the [`stream._read()`][stream-_read] and +[`stream._write()`][stream-_write] methods, Transform classes must implement the +[`stream._transform()`][stream-_transform] method, and may optionally +also implement the [`stream._flush()`][stream-_flush] method. (See below.) + +#### new stream.Transform([options]) + +* `options` {Object} Passed to both Writable and Readable + constructors. Also has the following fields: + * `transform` {Function} Implementation for the + [`stream._transform()`][stream-_transform] method. + * `flush` {Function} Implementation for the [`stream._flush()`][stream-_flush] + method. + +In classes that extend the Transform class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +#### Events: 'finish' and 'end' + +The [`'finish'`][] and [`'end'`][] events are from the parent Writable +and Readable classes respectively. The `'finish'` event is fired after +[`stream.end()`][stream-end] is called and all chunks have been processed by +[`stream._transform()`][stream-_transform], `'end'` is fired after all data has +been output which is after the callback in [`stream._flush()`][stream-_flush] +has been called. + +#### transform.\_flush(callback) + +* `callback` {Function} Call this function (optionally with an error + argument) when you are done flushing any remaining data. + +Note: **This function MUST NOT be called directly.** It MAY be implemented +by child classes, and if so, will be called by the internal Transform +class methods only. + +In some cases, your transform operation may need to emit a bit more +data at the end of the stream. For example, a `Zlib` compression +stream will store up some internal state so that it can optimally +compress the output. At the end, however, it needs to do the best it +can with what is left, so that the data will be complete. + +In those cases, you can implement a `_flush()` method, which will be +called at the very end, after all the written data is consumed, but +before emitting [`'end'`][] to signal the end of the readable side. Just +like with [`stream._transform()`][stream-_transform], call +`transform.push(chunk)` zero or more times, as appropriate, and call `callback` +when the flush operation is complete. + +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. + +#### transform.\_transform(chunk, encoding, callback) + +* `chunk` {Buffer|String} The chunk to be transformed. Will **always** + be a buffer unless the `decodeStrings` option was set to `false`. +* `encoding` {String} If the chunk is a string, then this is the + encoding type. If chunk is a buffer, then this is the special + value - 'buffer', ignore it in this case. +* `callback` {Function} Call this function (optionally with an error + argument and data) when you are done processing the supplied chunk. + +Note: **This function MUST NOT be called directly.** It should be +implemented by child classes, and called by the internal Transform +class methods only. + +All Transform stream implementations must provide a `_transform()` +method to accept input and produce output. + +`_transform()` should do whatever has to be done in this specific +Transform class, to handle the bytes being written, and pass them off +to the readable portion of the interface. Do asynchronous I/O, +process things, and so on. + +Call `transform.push(outputChunk)` 0 or more times to generate output +from this input chunk, depending on how much data you want to output +as a result of this chunk. + +Call the callback function only when the current chunk is completely +consumed. Note that there may or may not be output as a result of any +particular input chunk. If you supply a second argument to the callback +it will be passed to the push method. In other words the following are +equivalent: + +```js +transform.prototype._transform = function (data, encoding, callback) { + this.push(data); + callback(); +}; + +transform.prototype._transform = function (data, encoding, callback) { + callback(null, data); +}; +``` + +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. + +#### Example: `SimpleProtocol` parser v2 + +The example [here](#stream_example_simpleprotocol_v1_sub_optimal) of a simple +protocol parser can be implemented simply by using the higher level +[Transform][] stream class, similar to the `parseHeader` and `SimpleProtocol +v1` examples. + +In this example, rather than providing the input as an argument, it +would be piped into the parser, which is a more idiomatic Node.js stream +approach. + +```javascript +const util = require('util'); +const Transform = require('stream').Transform; +util.inherits(SimpleProtocol, Transform); + +function SimpleProtocol(options) { + if (!(this instanceof SimpleProtocol)) + return new SimpleProtocol(options); + + Transform.call(this, options); + this._inBody = false; + this._sawFirstCr = false; + this._rawHeader = []; + this.header = null; +} + +SimpleProtocol.prototype._transform = function(chunk, encoding, done) { + if (!this._inBody) { + // check if the chunk has a \n\n + var split = -1; + for (var i = 0; i < chunk.length; i++) { + if (chunk[i] === 10) { // '\n' + if (this._sawFirstCr) { + split = i; + break; + } else { + this._sawFirstCr = true; + } + } else { + this._sawFirstCr = false; + } + } + + if (split === -1) { + // still waiting for the \n\n + // stash the chunk, and try again. + this._rawHeader.push(chunk); + } else { + this._inBody = true; + var h = chunk.slice(0, split); + this._rawHeader.push(h); + var header = Buffer.concat(this._rawHeader).toString(); + try { + this.header = JSON.parse(header); + } catch (er) { + this.emit('error', new Error('invalid simple protocol data')); + return; + } + // and let them know that we are done parsing the header. + this.emit('header', this.header); + + // now, because we got some extra data, emit this first. + this.push(chunk.slice(split)); + } + } else { + // from there on, just provide the data to our consumer as-is. + this.push(chunk); + } + done(); +}; + +// Usage: +// var parser = new SimpleProtocol(); +// source.pipe(parser) +// Now parser is a readable stream that will emit 'header' +// with the parsed header data. +``` + +### Class: stream.Writable + + + +`stream.Writable` is an abstract class designed to be extended with an +underlying implementation of the +[`stream._write(chunk, encoding, callback)`][stream-_write] method. + +Please see [API for Stream Consumers][] for how to consume +writable streams in your programs. What follows is an explanation of +how to implement Writable streams in your programs. + +#### new stream.Writable([options]) + +* `options` {Object} + * `highWaterMark` {Number} Buffer level when + [`stream.write()`][stream-write] starts returning `false`. Default = `16384` + (16kb), or `16` for `objectMode` streams. + * `decodeStrings` {Boolean} Whether or not to decode strings into + Buffers before passing them to [`stream._write()`][stream-_write]. + Default = `true` + * `objectMode` {Boolean} Whether or not the + [`stream.write(anyObj)`][stream-write] is a valid operation. If set you can + write arbitrary data instead of only `Buffer` / `String` data. + Default = `false` + * `write` {Function} Implementation for the + [`stream._write()`][stream-_write] method. + * `writev` {Function} Implementation for the + [`stream._writev()`][stream-_writev] method. + +In classes that extend the Writable class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +#### writable.\_write(chunk, encoding, callback) + +* `chunk` {Buffer|String} The chunk to be written. Will **always** + be a buffer unless the `decodeStrings` option was set to `false`. +* `encoding` {String} If the chunk is a string, then this is the + encoding type. If chunk is a buffer, then this is the special + value - 'buffer', ignore it in this case. +* `callback` {Function} Call this function (optionally with an error + argument) when you are done processing the supplied chunk. + +All Writable stream implementations must provide a +[`stream._write()`][stream-_write] method to send data to the underlying +resource. + +Note: **This function MUST NOT be called directly.** It should be +implemented by child classes, and called by the internal Writable +class methods only. + +Call the callback using the standard `callback(error)` pattern to +signal that the write completed successfully or with an error. + +If the `decodeStrings` flag is set in the constructor options, then +`chunk` may be a string rather than a Buffer, and `encoding` will +indicate the sort of string that it is. This is to support +implementations that have an optimized handling for certain string +data encodings. If you do not explicitly set the `decodeStrings` +option to `false`, then you can safely ignore the `encoding` argument, +and assume that `chunk` will always be a Buffer. + +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. + +#### writable.\_writev(chunks, callback) + +* `chunks` {Array} The chunks to be written. Each chunk has following + format: `{ chunk: ..., encoding: ... }`. +* `callback` {Function} Call this function (optionally with an error + argument) when you are done processing the supplied chunks. + +Note: **This function MUST NOT be called directly.** It may be +implemented by child classes, and called by the internal Writable +class methods only. + +This function is completely optional to implement. In most cases it is +unnecessary. If implemented, it will be called with all the chunks +that are buffered in the write queue. + + +## Simplified Constructor API + + + +In simple cases there is now the added benefit of being able to construct a +stream without inheritance. + +This can be done by passing the appropriate methods as constructor options: + +Examples: + +### Duplex + +```js +var duplex = new stream.Duplex({ + read: function(n) { + // sets this._read under the hood + + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + }, + write: function(chunk, encoding, next) { + // sets this._write under the hood + + // An optional error can be passed as the first argument + next() + } +}); + +// or + +var duplex = new stream.Duplex({ + read: function(n) { + // sets this._read under the hood + + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + }, + writev: function(chunks, next) { + // sets this._writev under the hood + + // An optional error can be passed as the first argument + next() + } +}); +``` + +### Readable + +```js +var readable = new stream.Readable({ + read: function(n) { + // sets this._read under the hood + + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + } +}); +``` + +### Transform + +```js +var transform = new stream.Transform({ + transform: function(chunk, encoding, next) { + // sets this._transform under the hood + + // generate output as many times as needed + // this.push(chunk); + + // call when the current chunk is consumed + next(); + }, + flush: function(done) { + // sets this._flush under the hood + + // generate output as many times as needed + // this.push(chunk); + + done(); + } +}); +``` + +### Writable + +```js +var writable = new stream.Writable({ + write: function(chunk, encoding, next) { + // sets this._write under the hood + + // An optional error can be passed as the first argument + next() + } +}); + +// or + +var writable = new stream.Writable({ + writev: function(chunks, next) { + // sets this._writev under the hood + + // An optional error can be passed as the first argument + next() + } +}); +``` + +## Streams: Under the Hood + + + +### Buffering + + + +Both Writable and Readable streams will buffer data on an internal +object which can be retrieved from `_writableState.getBuffer()` or +`_readableState.buffer`, respectively. + +The amount of data that will potentially be buffered depends on the +`highWaterMark` option which is passed into the constructor. + +Buffering in Readable streams happens when the implementation calls +[`stream.push(chunk)`][stream-push]. If the consumer of the Stream does not +call [`stream.read()`][stream-read], then the data will sit in the internal +queue until it is consumed. + +Buffering in Writable streams happens when the user calls +[`stream.write(chunk)`][stream-write] repeatedly, even when it returns `false`. + +The purpose of streams, especially with the [`stream.pipe()`][] method, is to +limit the buffering of data to acceptable levels, so that sources and +destinations of varying speed will not overwhelm the available memory. + +### Compatibility with Older Node.js Versions + + + +In versions of Node.js prior to v0.10, the Readable stream interface was +simpler, but also less powerful and less useful. + +* Rather than waiting for you to call the [`stream.read()`][stream-read] method, + [`'data'`][] events would start emitting immediately. If you needed to do + some I/O to decide how to handle data, then you had to store the chunks + in some kind of buffer so that they would not be lost. +* The [`stream.pause()`][stream-pause] method was advisory, rather than + guaranteed. This meant that you still had to be prepared to receive + [`'data'`][] events even when the stream was in a paused state. + +In Node.js v0.10, the [Readable][] class was added. +For backwards compatibility with older Node.js programs, Readable streams +switch into "flowing mode" when a [`'data'`][] event handler is added, or +when the [`stream.resume()`][stream-resume] method is called. The effect is +that, even if you are not using the new [`stream.read()`][stream-read] method +and [`'readable'`][] event, you no longer have to worry about losing +[`'data'`][] chunks. + +Most programs will continue to function normally. However, this +introduces an edge case in the following conditions: + +* No [`'data'`][] event handler is added. +* The [`stream.resume()`][stream-resume] method is never called. +* The stream is not piped to any writable destination. + +For example, consider the following code: + +```js +// WARNING! BROKEN! +net.createServer((socket) => { + + // we add an 'end' method, but never consume the data + socket.on('end', () => { + // It will never get here. + socket.end('I got your message (but didnt read it)\n'); + }); + +}).listen(1337); +``` + +In versions of Node.js prior to v0.10, the incoming message data would be +simply discarded. However, in Node.js v0.10 and beyond, +the socket will remain paused forever. + +The workaround in this situation is to call the +[`stream.resume()`][stream-resume] method to start the flow of data: + +```js +// Workaround +net.createServer((socket) => { + + socket.on('end', () => { + socket.end('I got your message (but didnt read it)\n'); + }); + + // start the flow of data, discarding it. + socket.resume(); + +}).listen(1337); +``` + +In addition to new Readable streams switching into flowing mode, +pre-v0.10 style streams can be wrapped in a Readable class using the +[`stream.wrap()`][] method. + + +### Object Mode + + + +Normally, Streams operate on Strings and Buffers exclusively. + +Streams that are in **object mode** can emit generic JavaScript values +other than Buffers and Strings. + +A Readable stream in object mode will always return a single item from +a call to [`stream.read(size)`][stream-read], regardless of what the size +argument is. + +A Writable stream in object mode will always ignore the `encoding` +argument to [`stream.write(data, encoding)`][stream-write]. + +The special value `null` still retains its special value for object +mode streams. That is, for object mode readable streams, `null` as a +return value from [`stream.read()`][stream-read] indicates that there is no more +data, and [`stream.push(null)`][stream-push] will signal the end of stream data +(`EOF`). + +No streams in Node.js core are object mode streams. This pattern is only +used by userland streaming libraries. + +You should set `objectMode` in your stream child class constructor on +the options object. Setting `objectMode` mid-stream is not safe. + +For Duplex streams `objectMode` can be set exclusively for readable or +writable side with `readableObjectMode` and `writableObjectMode` +respectively. These options can be used to implement parsers and +serializers with Transform streams. + +```js +const util = require('util'); +const StringDecoder = require('string_decoder').StringDecoder; +const Transform = require('stream').Transform; +util.inherits(JSONParseStream, Transform); + +// Gets \n-delimited JSON string data, and emits the parsed objects +function JSONParseStream() { + if (!(this instanceof JSONParseStream)) + return new JSONParseStream(); + + Transform.call(this, { readableObjectMode : true }); + + this._buffer = ''; + this._decoder = new StringDecoder('utf8'); +} + +JSONParseStream.prototype._transform = function(chunk, encoding, cb) { + this._buffer += this._decoder.write(chunk); + // split on newlines + var lines = this._buffer.split(/\r?\n/); + // keep the last partial line buffered + this._buffer = lines.pop(); + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + try { + var obj = JSON.parse(line); + } catch (er) { + this.emit('error', er); + return; + } + // push the parsed object out to the readable consumer + this.push(obj); + } + cb(); +}; + +JSONParseStream.prototype._flush = function(cb) { + // Just handle any leftover + var rem = this._buffer.trim(); + if (rem) { + try { + var obj = JSON.parse(rem); + } catch (er) { + this.emit('error', er); + return; + } + // push the parsed object out to the readable consumer + this.push(obj); + } + cb(); +}; +``` + +### `stream.read(0)` + +There are some cases where you want to trigger a refresh of the +underlying readable stream mechanisms, without actually consuming any +data. In that case, you can call `stream.read(0)`, which will always +return null. + +If the internal read buffer is below the `highWaterMark`, and the +stream is not currently reading, then calling `stream.read(0)` will trigger +a low-level [`stream._read()`][stream-_read] call. + +There is almost never a need to do this. However, you will see some +cases in Node.js's internals where this is done, particularly in the +Readable stream class internals. + +### `stream.push('')` + +Pushing a zero-byte string or Buffer (when not in [Object mode][]) has an +interesting side effect. Because it *is* a call to +[`stream.push()`][stream-push], it will end the `reading` process. However, it +does *not* add any data to the readable buffer, so there's nothing for +a user to consume. + +Very rarely, there are cases where you have no data to provide now, +but the consumer of your stream (or, perhaps, another bit of your own +code) will know when to check again, by calling [`stream.read(0)`][stream-read]. +In those cases, you *may* call `stream.push('')`. + +So far, the only use case for this functionality is in the +[`tls.CryptoStream`][] class, which is deprecated in Node.js/io.js v1.0. If you +find that you have to use `stream.push('')`, please consider another +approach, because it almost certainly indicates that something is +horribly wrong. + +[`'data'`]: #stream_event_data +[`'drain'`]: #stream_event_drain +[`'end'`]: #stream_event_end +[`'finish'`]: #stream_event_finish +[`'readable'`]: #stream_event_readable +[`buf.toString(encoding)`]: https://nodejs.org/docs/v5.8.0/api/buffer.html#buffer_buf_tostring_encoding_start_end +[`EventEmitter`]: https://nodejs.org/docs/v5.8.0/api/events.html#events_class_eventemitter +[`process.stderr`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stderr +[`process.stdin`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stdin +[`process.stdout`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stdout +[`stream.cork()`]: #stream_writable_cork +[`stream.pipe()`]: #stream_readable_pipe_destination_options +[`stream.uncork()`]: #stream_writable_uncork +[`stream.unpipe()`]: #stream_readable_unpipe_destination +[`stream.wrap()`]: #stream_readable_wrap_stream +[`tls.CryptoStream`]: https://nodejs.org/docs/v5.8.0/api/tls.html#tls_class_cryptostream +[`util.inherits()`]: https://nodejs.org/docs/v5.8.0/api/util.html#util_util_inherits_constructor_superconstructor +[API for Stream Consumers]: #stream_api_for_stream_consumers +[API for Stream Implementors]: #stream_api_for_stream_implementors +[child process stdin]: https://nodejs.org/docs/v5.8.0/api/child_process.html#child_process_child_stdin +[child process stdout and stderr]: https://nodejs.org/docs/v5.8.0/api/child_process.html#child_process_child_stdout +[Compatibility]: #stream_compatibility_with_older_node_js_versions +[crypto]: crypto.html +[Duplex]: #stream_class_stream_duplex +[fs read streams]: https://nodejs.org/docs/v5.8.0/api/fs.html#fs_class_fs_readstream +[fs write streams]: https://nodejs.org/docs/v5.8.0/api/fs.html#fs_class_fs_writestream +[HTTP requests, on the client]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_clientrequest +[HTTP responses, on the server]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_serverresponse +[http-incoming-message]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_incomingmessage +[Object mode]: #stream_object_mode +[Readable]: #stream_class_stream_readable +[SimpleProtocol v2]: #stream_example_simpleprotocol_parser_v2 +[stream-_flush]: #stream_transform_flush_callback +[stream-_read]: #stream_readable_read_size_1 +[stream-_transform]: #stream_transform_transform_chunk_encoding_callback +[stream-_write]: #stream_writable_write_chunk_encoding_callback_1 +[stream-_writev]: #stream_writable_writev_chunks_callback +[stream-end]: #stream_writable_end_chunk_encoding_callback +[stream-pause]: #stream_readable_pause +[stream-push]: #stream_readable_push_chunk_encoding +[stream-read]: #stream_readable_read_size +[stream-resume]: #stream_readable_resume +[stream-write]: #stream_writable_write_chunk_encoding_callback +[TCP sockets]: https://nodejs.org/docs/v5.8.0/api/net.html#net_class_net_socket +[Transform]: #stream_class_stream_transform +[Writable]: #stream_class_stream_writable +[zlib]: zlib.html diff --git a/node_modules/archiver-utils/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md similarity index 100% rename from node_modules/archiver-utils/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md diff --git a/node_modules/archiver/node_modules/readable-stream/duplex.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/duplex.js similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/duplex.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/duplex.js diff --git a/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_duplex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_duplex.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_duplex.js diff --git a/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_passthrough.js similarity index 100% rename from node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_passthrough.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_passthrough.js diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 000000000..54a9d5c55 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,880 @@ +'use strict'; + +module.exports = Readable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Readable.ReadableState = ReadableState; + +var EE = require('events'); + +/**/ +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream; +(function () { + try { + Stream = require('st' + 'ream'); + } catch (_) {} finally { + if (!Stream) Stream = require('events').EventEmitter; + } +})(); +/**/ + +var Buffer = require('buffer').Buffer; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = undefined; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var StringDecoder; + +util.inherits(Readable, Stream); + +var Duplex; +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~ ~this.highWaterMark; + + this.buffer = []; + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +var Duplex; +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options && typeof options.read === 'function') this._read = options.read; + + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + + if (!state.objectMode && typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = new Buffer(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var e = new Error('stream.unshift() after end event'); + stream.emit('error', e); + } else { + var skipAdd; + if (state.decoder && !addToFront && !encoding) { + chunk = state.decoder.write(chunk); + skipAdd = !state.objectMode && chunk.length === 0; + } + + if (!addToFront) state.reading = false; + + // Don't add to the buffer if we've decoded to an empty string chunk and + // we're not in object mode + if (!skipAdd) { + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + } + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +function howMuchToRead(n, state) { + if (state.length === 0 && state.ended) return 0; + + if (state.objectMode) return n === 0 ? 0 : 1; + + if (n === null || isNaN(n)) { + // only flow one buffer at a time + if (state.flowing && state.buffer.length) return state.buffer[0].length;else return state.length; + } + + if (n <= 0) return 0; + + // If we're asking for more than the target buffer level, + // then raise the water mark. Bump up to the next highest + // power of 2, to prevent increasing it excessively in tiny + // amounts. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + + // don't have that much. return null, unless we've ended. + if (n > state.length) { + if (!state.ended) { + state.needReadable = true; + return 0; + } else { + return state.length; + } + } + + return n; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + var state = this._readableState; + var nOrig = n; + + if (typeof n !== 'number' || n > 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } + + if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + } + + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (doRead && !state.reading) n = howMuchToRead(nOrig, state); + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } + + state.length -= n; + + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (state.length === 0 && !state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended && state.length === 0) endReadable(this); + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function chunkInvalid(state, chunk) { + var er = null; + if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + processNextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + debug('onunpipe'); + if (readable === src) { + cleanup(); + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + if (false === ret) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + if (state.pipesCount === 1 && state.pipes[0] === dest && src.listenerCount('data') === 1 && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + // This is a brutally ugly hack to make sure that our error handler + // is attached before any userland ones. NEVER DO THIS. + if (!dest._events || !dest._events.error) dest.on('error', onerror);else if (isArray(dest._events.error)) dest._events.error.unshift(onerror);else dest._events.error = [onerror, dest._events.error]; + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var _i = 0; _i < len; _i++) { + dests[_i].emit('unpipe', this); + }return this; + } + + // try to find the right one. + var i = indexOf(state.pipes, dest); + if (i === -1) return this; + + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + // If listening to data, and it has not explicitly been paused, + // then call resume to start the flow of data on the next tick. + if (ev === 'data' && false !== this._readableState.flowing) { + this.resume(); + } + + if (ev === 'readable' && !this._readableState.endEmitted) { + var state = this._readableState; + if (!state.readableListening) { + state.readableListening = true; + state.emittedReadable = false; + state.needReadable = true; + if (!state.reading) { + processNextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this, state); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + processNextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + if (state.flowing) { + do { + var chunk = stream.read(); + } while (null !== chunk && state.flowing); + } +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function (ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +function fromList(n, state) { + var list = state.buffer; + var length = state.length; + var stringMode = !!state.decoder; + var objectMode = !!state.objectMode; + var ret; + + // nothing in the list, definitely empty. + if (list.length === 0) return null; + + if (length === 0) ret = null;else if (objectMode) ret = list.shift();else if (!n || n >= length) { + // read it all, truncate the array. + if (stringMode) ret = list.join('');else if (list.length === 1) ret = list[0];else ret = Buffer.concat(list, length); + list.length = 0; + } else { + // read just some of it. + if (n < list[0].length) { + // just take a part of the first list item. + // slice is the same for buffers and strings. + var buf = list[0]; + ret = buf.slice(0, n); + list[0] = buf.slice(n); + } else if (n === list[0].length) { + // first list is a perfect match + ret = list.shift(); + } else { + // complex case. + // we have enough to cover it, but it spans past the first buffer. + if (stringMode) ret = '';else ret = new Buffer(n); + + var c = 0; + for (var i = 0, l = list.length; i < l && c < n; i++) { + var buf = list[0]; + var cpy = Math.min(n - c, buf.length); + + if (stringMode) ret += buf.slice(0, cpy);else buf.copy(ret, c, 0, cpy); + + if (cpy < buf.length) list[0] = buf.slice(cpy);else list.shift(); + + c += cpy; + } + } + } + + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('endReadable called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + processNextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} \ No newline at end of file diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 000000000..625cdc176 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,180 @@ +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function TransformState(stream) { + this.afterTransform = function (er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; + this.writeencoding = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) stream.push(data); + + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = new TransformState(this); + + // when the writable side finishes, then flush out anything remaining. + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + this.once('prefinish', function () { + if (typeof this._flush === 'function') this._flush(function (er) { + done(stream, er); + });else done(stream); + }); +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +function done(stream, er) { + if (er) return stream.emit('error', er); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; + + if (ws.length) throw new Error('calling transform done when ws.length != 0'); + + if (ts.transforming) throw new Error('calling transform done when still transforming'); + + return stream.push(null); +} \ No newline at end of file diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 000000000..95916c992 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,516 @@ +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +module.exports = Writable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; +/**/ + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream; +(function () { + try { + Stream = require('st' + 'ream'); + } catch (_) {} finally { + if (!Stream) Stream = require('events').EventEmitter; + } +})(); +/**/ + +var Buffer = require('buffer').Buffer; + +util.inherits(Writable, Stream); + +function nop() {} + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +var Duplex; +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~ ~this.highWaterMark; + + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // create the two objects needed to store the corked requests + // they are not a linked list, as no new elements are inserted in there + this.corkedRequestsFree = new CorkedRequest(this); + this.corkedRequestsFree.next = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function writableStateGetBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') + }); + } catch (_) {} +})(); + +var Duplex; +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options); + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe. Not readable.')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + processNextTick(cb, er); +} + +// If we get something that is not a buffer, string, null, or undefined, +// and we're not in objectMode, then that's an error. +// Otherwise stream chunks are all considered to be of length=1, and the +// watermarks determine how many objects to keep in the buffer, rather than +// how many bytes or characters. +function validChunk(stream, state, chunk, cb) { + var valid = true; + + if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + var er = new TypeError('Invalid non-string/buffer chunk'); + stream.emit('error', er); + processNextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + + if (Buffer.isBuffer(chunk)) encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) processNextTick(cb, er);else cb(er); + + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + while (entry) { + buffer[count] = entry; + entry = entry.next; + count += 1; + } + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequestCount = 0; + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} + +function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else { + prefinish(stream, state); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) processNextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + + this.finish = function (err) { + var entry = _this.entry; + _this.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = _this; + } else { + state.corkedRequestsFree = _this; + } + }; +} \ No newline at end of file diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/package.json b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/package.json new file mode 100644 index 000000000..d77b090ec --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/package.json @@ -0,0 +1,37 @@ +{ + "name": "readable-stream", + "version": "2.0.6", + "description": "Streams3, a user-land copy of the stream library from Node.js", + "main": "readable.js", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + }, + "devDependencies": { + "tap": "~0.2.6", + "tape": "~4.5.1", + "zuul": "~3.9.0" + }, + "scripts": { + "test": "tap test/parallel/*.js test/ours/*.js", + "browser": "npm run write-zuul && zuul -- test/browser.js", + "write-zuul": "printf \"ui: tape\nbrowsers:\n - name: $BROWSER_NAME\n version: $BROWSER_VERSION\n\">.zuul.yml" + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/readable-stream" + }, + "keywords": [ + "readable", + "stream", + "pipe" + ], + "browser": { + "util": false + }, + "license": "MIT" +} diff --git a/node_modules/archiver/node_modules/readable-stream/passthrough.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/passthrough.js similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/passthrough.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/passthrough.js diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/readable.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/readable.js new file mode 100644 index 000000000..6222a5798 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/readable.js @@ -0,0 +1,12 @@ +var Stream = (function (){ + try { + return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify + } catch(_){} +}()); +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = Stream || exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/archiver/node_modules/readable-stream/transform.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/transform.js similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/transform.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/transform.js diff --git a/node_modules/archiver/node_modules/readable-stream/writable.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/writable.js similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/writable.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/readable-stream/writable.js diff --git a/node_modules/gulp-gzip/node_modules/gulp-util/node_modules/through2/.npmignore b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/.npmignore similarity index 100% rename from node_modules/gulp-gzip/node_modules/gulp-util/node_modules/through2/.npmignore rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/.npmignore diff --git a/node_modules/gulp-gzip/node_modules/gulp-util/node_modules/through2/LICENSE b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/LICENSE similarity index 100% rename from node_modules/gulp-gzip/node_modules/gulp-util/node_modules/through2/LICENSE rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/LICENSE diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/README.md b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/README.md new file mode 100644 index 000000000..c84b3464a --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/README.md @@ -0,0 +1,133 @@ +# through2 + +[![NPM](https://nodei.co/npm/through2.png?downloads&downloadRank)](https://nodei.co/npm/through2/) + +**A tiny wrapper around Node streams.Transform (Streams2) to avoid explicit subclassing noise** + +Inspired by [Dominic Tarr](https://github.com/dominictarr)'s [through](https://github.com/dominictarr/through) in that it's so much easier to make a stream out of a function than it is to set up the prototype chain properly: `through(function (chunk) { ... })`. + +Note: As 2.x.x this module starts using **Streams3** instead of Stream2. To continue using a Streams2 version use `npm install through2@0` to fetch the latest version of 0.x.x. More information about Streams2 vs Streams3 and recommendations see the article **[Why I don't use Node's core 'stream' module](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html)**. + +```js +fs.createReadStream('ex.txt') + .pipe(through2(function (chunk, enc, callback) { + for (var i = 0; i < chunk.length; i++) + if (chunk[i] == 97) + chunk[i] = 122 // swap 'a' for 'z' + + this.push(chunk) + + callback() + })) + .pipe(fs.createWriteStream('out.txt')) +``` + +Or object streams: + +```js +var all = [] + +fs.createReadStream('data.csv') + .pipe(csv2()) + .pipe(through2.obj(function (chunk, enc, callback) { + var data = { + name : chunk[0] + , address : chunk[3] + , phone : chunk[10] + } + this.push(data) + + callback() + })) + .on('data', function (data) { + all.push(data) + }) + .on('end', function () { + doSomethingSpecial(all) + }) +``` + +Note that `through2.obj(fn)` is a convenience wrapper around `through2({ objectMode: true }, fn)`. + +## API + +through2([ options, ] [ transformFunction ] [, flushFunction ]) + +Consult the **[stream.Transform](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_transform)** documentation for the exact rules of the `transformFunction` (i.e. `this._transform`) and the optional `flushFunction` (i.e. `this._flush`). + +### options + +The options argument is optional and is passed straight through to `stream.Transform`. So you can use `objectMode:true` if you are processing non-binary streams (or just use `through2.obj()`). + +The `options` argument is first, unlike standard convention, because if I'm passing in an anonymous function then I'd prefer for the options argument to not get lost at the end of the call: + +```js +fs.createReadStream('/tmp/important.dat') + .pipe(through2({ objectMode: true, allowHalfOpen: false }, + function (chunk, enc, cb) { + cb(null, 'wut?') // note we can use the second argument on the callback + // to provide data as an alternative to this.push('wut?') + } + ) + .pipe(fs.createWriteStream('/tmp/wut.txt')) +``` + +### transformFunction + +The `transformFunction` must have the following signature: `function (chunk, encoding, callback) {}`. A minimal implementation should call the `callback` function to indicate that the transformation is done, even if that transformation means discarding the chunk. + +To queue a new chunk, call `this.push(chunk)`—this can be called as many times as required before the `callback()` if you have multiple pieces to send on. + +Alternatively, you may use `callback(err, chunk)` as shorthand for emitting a single chunk or an error. + +If you **do not provide a `transformFunction`** then you will get a simple pass-through stream. + +### flushFunction + +The optional `flushFunction` is provided as the last argument (2nd or 3rd, depending on whether you've supplied options) is called just prior to the stream ending. Can be used to finish up any processing that may be in progress. + +```js +fs.createReadStream('/tmp/important.dat') + .pipe(through2( + function (chunk, enc, cb) { cb(null, chunk) }, // transform is a noop + function (cb) { // flush function + this.push('tacking on an extra buffer to the end'); + cb(); + } + )) + .pipe(fs.createWriteStream('/tmp/wut.txt')); +``` + +through2.ctor([ options, ] transformFunction[, flushFunction ]) + +Instead of returning a `stream.Transform` instance, `through2.ctor()` returns a **constructor** for a custom Transform. This is useful when you want to use the same transform logic in multiple instances. + +```js +var FToC = through2.ctor({objectMode: true}, function (record, encoding, callback) { + if (record.temp != null && record.unit == "F") { + record.temp = ( ( record.temp - 32 ) * 5 ) / 9 + record.unit = "C" + } + this.push(record) + callback() +}) + +// Create instances of FToC like so: +var converter = new FToC() +// Or: +var converter = FToC() +// Or specify/override options when you instantiate, if you prefer: +var converter = FToC({objectMode: true}) +``` + +## See Also + + - [through2-map](https://github.com/brycebaril/through2-map) - Array.prototype.map analog for streams. + - [through2-filter](https://github.com/brycebaril/through2-filter) - Array.prototype.filter analog for streams. + - [through2-reduce](https://github.com/brycebaril/through2-reduce) - Array.prototype.reduce analog for streams. + - [through2-spy](https://github.com/brycebaril/through2-spy) - Wrapper for simple stream.PassThrough spies. + - the [mississippi stream utility collection](https://github.com/maxogden/mississippi) includes `through2` as well as many more useful stream modules similar to this one + +## License + +**through2** is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. diff --git a/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/package.json b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/package.json new file mode 100644 index 000000000..c7afac7f0 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/package.json @@ -0,0 +1,32 @@ +{ + "name": "through2", + "version": "2.0.1", + "description": "A tiny wrapper around Node streams2 Transform to avoid explicit subclassing noise", + "main": "through2.js", + "scripts": { + "test": "node test/test.js | faucet", + "test-local": "brtapsauce-local test/basic-test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/rvagg/through2.git" + }, + "keywords": [ + "stream", + "streams2", + "through", + "transform" + ], + "author": "Rod Vagg (https://github.com/rvagg)", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" + }, + "devDependencies": { + "bl": "~0.9.4", + "faucet": "0.0.1", + "stream-spigot": "~3.0.5", + "tape": "~4.0.0" + } +} diff --git a/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through2/through2.js b/node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/through2.js similarity index 100% rename from node_modules/vinyl-fs/node_modules/glob-stream/node_modules/through2/through2.js rename to node_modules/gulp-concat/node_modules/gulp-util/node_modules/through2/through2.js diff --git a/node_modules/gulp-concat/node_modules/gulp-util/package.json b/node_modules/gulp-concat/node_modules/gulp-util/package.json new file mode 100644 index 000000000..7ef3b82d7 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/gulp-util/package.json @@ -0,0 +1,51 @@ +{ + "name": "gulp-util", + "description": "Utility functions for gulp plugins", + "version": "3.0.7", + "repository": "gulpjs/gulp-util", + "author": "Fractal (http://wearefractal.com/)", + "files": [ + "index.js", + "lib" + ], + "dependencies": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^1.0.11", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "devDependencies": { + "buffer-equal": "^0.0.1", + "coveralls": "^2.11.2", + "event-stream": "^3.1.7", + "istanbul": "^0.3.5", + "istanbul-coveralls": "^1.0.1", + "jshint": "^2.5.11", + "lodash.templatesettings": "^3.0.0", + "mocha": "^2.0.1", + "rimraf": "^2.2.8", + "should": "^7.0.1" + }, + "scripts": { + "test": "jshint *.js lib/*.js test/*.js && mocha", + "coveralls": "istanbul cover _mocha --report lcovonly && istanbul-coveralls" + }, + "engines": { + "node": ">=0.10" + }, + "license": "MIT" +} diff --git a/node_modules/gulp-concat/node_modules/isarray/README.md b/node_modules/gulp-concat/node_modules/isarray/README.md new file mode 100644 index 000000000..052a62b8d --- /dev/null +++ b/node_modules/gulp-concat/node_modules/isarray/README.md @@ -0,0 +1,54 @@ + +# isarray + +`Array#isArray` for older browsers. + +## Usage + +```js +var isArray = require('isarray'); + +console.log(isArray([])); // => true +console.log(isArray({})); // => false +``` + +## Installation + +With [npm](http://npmjs.org) do + +```bash +$ npm install isarray +``` + +Then bundle for the browser with +[browserify](https://github.com/substack/browserify). + +With [component](http://component.io) do + +```bash +$ component install juliangruber/isarray +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/gulp-concat/node_modules/isarray/build/build.js b/node_modules/gulp-concat/node_modules/isarray/build/build.js new file mode 100644 index 000000000..ec58596ae --- /dev/null +++ b/node_modules/gulp-concat/node_modules/isarray/build/build.js @@ -0,0 +1,209 @@ + +/** + * Require the given path. + * + * @param {String} path + * @return {Object} exports + * @api public + */ + +function require(path, parent, orig) { + var resolved = require.resolve(path); + + // lookup failed + if (null == resolved) { + orig = orig || path; + parent = parent || 'root'; + var err = new Error('Failed to require "' + orig + '" from "' + parent + '"'); + err.path = orig; + err.parent = parent; + err.require = true; + throw err; + } + + var module = require.modules[resolved]; + + // perform real require() + // by invoking the module's + // registered function + if (!module.exports) { + module.exports = {}; + module.client = module.component = true; + module.call(this, module.exports, require.relative(resolved), module); + } + + return module.exports; +} + +/** + * Registered modules. + */ + +require.modules = {}; + +/** + * Registered aliases. + */ + +require.aliases = {}; + +/** + * Resolve `path`. + * + * Lookup: + * + * - PATH/index.js + * - PATH.js + * - PATH + * + * @param {String} path + * @return {String} path or null + * @api private + */ + +require.resolve = function(path) { + if (path.charAt(0) === '/') path = path.slice(1); + var index = path + '/index.js'; + + var paths = [ + path, + path + '.js', + path + '.json', + path + '/index.js', + path + '/index.json' + ]; + + for (var i = 0; i < paths.length; i++) { + var path = paths[i]; + if (require.modules.hasOwnProperty(path)) return path; + } + + if (require.aliases.hasOwnProperty(index)) { + return require.aliases[index]; + } +}; + +/** + * Normalize `path` relative to the current path. + * + * @param {String} curr + * @param {String} path + * @return {String} + * @api private + */ + +require.normalize = function(curr, path) { + var segs = []; + + if ('.' != path.charAt(0)) return path; + + curr = curr.split('/'); + path = path.split('/'); + + for (var i = 0; i < path.length; ++i) { + if ('..' == path[i]) { + curr.pop(); + } else if ('.' != path[i] && '' != path[i]) { + segs.push(path[i]); + } + } + + return curr.concat(segs).join('/'); +}; + +/** + * Register module at `path` with callback `definition`. + * + * @param {String} path + * @param {Function} definition + * @api private + */ + +require.register = function(path, definition) { + require.modules[path] = definition; +}; + +/** + * Alias a module definition. + * + * @param {String} from + * @param {String} to + * @api private + */ + +require.alias = function(from, to) { + if (!require.modules.hasOwnProperty(from)) { + throw new Error('Failed to alias "' + from + '", it does not exist'); + } + require.aliases[to] = from; +}; + +/** + * Return a require function relative to the `parent` path. + * + * @param {String} parent + * @return {Function} + * @api private + */ + +require.relative = function(parent) { + var p = require.normalize(parent, '..'); + + /** + * lastIndexOf helper. + */ + + function lastIndexOf(arr, obj) { + var i = arr.length; + while (i--) { + if (arr[i] === obj) return i; + } + return -1; + } + + /** + * The relative require() itself. + */ + + function localRequire(path) { + var resolved = localRequire.resolve(path); + return require(resolved, parent, path); + } + + /** + * Resolve relative to the parent. + */ + + localRequire.resolve = function(path) { + var c = path.charAt(0); + if ('/' == c) return path.slice(1); + if ('.' == c) return require.normalize(p, path); + + // resolve deps by returning + // the dep in the nearest "deps" + // directory + var segs = parent.split('/'); + var i = lastIndexOf(segs, 'deps') + 1; + if (!i) i = 0; + path = segs.slice(0, i + 1).join('/') + '/deps/' + path; + return path; + }; + + /** + * Check if module is defined at `path`. + */ + + localRequire.exists = function(path) { + return require.modules.hasOwnProperty(localRequire.resolve(path)); + }; + + return localRequire; +}; +require.register("isarray/index.js", function(exports, require, module){ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; + +}); +require.alias("isarray/index.js", "isarray/index.js"); + diff --git a/node_modules/compress-commons/node_modules/isarray/component.json b/node_modules/gulp-concat/node_modules/isarray/component.json similarity index 100% rename from node_modules/compress-commons/node_modules/isarray/component.json rename to node_modules/gulp-concat/node_modules/isarray/component.json diff --git a/node_modules/gulp-concat/node_modules/isarray/index.js b/node_modules/gulp-concat/node_modules/isarray/index.js new file mode 100644 index 000000000..5f5ad45d4 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/isarray/index.js @@ -0,0 +1,3 @@ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; diff --git a/node_modules/gulp-concat/node_modules/isarray/package.json b/node_modules/gulp-concat/node_modules/isarray/package.json new file mode 100644 index 000000000..5a1e9c109 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/isarray/package.json @@ -0,0 +1,25 @@ +{ + "name" : "isarray", + "description" : "Array#isArray for older browsers", + "version" : "0.0.1", + "repository" : { + "type" : "git", + "url" : "git://github.com/juliangruber/isarray.git" + }, + "homepage": "https://github.com/juliangruber/isarray", + "main" : "index.js", + "scripts" : { + "test" : "tap test/*.js" + }, + "dependencies" : {}, + "devDependencies" : { + "tap" : "*" + }, + "keywords": ["browser","isarray","array"], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT" +} diff --git a/node_modules/gulp-concat/node_modules/lodash._reinterpolate/LICENSE.txt b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/LICENSE.txt new file mode 100644 index 000000000..17764328c --- /dev/null +++ b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/gulp-concat/node_modules/lodash._reinterpolate/README.md b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/README.md new file mode 100644 index 000000000..1423e502f --- /dev/null +++ b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/README.md @@ -0,0 +1,20 @@ +# lodash._reinterpolate v3.0.0 + +The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `reInterpolate` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. + +## Installation + +Using npm: + +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash._reinterpolate +``` + +In Node.js/io.js: + +```js +var reInterpolate = require('lodash._reinterpolate'); +``` + +See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._reinterpolate) for more details. diff --git a/node_modules/gulp-concat/node_modules/lodash._reinterpolate/index.js b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/index.js new file mode 100644 index 000000000..5c06abcf3 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/index.js @@ -0,0 +1,13 @@ +/** + * lodash 3.0.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.7.0 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/node_modules/gulp-concat/node_modules/lodash._reinterpolate/package.json b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/package.json new file mode 100644 index 000000000..4cc9f1a53 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/lodash._reinterpolate/package.json @@ -0,0 +1,18 @@ +{ + "name": "lodash._reinterpolate", + "version": "3.0.0", + "description": "The modern build of lodash’s internal `reInterpolate` as a module.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Benjamin Tan (https://d10.github.io/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (https://mathiasbynens.be/)" + ], + "repository": "lodash/lodash", + "scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" } +} diff --git a/node_modules/lodash.template/LICENSE b/node_modules/gulp-concat/node_modules/lodash.template/LICENSE similarity index 100% rename from node_modules/lodash.template/LICENSE rename to node_modules/gulp-concat/node_modules/lodash.template/LICENSE diff --git a/node_modules/gulp-concat/node_modules/lodash.template/README.md b/node_modules/gulp-concat/node_modules/lodash.template/README.md new file mode 100644 index 000000000..f542f713b --- /dev/null +++ b/node_modules/gulp-concat/node_modules/lodash.template/README.md @@ -0,0 +1,20 @@ +# lodash.template v3.6.2 + +The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.template` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. + +## Installation + +Using npm: + +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash.template +``` + +In Node.js/io.js: + +```js +var template = require('lodash.template'); +``` + +See the [documentation](https://lodash.com/docs#template) or [package source](https://github.com/lodash/lodash/blob/3.6.2-npm-packages/lodash.template) for more details. diff --git a/node_modules/gulp-concat/node_modules/lodash.template/index.js b/node_modules/gulp-concat/node_modules/lodash.template/index.js new file mode 100644 index 000000000..e5a9629b9 --- /dev/null +++ b/node_modules/gulp-concat/node_modules/lodash.template/index.js @@ -0,0 +1,389 @@ +/** + * lodash 3.6.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseCopy = require('lodash._basecopy'), + baseToString = require('lodash._basetostring'), + baseValues = require('lodash._basevalues'), + isIterateeCall = require('lodash._isiterateecall'), + reInterpolate = require('lodash._reinterpolate'), + keys = require('lodash.keys'), + restParam = require('lodash.restparam'), + templateSettings = require('lodash.templatesettings'); + +/** `Object#toString` result references. */ +var errorTag = '[object Error]'; + +/** Used to match empty string literals in compiled template source. */ +var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + +/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ +var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + +/** Used to ensure capturing order of template delimiters. */ +var reNoMatch = /($^)/; + +/** Used to match unescaped characters in compiled string literals. */ +var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Used by `_.template` to customize its `_.assign` use. + * + * **Note:** This function is like `assignDefaults` except that it ignores + * inherited property values when checking if a property is `undefined`. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @param {string} key The key associated with the object and source values. + * @param {Object} object The destination object. + * @returns {*} Returns the value to assign to the destination object. + */ +function assignOwnDefaults(objectValue, sourceValue, key, object) { + return (objectValue === undefined || !hasOwnProperty.call(object, key)) + ? sourceValue + : objectValue; +} + +/** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ +function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; +} + +/** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); +} + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; +} + +/** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is provided it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [otherOptions] Enables the legacy `options` param signature. + * @returns {Function} Returns the compiled template function. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // using the HTML "escape" delimiter to escape data property values + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + + diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.html b/node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.html new file mode 100644 index 000000000..a95570251 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.html @@ -0,0 +1,148 @@ + + + + + Clone Test-Suite (Browser) + + + + + +

Clone Test-Suite (Browser)

+ Tests started: ; + Tests finished: . +
    + + + diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.js b/node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.js new file mode 100644 index 000000000..e8b65b3fe --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/clone/test.js @@ -0,0 +1,372 @@ +var clone = require('./'); + +function inspect(obj) { + seen = []; + return JSON.stringify(obj, function (key, val) { + if (val != null && typeof val == "object") { + if (seen.indexOf(val) >= 0) { + return '[cyclic]'; + } + + seen.push(val); + } + + return val; + }); +} + +// Creates a new VM in node, or an iframe in a browser in order to run the +// script +function apartContext(context, script, callback) { + var vm = require('vm'); + + if (vm) { + var ctx = vm.createContext({ ctx: context }); + callback(vm.runInContext(script, ctx)); + } else if (document && document.createElement) { + var iframe = document.createElement('iframe'); + iframe.style.display = 'none'; + document.body.appendChild(iframe); + + var myCtxId = 'tmpCtx' + Math.random(); + + window[myCtxId] = context; + iframe.src = 'test-apart-ctx.html?' + myCtxId + '&' + encodeURIComponent(script); + iframe.onload = function() { + try { + callback(iframe.contentWindow.results); + } catch (e) { + throw e; + } + }; + } else { + console.log('WARNING: cannot create an apart context.'); + } +} + +exports["clone string"] = function (test) { + test.expect(2); // how many tests? + + var a = "foo"; + test.strictEqual(clone(a), a); + a = ""; + test.strictEqual(clone(a), a); + + test.done(); +}; + +exports["clone number"] = function (test) { + test.expect(5); // how many tests? + + var a = 0; + test.strictEqual(clone(a), a); + a = 1; + test.strictEqual(clone(a), a); + a = -1000; + test.strictEqual(clone(a), a); + a = 3.1415927; + test.strictEqual(clone(a), a); + a = -3.1415927; + test.strictEqual(clone(a), a); + + test.done(); +}; + +exports["clone date"] = function (test) { + test.expect(3); // how many tests? + + var a = new Date; + var c = clone(a); + test.ok(!!a.getUTCDate && !!a.toUTCString); + test.ok(!!c.getUTCDate && !!c.toUTCString); + test.equal(a.getTime(), c.getTime()); + + test.done(); +}; + +exports["clone object"] = function (test) { + test.expect(1); // how many tests? + + var a = { foo: { bar: "baz" } }; + var b = clone(a); + + test.deepEqual(b, a); + + test.done(); +}; + +exports["clone array"] = function (test) { + test.expect(2); // how many tests? + + var a = [ + { foo: "bar" }, + "baz" + ]; + var b = clone(a); + + test.ok(b instanceof Array); + test.deepEqual(b, a); + + test.done(); +}; + +exports["clone buffer"] = function (test) { + if (typeof Buffer == 'undefined') { + return test.done(); + } + + test.expect(1); + + var a = new Buffer("this is a test buffer"); + var b = clone(a); + + // no underscore equal since it has no concept of Buffers + test.deepEqual(b, a); + test.done(); +}; + +exports["clone regexp"] = function (test) { + test.expect(5); + + var a = /abc123/gi; + var b = clone(a); + test.deepEqual(b, a); + + var c = /a/g; + test.ok(c.lastIndex === 0); + + c.exec('123a456a'); + test.ok(c.lastIndex === 4); + + var d = clone(c); + test.ok(d.global); + test.ok(d.lastIndex === 4); + + test.done(); +}; + +exports["clone object containing array"] = function (test) { + test.expect(1); // how many tests? + + var a = { + arr1: [ { a: '1234', b: '2345' } ], + arr2: [ { c: '345', d: '456' } ] + }; + + var b = clone(a); + + test.deepEqual(b, a); + + test.done(); +}; + +exports["clone object with circular reference"] = function (test) { + test.expect(8); // how many tests? + + var c = [1, "foo", {'hello': 'bar'}, function () {}, false, [2]]; + var b = [c, 2, 3, 4]; + + var a = {'b': b, 'c': c}; + a.loop = a; + a.loop2 = a; + c.loop = c; + c.aloop = a; + + var aCopy = clone(a); + test.ok(a != aCopy); + test.ok(a.c != aCopy.c); + test.ok(aCopy.c == aCopy.b[0]); + test.ok(aCopy.c.loop.loop.aloop == aCopy); + test.ok(aCopy.c[0] == a.c[0]); + + test.ok(eq(a, aCopy)); + aCopy.c[0] = 2; + test.ok(!eq(a, aCopy)); + aCopy.c = "2"; + test.ok(!eq(a, aCopy)); + + function eq(x, y) { + return inspect(x) === inspect(y); + } + + test.done(); +}; + +exports['clone prototype'] = function (test) { + test.expect(3); // how many tests? + + var a = { + a: "aaa", + x: 123, + y: 45.65 + }; + var b = clone.clonePrototype(a); + + test.strictEqual(b.a, a.a); + test.strictEqual(b.x, a.x); + test.strictEqual(b.y, a.y); + + test.done(); +}; + +exports['clone within an apart context'] = function (test) { + var results = apartContext({ clone: clone }, + "results = ctx.clone({ a: [1, 2, 3], d: new Date(), r: /^foo$/ig })", + function (results) { + test.ok(results.a.constructor.toString() === Array.toString()); + test.ok(results.d.constructor.toString() === Date.toString()); + test.ok(results.r.constructor.toString() === RegExp.toString()); + test.done(); + }); +}; + +exports['clone object with no constructor'] = function (test) { + test.expect(3); + + var n = null; + + var a = { foo: 'bar' }; + a.__proto__ = n; + test.ok(typeof a === 'object'); + test.ok(typeof a !== null); + + var b = clone(a); + test.ok(a.foo, b.foo); + + test.done(); +}; + +exports['clone object with depth argument'] = function (test) { + test.expect(6); + + var a = { + foo: { + bar : { + baz : 'qux' + } + } + }; + + var b = clone(a, false, 1); + test.deepEqual(b, a); + test.notEqual(b, a); + test.strictEqual(b.foo, a.foo); + + b = clone(a, true, 2); + test.deepEqual(b, a); + test.notEqual(b.foo, a.foo); + test.strictEqual(b.foo.bar, a.foo.bar); + + test.done(); +}; + +exports['maintain prototype chain in clones'] = function (test) { + test.expect(1); + + function T() {} + + var a = new T(); + var b = clone(a); + test.strictEqual(Object.getPrototypeOf(a), Object.getPrototypeOf(b)); + + test.done(); +}; + +exports['parent prototype is overriden with prototype provided'] = function (test) { + test.expect(1); + + function T() {} + + var a = new T(); + var b = clone(a, true, Infinity, null); + test.strictEqual(b.__defineSetter__, undefined); + + test.done(); +}; + +exports['clone object with null children'] = function (test) { + test.expect(1); + var a = { + foo: { + bar: null, + baz: { + qux: false + } + } + }; + + var b = clone(a); + + test.deepEqual(b, a); + test.done(); +}; + +exports['clone instance with getter'] = function (test) { + test.expect(1); + function Ctor() {}; + Object.defineProperty(Ctor.prototype, 'prop', { + configurable: true, + enumerable: true, + get: function() { + return 'value'; + } + }); + + var a = new Ctor(); + var b = clone(a); + + test.strictEqual(b.prop, 'value'); + test.done(); +}; + +exports['get RegExp flags'] = function (test) { + test.strictEqual(clone.__getRegExpFlags(/a/), '' ); + test.strictEqual(clone.__getRegExpFlags(/a/i), 'i' ); + test.strictEqual(clone.__getRegExpFlags(/a/g), 'g' ); + test.strictEqual(clone.__getRegExpFlags(/a/gi), 'gi'); + test.strictEqual(clone.__getRegExpFlags(/a/m), 'm' ); + + test.done(); +}; + +exports["recognize Array object"] = function (test) { + var results = apartContext(null, "results = [1, 2, 3]", function(alien) { + var local = [4, 5, 6]; + test.ok(clone.__isArray(alien)); // recognize in other context. + test.ok(clone.__isArray(local)); // recognize in local context. + test.ok(!clone.__isDate(alien)); + test.ok(!clone.__isDate(local)); + test.ok(!clone.__isRegExp(alien)); + test.ok(!clone.__isRegExp(local)); + test.done(); + }); +}; + +exports["recognize Date object"] = function (test) { + var results = apartContext(null, "results = new Date()", function(alien) { + var local = new Date(); + + test.ok(clone.__isDate(alien)); // recognize in other context. + test.ok(clone.__isDate(local)); // recognize in local context. + test.ok(!clone.__isArray(alien)); + test.ok(!clone.__isArray(local)); + test.ok(!clone.__isRegExp(alien)); + test.ok(!clone.__isRegExp(local)); + + test.done(); + }); +}; + +exports["recognize RegExp object"] = function (test) { + var results = apartContext(null, "results = /foo/", function(alien) { + var local = /bar/; + + test.ok(clone.__isRegExp(alien)); // recognize in other context. + test.ok(clone.__isRegExp(local)); // recognize in local context. + test.ok(!clone.__isArray(alien)); + test.ok(!clone.__isArray(local)); + test.ok(!clone.__isDate(alien)); + test.ok(!clone.__isDate(local)); + test.done(); + }); +}; diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.npmignore b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.npmignore new file mode 100644 index 000000000..38344f87a --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.npmignore @@ -0,0 +1,5 @@ +build/ +test/ +examples/ +fs.js +zlib.js \ No newline at end of file diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.travis.yml b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.travis.yml new file mode 100644 index 000000000..1b8211846 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.travis.yml @@ -0,0 +1,52 @@ +sudo: false +language: node_js +before_install: + - npm install -g npm@2 + - npm install -g npm +notifications: + email: false +matrix: + fast_finish: true + allow_failures: + - env: TASK=browser BROWSER_NAME=ipad BROWSER_VERSION="6.0..latest" + - env: TASK=browser BROWSER_NAME=iphone BROWSER_VERSION="6.0..latest" + include: + - node_js: '0.8' + env: TASK=test + - node_js: '0.10' + env: TASK=test + - node_js: '0.11' + env: TASK=test + - node_js: '0.12' + env: TASK=test + - node_js: 1 + env: TASK=test + - node_js: 2 + env: TASK=test + - node_js: 3 + env: TASK=test + - node_js: 4 + env: TASK=test + - node_js: 5 + env: TASK=test + - node_js: 5 + env: TASK=browser BROWSER_NAME=android BROWSER_VERSION="4.0..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=ie BROWSER_VERSION="9..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=opera BROWSER_VERSION="11..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=chrome BROWSER_VERSION="-3..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=firefox BROWSER_VERSION="-3..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=ipad BROWSER_VERSION="6.0..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=iphone BROWSER_VERSION="6.0..latest" + - node_js: 5 + env: TASK=browser BROWSER_NAME=safari BROWSER_VERSION="5..latest" +script: "npm run $TASK" +env: + global: + - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= + - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml new file mode 100644 index 000000000..96d9cfbd3 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/.zuul.yml @@ -0,0 +1 @@ +ui: tape diff --git a/node_modules/crc32-stream/node_modules/readable-stream/LICENSE b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/LICENSE similarity index 100% rename from node_modules/crc32-stream/node_modules/readable-stream/LICENSE rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/LICENSE diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/README.md b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/README.md new file mode 100644 index 000000000..86b95a3bf --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/README.md @@ -0,0 +1,36 @@ +# readable-stream + +***Node-core v5.8.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) + + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) + + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) + +```bash +npm install --save readable-stream +``` + +***Node-core streams for userland*** + +This package is a mirror of the Streams2 and Streams3 implementations in +Node-core, including [documentation](doc/stream.markdown). + +If you want to guarantee a stable streams base, regardless of what version of +Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). + +As of version 2.0.0 **readable-stream** uses semantic versioning. + +# Streams WG Team Members + +* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> + - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B +* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> + - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 +* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> + - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D +* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> +* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> +* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown new file mode 100644 index 000000000..0bc3819e6 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/doc/stream.markdown @@ -0,0 +1,1760 @@ +# Stream + + Stability: 2 - Stable + +A stream is an abstract interface implemented by various objects in +Node.js. For example a [request to an HTTP server][http-incoming-message] is a +stream, as is [`process.stdout`][]. Streams are readable, writable, or both. All +streams are instances of [`EventEmitter`][]. + +You can load the Stream base classes by doing `require('stream')`. +There are base classes provided for [Readable][] streams, [Writable][] +streams, [Duplex][] streams, and [Transform][] streams. + +This document is split up into 3 sections: + +1. The first section explains the parts of the API that you need to be + aware of to use streams in your programs. +2. The second section explains the parts of the API that you need to + use if you implement your own custom streams yourself. The API is designed to + make this easy for you to do. +3. The third section goes into more depth about how streams work, + including some of the internal mechanisms and functions that you + should probably not modify unless you definitely know what you are + doing. + + +## API for Stream Consumers + + + +Streams can be either [Readable][], [Writable][], or both ([Duplex][]). + +All streams are EventEmitters, but they also have other custom methods +and properties depending on whether they are Readable, Writable, or +Duplex. + +If a stream is both Readable and Writable, then it implements all of +the methods and events. So, a [Duplex][] or [Transform][] stream is +fully described by this API, though their implementation may be +somewhat different. + +It is not necessary to implement Stream interfaces in order to consume +streams in your programs. If you **are** implementing streaming +interfaces in your own program, please also refer to +[API for Stream Implementors][]. + +Almost all Node.js programs, no matter how simple, use Streams in some +way. Here is an example of using Streams in an Node.js program: + +```js +const http = require('http'); + +var server = http.createServer( (req, res) => { + // req is an http.IncomingMessage, which is a Readable Stream + // res is an http.ServerResponse, which is a Writable Stream + + var body = ''; + // we want to get the data as utf8 strings + // If you don't set an encoding, then you'll get Buffer objects + req.setEncoding('utf8'); + + // Readable streams emit 'data' events once a listener is added + req.on('data', (chunk) => { + body += chunk; + }); + + // the end event tells you that you have entire body + req.on('end', () => { + try { + var data = JSON.parse(body); + } catch (er) { + // uh oh! bad json! + res.statusCode = 400; + return res.end(`error: ${er.message}`); + } + + // write back something interesting to the user: + res.write(typeof data); + res.end(); + }); +}); + +server.listen(1337); + +// $ curl localhost:1337 -d '{}' +// object +// $ curl localhost:1337 -d '"foo"' +// string +// $ curl localhost:1337 -d 'not json' +// error: Unexpected token o +``` + +### Class: stream.Duplex + +Duplex streams are streams that implement both the [Readable][] and +[Writable][] interfaces. + +Examples of Duplex streams include: + +* [TCP sockets][] +* [zlib streams][zlib] +* [crypto streams][crypto] + +### Class: stream.Readable + + + +The Readable stream interface is the abstraction for a *source* of +data that you are reading from. In other words, data comes *out* of a +Readable stream. + +A Readable stream will not start emitting data until you indicate that +you are ready to receive it. + +Readable streams have two "modes": a **flowing mode** and a **paused +mode**. When in flowing mode, data is read from the underlying system +and provided to your program as fast as possible. In paused mode, you +must explicitly call [`stream.read()`][stream-read] to get chunks of data out. +Streams start out in paused mode. + +**Note**: If no data event handlers are attached, and there are no +[`stream.pipe()`][] destinations, and the stream is switched into flowing +mode, then data will be lost. + +You can switch to flowing mode by doing any of the following: + +* Adding a [`'data'`][] event handler to listen for data. +* Calling the [`stream.resume()`][stream-resume] method to explicitly open the + flow. +* Calling the [`stream.pipe()`][] method to send the data to a [Writable][]. + +You can switch back to paused mode by doing either of the following: + +* If there are no pipe destinations, by calling the + [`stream.pause()`][stream-pause] method. +* If there are pipe destinations, by removing any [`'data'`][] event + handlers, and removing all pipe destinations by calling the + [`stream.unpipe()`][] method. + +Note that, for backwards compatibility reasons, removing [`'data'`][] +event handlers will **not** automatically pause the stream. Also, if +there are piped destinations, then calling [`stream.pause()`][stream-pause] will +not guarantee that the stream will *remain* paused once those +destinations drain and ask for more data. + +Examples of readable streams include: + +* [HTTP responses, on the client][http-incoming-message] +* [HTTP requests, on the server][http-incoming-message] +* [fs read streams][] +* [zlib streams][zlib] +* [crypto streams][crypto] +* [TCP sockets][] +* [child process stdout and stderr][] +* [`process.stdin`][] + +#### Event: 'close' + +Emitted when the stream and any of its underlying resources (a file +descriptor, for example) have been closed. The event indicates that +no more events will be emitted, and no further computation will occur. + +Not all streams will emit the `'close'` event. + +#### Event: 'data' + +* `chunk` {Buffer|String} The chunk of data. + +Attaching a `'data'` event listener to a stream that has not been +explicitly paused will switch the stream into flowing mode. Data will +then be passed as soon as it is available. + +If you just want to get all the data out of the stream as fast as +possible, this is the best way to do so. + +```js +var readable = getReadableStreamSomehow(); +readable.on('data', (chunk) => { + console.log('got %d bytes of data', chunk.length); +}); +``` + +#### Event: 'end' + +This event fires when there will be no more data to read. + +Note that the `'end'` event **will not fire** unless the data is +completely consumed. This can be done by switching into flowing mode, +or by calling [`stream.read()`][stream-read] repeatedly until you get to the +end. + +```js +var readable = getReadableStreamSomehow(); +readable.on('data', (chunk) => { + console.log('got %d bytes of data', chunk.length); +}); +readable.on('end', () => { + console.log('there will be no more data.'); +}); +``` + +#### Event: 'error' + +* {Error Object} + +Emitted if there was an error receiving data. + +#### Event: 'readable' + +When a chunk of data can be read from the stream, it will emit a +`'readable'` event. + +In some cases, listening for a `'readable'` event will cause some data +to be read into the internal buffer from the underlying system, if it +hadn't already. + +```javascript +var readable = getReadableStreamSomehow(); +readable.on('readable', () => { + // there is some data to read now +}); +``` + +Once the internal buffer is drained, a `'readable'` event will fire +again when more data is available. + +The `'readable'` event is not emitted in the "flowing" mode with the +sole exception of the last one, on end-of-stream. + +The `'readable'` event indicates that the stream has new information: +either new data is available or the end of the stream has been reached. +In the former case, [`stream.read()`][stream-read] will return that data. In the +latter case, [`stream.read()`][stream-read] will return null. For instance, in +the following example, `foo.txt` is an empty file: + +```js +const fs = require('fs'); +var rr = fs.createReadStream('foo.txt'); +rr.on('readable', () => { + console.log('readable:', rr.read()); +}); +rr.on('end', () => { + console.log('end'); +}); +``` + +The output of running this script is: + +``` +$ node test.js +readable: null +end +``` + +#### readable.isPaused() + +* Return: {Boolean} + +This method returns whether or not the `readable` has been **explicitly** +paused by client code (using [`stream.pause()`][stream-pause] without a +corresponding [`stream.resume()`][stream-resume]). + +```js +var readable = new stream.Readable + +readable.isPaused() // === false +readable.pause() +readable.isPaused() // === true +readable.resume() +readable.isPaused() // === false +``` + +#### readable.pause() + +* Return: `this` + +This method will cause a stream in flowing mode to stop emitting +[`'data'`][] events, switching out of flowing mode. Any data that becomes +available will remain in the internal buffer. + +```js +var readable = getReadableStreamSomehow(); +readable.on('data', (chunk) => { + console.log('got %d bytes of data', chunk.length); + readable.pause(); + console.log('there will be no more data for 1 second'); + setTimeout(() => { + console.log('now data will start flowing again'); + readable.resume(); + }, 1000); +}); +``` + +#### readable.pipe(destination[, options]) + +* `destination` {stream.Writable} The destination for writing data +* `options` {Object} Pipe options + * `end` {Boolean} End the writer when the reader ends. Default = `true` + +This method pulls all the data out of a readable stream, and writes it +to the supplied destination, automatically managing the flow so that +the destination is not overwhelmed by a fast readable stream. + +Multiple destinations can be piped to safely. + +```js +var readable = getReadableStreamSomehow(); +var writable = fs.createWriteStream('file.txt'); +// All the data from readable goes into 'file.txt' +readable.pipe(writable); +``` + +This function returns the destination stream, so you can set up pipe +chains like so: + +```js +var r = fs.createReadStream('file.txt'); +var z = zlib.createGzip(); +var w = fs.createWriteStream('file.txt.gz'); +r.pipe(z).pipe(w); +``` + +For example, emulating the Unix `cat` command: + +```js +process.stdin.pipe(process.stdout); +``` + +By default [`stream.end()`][stream-end] is called on the destination when the +source stream emits [`'end'`][], so that `destination` is no longer writable. +Pass `{ end: false }` as `options` to keep the destination stream open. + +This keeps `writer` open so that "Goodbye" can be written at the +end. + +```js +reader.pipe(writer, { end: false }); +reader.on('end', () => { + writer.end('Goodbye\n'); +}); +``` + +Note that [`process.stderr`][] and [`process.stdout`][] are never closed until +the process exits, regardless of the specified options. + +#### readable.read([size]) + +* `size` {Number} Optional argument to specify how much data to read. +* Return {String|Buffer|Null} + +The `read()` method pulls some data out of the internal buffer and +returns it. If there is no data available, then it will return +`null`. + +If you pass in a `size` argument, then it will return that many +bytes. If `size` bytes are not available, then it will return `null`, +unless we've ended, in which case it will return the data remaining +in the buffer. + +If you do not specify a `size` argument, then it will return all the +data in the internal buffer. + +This method should only be called in paused mode. In flowing mode, +this method is called automatically until the internal buffer is +drained. + +```js +var readable = getReadableStreamSomehow(); +readable.on('readable', () => { + var chunk; + while (null !== (chunk = readable.read())) { + console.log('got %d bytes of data', chunk.length); + } +}); +``` + +If this method returns a data chunk, then it will also trigger the +emission of a [`'data'`][] event. + +Note that calling [`stream.read([size])`][stream-read] after the [`'end'`][] +event has been triggered will return `null`. No runtime error will be raised. + +#### readable.resume() + +* Return: `this` + +This method will cause the readable stream to resume emitting [`'data'`][] +events. + +This method will switch the stream into flowing mode. If you do *not* +want to consume the data from a stream, but you *do* want to get to +its [`'end'`][] event, you can call [`stream.resume()`][stream-resume] to open +the flow of data. + +```js +var readable = getReadableStreamSomehow(); +readable.resume(); +readable.on('end', () => { + console.log('got to the end, but did not read anything'); +}); +``` + +#### readable.setEncoding(encoding) + +* `encoding` {String} The encoding to use. +* Return: `this` + +Call this function to cause the stream to return strings of the specified +encoding instead of Buffer objects. For example, if you do +`readable.setEncoding('utf8')`, then the output data will be interpreted as +UTF-8 data, and returned as strings. If you do `readable.setEncoding('hex')`, +then the data will be encoded in hexadecimal string format. + +This properly handles multi-byte characters that would otherwise be +potentially mangled if you simply pulled the Buffers directly and +called [`buf.toString(encoding)`][] on them. If you want to read the data +as strings, always use this method. + +Also you can disable any encoding at all with `readable.setEncoding(null)`. +This approach is very useful if you deal with binary data or with large +multi-byte strings spread out over multiple chunks. + +```js +var readable = getReadableStreamSomehow(); +readable.setEncoding('utf8'); +readable.on('data', (chunk) => { + assert.equal(typeof chunk, 'string'); + console.log('got %d characters of string data', chunk.length); +}); +``` + +#### readable.unpipe([destination]) + +* `destination` {stream.Writable} Optional specific stream to unpipe + +This method will remove the hooks set up for a previous [`stream.pipe()`][] +call. + +If the destination is not specified, then all pipes are removed. + +If the destination is specified, but no pipe is set up for it, then +this is a no-op. + +```js +var readable = getReadableStreamSomehow(); +var writable = fs.createWriteStream('file.txt'); +// All the data from readable goes into 'file.txt', +// but only for the first second +readable.pipe(writable); +setTimeout(() => { + console.log('stop writing to file.txt'); + readable.unpipe(writable); + console.log('manually close the file stream'); + writable.end(); +}, 1000); +``` + +#### readable.unshift(chunk) + +* `chunk` {Buffer|String} Chunk of data to unshift onto the read queue + +This is useful in certain cases where a stream is being consumed by a +parser, which needs to "un-consume" some data that it has +optimistically pulled out of the source, so that the stream can be +passed on to some other party. + +Note that `stream.unshift(chunk)` cannot be called after the [`'end'`][] event +has been triggered; a runtime error will be raised. + +If you find that you must often call `stream.unshift(chunk)` in your +programs, consider implementing a [Transform][] stream instead. (See [API +for Stream Implementors][].) + +```js +// Pull off a header delimited by \n\n +// use unshift() if we get too much +// Call the callback with (error, header, stream) +const StringDecoder = require('string_decoder').StringDecoder; +function parseHeader(stream, callback) { + stream.on('error', callback); + stream.on('readable', onReadable); + var decoder = new StringDecoder('utf8'); + var header = ''; + function onReadable() { + var chunk; + while (null !== (chunk = stream.read())) { + var str = decoder.write(chunk); + if (str.match(/\n\n/)) { + // found the header boundary + var split = str.split(/\n\n/); + header += split.shift(); + var remaining = split.join('\n\n'); + var buf = new Buffer(remaining, 'utf8'); + if (buf.length) + stream.unshift(buf); + stream.removeListener('error', callback); + stream.removeListener('readable', onReadable); + // now the body of the message can be read from the stream. + callback(null, header, stream); + } else { + // still reading the header. + header += str; + } + } + } +} +``` + +Note that, unlike [`stream.push(chunk)`][stream-push], `stream.unshift(chunk)` +will not end the reading process by resetting the internal reading state of the +stream. This can cause unexpected results if `unshift()` is called during a +read (i.e. from within a [`stream._read()`][stream-_read] implementation on a +custom stream). Following the call to `unshift()` with an immediate +[`stream.push('')`][stream-push] will reset the reading state appropriately, +however it is best to simply avoid calling `unshift()` while in the process of +performing a read. + +#### readable.wrap(stream) + +* `stream` {Stream} An "old style" readable stream + +Versions of Node.js prior to v0.10 had streams that did not implement the +entire Streams API as it is today. (See [Compatibility][] for +more information.) + +If you are using an older Node.js library that emits [`'data'`][] events and +has a [`stream.pause()`][stream-pause] method that is advisory only, then you +can use the `wrap()` method to create a [Readable][] stream that uses the old +stream as its data source. + +You will very rarely ever need to call this function, but it exists +as a convenience for interacting with old Node.js programs and libraries. + +For example: + +```js +const OldReader = require('./old-api-module.js').OldReader; +const Readable = require('stream').Readable; +const oreader = new OldReader; +const myReader = new Readable().wrap(oreader); + +myReader.on('readable', () => { + myReader.read(); // etc. +}); +``` + +### Class: stream.Transform + +Transform streams are [Duplex][] streams where the output is in some way +computed from the input. They implement both the [Readable][] and +[Writable][] interfaces. + +Examples of Transform streams include: + +* [zlib streams][zlib] +* [crypto streams][crypto] + +### Class: stream.Writable + + + +The Writable stream interface is an abstraction for a *destination* +that you are writing data *to*. + +Examples of writable streams include: + +* [HTTP requests, on the client][] +* [HTTP responses, on the server][] +* [fs write streams][] +* [zlib streams][zlib] +* [crypto streams][crypto] +* [TCP sockets][] +* [child process stdin][] +* [`process.stdout`][], [`process.stderr`][] + +#### Event: 'drain' + +If a [`stream.write(chunk)`][stream-write] call returns `false`, then the +`'drain'` event will indicate when it is appropriate to begin writing more data +to the stream. + +```js +// Write the data to the supplied writable stream one million times. +// Be attentive to back-pressure. +function writeOneMillionTimes(writer, data, encoding, callback) { + var i = 1000000; + write(); + function write() { + var ok = true; + do { + i -= 1; + if (i === 0) { + // last time! + writer.write(data, encoding, callback); + } else { + // see if we should continue, or wait + // don't pass the callback, because we're not done yet. + ok = writer.write(data, encoding); + } + } while (i > 0 && ok); + if (i > 0) { + // had to stop early! + // write some more once it drains + writer.once('drain', write); + } + } +} +``` + +#### Event: 'error' + +* {Error} + +Emitted if there was an error when writing or piping data. + +#### Event: 'finish' + +When the [`stream.end()`][stream-end] method has been called, and all data has +been flushed to the underlying system, this event is emitted. + +```javascript +var writer = getWritableStreamSomehow(); +for (var i = 0; i < 100; i ++) { + writer.write('hello, #${i}!\n'); +} +writer.end('this is the end\n'); +writer.on('finish', () => { + console.error('all writes are now complete.'); +}); +``` + +#### Event: 'pipe' + +* `src` {stream.Readable} source stream that is piping to this writable + +This is emitted whenever the [`stream.pipe()`][] method is called on a readable +stream, adding this writable to its set of destinations. + +```js +var writer = getWritableStreamSomehow(); +var reader = getReadableStreamSomehow(); +writer.on('pipe', (src) => { + console.error('something is piping into the writer'); + assert.equal(src, reader); +}); +reader.pipe(writer); +``` + +#### Event: 'unpipe' + +* `src` {[Readable][] Stream} The source stream that + [unpiped][`stream.unpipe()`] this writable + +This is emitted whenever the [`stream.unpipe()`][] method is called on a +readable stream, removing this writable from its set of destinations. + +```js +var writer = getWritableStreamSomehow(); +var reader = getReadableStreamSomehow(); +writer.on('unpipe', (src) => { + console.error('something has stopped piping into the writer'); + assert.equal(src, reader); +}); +reader.pipe(writer); +reader.unpipe(writer); +``` + +#### writable.cork() + +Forces buffering of all writes. + +Buffered data will be flushed either at [`stream.uncork()`][] or at +[`stream.end()`][stream-end] call. + +#### writable.end([chunk][, encoding][, callback]) + +* `chunk` {String|Buffer} Optional data to write +* `encoding` {String} The encoding, if `chunk` is a String +* `callback` {Function} Optional callback for when the stream is finished + +Call this method when no more data will be written to the stream. If supplied, +the callback is attached as a listener on the [`'finish'`][] event. + +Calling [`stream.write()`][stream-write] after calling +[`stream.end()`][stream-end] will raise an error. + +```js +// write 'hello, ' and then end with 'world!' +var file = fs.createWriteStream('example.txt'); +file.write('hello, '); +file.end('world!'); +// writing more now is not allowed! +``` + +#### writable.setDefaultEncoding(encoding) + +* `encoding` {String} The new default encoding + +Sets the default encoding for a writable stream. + +#### writable.uncork() + +Flush all data, buffered since [`stream.cork()`][] call. + +#### writable.write(chunk[, encoding][, callback]) + +* `chunk` {String|Buffer} The data to write +* `encoding` {String} The encoding, if `chunk` is a String +* `callback` {Function} Callback for when this chunk of data is flushed +* Returns: {Boolean} `true` if the data was handled completely. + +This method writes some data to the underlying system, and calls the +supplied callback once the data has been fully handled. + +The return value indicates if you should continue writing right now. +If the data had to be buffered internally, then it will return +`false`. Otherwise, it will return `true`. + +This return value is strictly advisory. You MAY continue to write, +even if it returns `false`. However, writes will be buffered in +memory, so it is best not to do this excessively. Instead, wait for +the [`'drain'`][] event before writing more data. + + +## API for Stream Implementors + + + +To implement any sort of stream, the pattern is the same: + +1. Extend the appropriate parent class in your own subclass. (The + [`util.inherits()`][] method is particularly helpful for this.) +2. Call the appropriate parent class constructor in your constructor, + to be sure that the internal mechanisms are set up properly. +3. Implement one or more specific methods, as detailed below. + +The class to extend and the method(s) to implement depend on the sort +of stream class you are writing: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Use-case

    +
    +

    Class

    +
    +

    Method(s) to implement

    +
    +

    Reading only

    +
    +

    [Readable](#stream_class_stream_readable_1)

    +
    +

    [_read][stream-_read]

    +
    +

    Writing only

    +
    +

    [Writable](#stream_class_stream_writable_1)

    +
    +

    [_write][stream-_write], [_writev][stream-_writev]

    +
    +

    Reading and writing

    +
    +

    [Duplex](#stream_class_stream_duplex_1)

    +
    +

    [_read][stream-_read], [_write][stream-_write], [_writev][stream-_writev]

    +
    +

    Operate on written data, then read the result

    +
    +

    [Transform](#stream_class_stream_transform_1)

    +
    +

    [_transform][stream-_transform], [_flush][stream-_flush]

    +
    + +In your implementation code, it is very important to never call the methods +described in [API for Stream Consumers][]. Otherwise, you can potentially cause +adverse side effects in programs that consume your streaming interfaces. + +### Class: stream.Duplex + + + +A "duplex" stream is one that is both Readable and Writable, such as a TCP +socket connection. + +Note that `stream.Duplex` is an abstract class designed to be extended +with an underlying implementation of the [`stream._read(size)`][stream-_read] +and [`stream._write(chunk, encoding, callback)`][stream-_write] methods as you +would with a Readable or Writable stream class. + +Since JavaScript doesn't have multiple prototypal inheritance, this class +prototypally inherits from Readable, and then parasitically from Writable. It is +thus up to the user to implement both the low-level +[`stream._read(n)`][stream-_read] method as well as the low-level +[`stream._write(chunk, encoding, callback)`][stream-_write] method on extension +duplex classes. + +#### new stream.Duplex(options) + +* `options` {Object} Passed to both Writable and Readable + constructors. Also has the following fields: + * `allowHalfOpen` {Boolean} Default = `true`. If set to `false`, then + the stream will automatically end the readable side when the + writable side ends and vice versa. + * `readableObjectMode` {Boolean} Default = `false`. Sets `objectMode` + for readable side of the stream. Has no effect if `objectMode` + is `true`. + * `writableObjectMode` {Boolean} Default = `false`. Sets `objectMode` + for writable side of the stream. Has no effect if `objectMode` + is `true`. + +In classes that extend the Duplex class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +### Class: stream.PassThrough + +This is a trivial implementation of a [Transform][] stream that simply +passes the input bytes across to the output. Its purpose is mainly +for examples and testing, but there are occasionally use cases where +it can come in handy as a building block for novel sorts of streams. + +### Class: stream.Readable + + + +`stream.Readable` is an abstract class designed to be extended with an +underlying implementation of the [`stream._read(size)`][stream-_read] method. + +Please see [API for Stream Consumers][] for how to consume +streams in your programs. What follows is an explanation of how to +implement Readable streams in your programs. + +#### new stream.Readable([options]) + +* `options` {Object} + * `highWaterMark` {Number} The maximum number of bytes to store in + the internal buffer before ceasing to read from the underlying + resource. Default = `16384` (16kb), or `16` for `objectMode` streams + * `encoding` {String} If specified, then buffers will be decoded to + strings using the specified encoding. Default = `null` + * `objectMode` {Boolean} Whether this stream should behave + as a stream of objects. Meaning that [`stream.read(n)`][stream-read] returns + a single value instead of a Buffer of size n. Default = `false` + * `read` {Function} Implementation for the [`stream._read()`][stream-_read] + method. + +In classes that extend the Readable class, make sure to call the +Readable constructor so that the buffering settings can be properly +initialized. + +#### readable.\_read(size) + +* `size` {Number} Number of bytes to read asynchronously + +Note: **Implement this method, but do NOT call it directly.** + +This method is prefixed with an underscore because it is internal to the +class that defines it and should only be called by the internal Readable +class methods. All Readable stream implementations must provide a \_read +method to fetch data from the underlying resource. + +When `_read()` is called, if data is available from the resource, the `_read()` +implementation should start pushing that data into the read queue by calling +[`this.push(dataChunk)`][stream-push]. `_read()` should continue reading from +the resource and pushing data until push returns `false`, at which point it +should stop reading from the resource. Only when `_read()` is called again after +it has stopped should it start reading more data from the resource and pushing +that data onto the queue. + +Note: once the `_read()` method is called, it will not be called again until +the [`stream.push()`][stream-push] method is called. + +The `size` argument is advisory. Implementations where a "read" is a +single call that returns data can use this to know how much data to +fetch. Implementations where that is not relevant, such as TCP or +TLS, may ignore this argument, and simply provide data whenever it +becomes available. There is no need, for example to "wait" until +`size` bytes are available before calling [`stream.push(chunk)`][stream-push]. + +#### readable.push(chunk[, encoding]) + + +* `chunk` {Buffer|Null|String} Chunk of data to push into the read queue +* `encoding` {String} Encoding of String chunks. Must be a valid + Buffer encoding, such as `'utf8'` or `'ascii'` +* return {Boolean} Whether or not more pushes should be performed + +Note: **This method should be called by Readable implementors, NOT +by consumers of Readable streams.** + +If a value other than null is passed, The `push()` method adds a chunk of data +into the queue for subsequent stream processors to consume. If `null` is +passed, it signals the end of the stream (EOF), after which no more data +can be written. + +The data added with `push()` can be pulled out by calling the +[`stream.read()`][stream-read] method when the [`'readable'`][] event fires. + +This API is designed to be as flexible as possible. For example, +you may be wrapping a lower-level source which has some sort of +pause/resume mechanism, and a data callback. In those cases, you +could wrap the low-level source object by doing something like this: + +```js +// source is an object with readStop() and readStart() methods, +// and an `ondata` member that gets called when it has data, and +// an `onend` member that gets called when the data is over. + +util.inherits(SourceWrapper, Readable); + +function SourceWrapper(options) { + Readable.call(this, options); + + this._source = getLowlevelSourceObject(); + + // Every time there's data, we push it into the internal buffer. + this._source.ondata = (chunk) => { + // if push() returns false, then we need to stop reading from source + if (!this.push(chunk)) + this._source.readStop(); + }; + + // When the source ends, we push the EOF-signaling `null` chunk + this._source.onend = () => { + this.push(null); + }; +} + +// _read will be called when the stream wants to pull more data in +// the advisory size argument is ignored in this case. +SourceWrapper.prototype._read = function(size) { + this._source.readStart(); +}; +``` + +#### Example: A Counting Stream + + + +This is a basic example of a Readable stream. It emits the numerals +from 1 to 1,000,000 in ascending order, and then ends. + +```js +const Readable = require('stream').Readable; +const util = require('util'); +util.inherits(Counter, Readable); + +function Counter(opt) { + Readable.call(this, opt); + this._max = 1000000; + this._index = 1; +} + +Counter.prototype._read = function() { + var i = this._index++; + if (i > this._max) + this.push(null); + else { + var str = '' + i; + var buf = new Buffer(str, 'ascii'); + this.push(buf); + } +}; +``` + +#### Example: SimpleProtocol v1 (Sub-optimal) + +This is similar to the `parseHeader` function described +[here](#stream_readable_unshift_chunk), but implemented as a custom stream. +Also, note that this implementation does not convert the incoming data to a +string. + +However, this would be better implemented as a [Transform][] stream. See +[SimpleProtocol v2][] for a better implementation. + +```js +// A parser for a simple data protocol. +// The "header" is a JSON object, followed by 2 \n characters, and +// then a message body. +// +// NOTE: This can be done more simply as a Transform stream! +// Using Readable directly for this is sub-optimal. See the +// alternative example below under the Transform section. + +const Readable = require('stream').Readable; +const util = require('util'); + +util.inherits(SimpleProtocol, Readable); + +function SimpleProtocol(source, options) { + if (!(this instanceof SimpleProtocol)) + return new SimpleProtocol(source, options); + + Readable.call(this, options); + this._inBody = false; + this._sawFirstCr = false; + + // source is a readable stream, such as a socket or file + this._source = source; + + var self = this; + source.on('end', () => { + self.push(null); + }); + + // give it a kick whenever the source is readable + // read(0) will not consume any bytes + source.on('readable', () => { + self.read(0); + }); + + this._rawHeader = []; + this.header = null; +} + +SimpleProtocol.prototype._read = function(n) { + if (!this._inBody) { + var chunk = this._source.read(); + + // if the source doesn't have data, we don't have data yet. + if (chunk === null) + return this.push(''); + + // check if the chunk has a \n\n + var split = -1; + for (var i = 0; i < chunk.length; i++) { + if (chunk[i] === 10) { // '\n' + if (this._sawFirstCr) { + split = i; + break; + } else { + this._sawFirstCr = true; + } + } else { + this._sawFirstCr = false; + } + } + + if (split === -1) { + // still waiting for the \n\n + // stash the chunk, and try again. + this._rawHeader.push(chunk); + this.push(''); + } else { + this._inBody = true; + var h = chunk.slice(0, split); + this._rawHeader.push(h); + var header = Buffer.concat(this._rawHeader).toString(); + try { + this.header = JSON.parse(header); + } catch (er) { + this.emit('error', new Error('invalid simple protocol data')); + return; + } + // now, because we got some extra data, unshift the rest + // back into the read queue so that our consumer will see it. + var b = chunk.slice(split); + this.unshift(b); + // calling unshift by itself does not reset the reading state + // of the stream; since we're inside _read, doing an additional + // push('') will reset the state appropriately. + this.push(''); + + // and let them know that we are done parsing the header. + this.emit('header', this.header); + } + } else { + // from there on, just provide the data to our consumer. + // careful not to push(null), since that would indicate EOF. + var chunk = this._source.read(); + if (chunk) this.push(chunk); + } +}; + +// Usage: +// var parser = new SimpleProtocol(source); +// Now parser is a readable stream that will emit 'header' +// with the parsed header data. +``` + +### Class: stream.Transform + +A "transform" stream is a duplex stream where the output is causally +connected in some way to the input, such as a [zlib][] stream or a +[crypto][] stream. + +There is no requirement that the output be the same size as the input, +the same number of chunks, or arrive at the same time. For example, a +Hash stream will only ever have a single chunk of output which is +provided when the input is ended. A zlib stream will produce output +that is either much smaller or much larger than its input. + +Rather than implement the [`stream._read()`][stream-_read] and +[`stream._write()`][stream-_write] methods, Transform classes must implement the +[`stream._transform()`][stream-_transform] method, and may optionally +also implement the [`stream._flush()`][stream-_flush] method. (See below.) + +#### new stream.Transform([options]) + +* `options` {Object} Passed to both Writable and Readable + constructors. Also has the following fields: + * `transform` {Function} Implementation for the + [`stream._transform()`][stream-_transform] method. + * `flush` {Function} Implementation for the [`stream._flush()`][stream-_flush] + method. + +In classes that extend the Transform class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +#### Events: 'finish' and 'end' + +The [`'finish'`][] and [`'end'`][] events are from the parent Writable +and Readable classes respectively. The `'finish'` event is fired after +[`stream.end()`][stream-end] is called and all chunks have been processed by +[`stream._transform()`][stream-_transform], `'end'` is fired after all data has +been output which is after the callback in [`stream._flush()`][stream-_flush] +has been called. + +#### transform.\_flush(callback) + +* `callback` {Function} Call this function (optionally with an error + argument) when you are done flushing any remaining data. + +Note: **This function MUST NOT be called directly.** It MAY be implemented +by child classes, and if so, will be called by the internal Transform +class methods only. + +In some cases, your transform operation may need to emit a bit more +data at the end of the stream. For example, a `Zlib` compression +stream will store up some internal state so that it can optimally +compress the output. At the end, however, it needs to do the best it +can with what is left, so that the data will be complete. + +In those cases, you can implement a `_flush()` method, which will be +called at the very end, after all the written data is consumed, but +before emitting [`'end'`][] to signal the end of the readable side. Just +like with [`stream._transform()`][stream-_transform], call +`transform.push(chunk)` zero or more times, as appropriate, and call `callback` +when the flush operation is complete. + +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. + +#### transform.\_transform(chunk, encoding, callback) + +* `chunk` {Buffer|String} The chunk to be transformed. Will **always** + be a buffer unless the `decodeStrings` option was set to `false`. +* `encoding` {String} If the chunk is a string, then this is the + encoding type. If chunk is a buffer, then this is the special + value - 'buffer', ignore it in this case. +* `callback` {Function} Call this function (optionally with an error + argument and data) when you are done processing the supplied chunk. + +Note: **This function MUST NOT be called directly.** It should be +implemented by child classes, and called by the internal Transform +class methods only. + +All Transform stream implementations must provide a `_transform()` +method to accept input and produce output. + +`_transform()` should do whatever has to be done in this specific +Transform class, to handle the bytes being written, and pass them off +to the readable portion of the interface. Do asynchronous I/O, +process things, and so on. + +Call `transform.push(outputChunk)` 0 or more times to generate output +from this input chunk, depending on how much data you want to output +as a result of this chunk. + +Call the callback function only when the current chunk is completely +consumed. Note that there may or may not be output as a result of any +particular input chunk. If you supply a second argument to the callback +it will be passed to the push method. In other words the following are +equivalent: + +```js +transform.prototype._transform = function (data, encoding, callback) { + this.push(data); + callback(); +}; + +transform.prototype._transform = function (data, encoding, callback) { + callback(null, data); +}; +``` + +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. + +#### Example: `SimpleProtocol` parser v2 + +The example [here](#stream_example_simpleprotocol_v1_sub_optimal) of a simple +protocol parser can be implemented simply by using the higher level +[Transform][] stream class, similar to the `parseHeader` and `SimpleProtocol +v1` examples. + +In this example, rather than providing the input as an argument, it +would be piped into the parser, which is a more idiomatic Node.js stream +approach. + +```javascript +const util = require('util'); +const Transform = require('stream').Transform; +util.inherits(SimpleProtocol, Transform); + +function SimpleProtocol(options) { + if (!(this instanceof SimpleProtocol)) + return new SimpleProtocol(options); + + Transform.call(this, options); + this._inBody = false; + this._sawFirstCr = false; + this._rawHeader = []; + this.header = null; +} + +SimpleProtocol.prototype._transform = function(chunk, encoding, done) { + if (!this._inBody) { + // check if the chunk has a \n\n + var split = -1; + for (var i = 0; i < chunk.length; i++) { + if (chunk[i] === 10) { // '\n' + if (this._sawFirstCr) { + split = i; + break; + } else { + this._sawFirstCr = true; + } + } else { + this._sawFirstCr = false; + } + } + + if (split === -1) { + // still waiting for the \n\n + // stash the chunk, and try again. + this._rawHeader.push(chunk); + } else { + this._inBody = true; + var h = chunk.slice(0, split); + this._rawHeader.push(h); + var header = Buffer.concat(this._rawHeader).toString(); + try { + this.header = JSON.parse(header); + } catch (er) { + this.emit('error', new Error('invalid simple protocol data')); + return; + } + // and let them know that we are done parsing the header. + this.emit('header', this.header); + + // now, because we got some extra data, emit this first. + this.push(chunk.slice(split)); + } + } else { + // from there on, just provide the data to our consumer as-is. + this.push(chunk); + } + done(); +}; + +// Usage: +// var parser = new SimpleProtocol(); +// source.pipe(parser) +// Now parser is a readable stream that will emit 'header' +// with the parsed header data. +``` + +### Class: stream.Writable + + + +`stream.Writable` is an abstract class designed to be extended with an +underlying implementation of the +[`stream._write(chunk, encoding, callback)`][stream-_write] method. + +Please see [API for Stream Consumers][] for how to consume +writable streams in your programs. What follows is an explanation of +how to implement Writable streams in your programs. + +#### new stream.Writable([options]) + +* `options` {Object} + * `highWaterMark` {Number} Buffer level when + [`stream.write()`][stream-write] starts returning `false`. Default = `16384` + (16kb), or `16` for `objectMode` streams. + * `decodeStrings` {Boolean} Whether or not to decode strings into + Buffers before passing them to [`stream._write()`][stream-_write]. + Default = `true` + * `objectMode` {Boolean} Whether or not the + [`stream.write(anyObj)`][stream-write] is a valid operation. If set you can + write arbitrary data instead of only `Buffer` / `String` data. + Default = `false` + * `write` {Function} Implementation for the + [`stream._write()`][stream-_write] method. + * `writev` {Function} Implementation for the + [`stream._writev()`][stream-_writev] method. + +In classes that extend the Writable class, make sure to call the +constructor so that the buffering settings can be properly +initialized. + +#### writable.\_write(chunk, encoding, callback) + +* `chunk` {Buffer|String} The chunk to be written. Will **always** + be a buffer unless the `decodeStrings` option was set to `false`. +* `encoding` {String} If the chunk is a string, then this is the + encoding type. If chunk is a buffer, then this is the special + value - 'buffer', ignore it in this case. +* `callback` {Function} Call this function (optionally with an error + argument) when you are done processing the supplied chunk. + +All Writable stream implementations must provide a +[`stream._write()`][stream-_write] method to send data to the underlying +resource. + +Note: **This function MUST NOT be called directly.** It should be +implemented by child classes, and called by the internal Writable +class methods only. + +Call the callback using the standard `callback(error)` pattern to +signal that the write completed successfully or with an error. + +If the `decodeStrings` flag is set in the constructor options, then +`chunk` may be a string rather than a Buffer, and `encoding` will +indicate the sort of string that it is. This is to support +implementations that have an optimized handling for certain string +data encodings. If you do not explicitly set the `decodeStrings` +option to `false`, then you can safely ignore the `encoding` argument, +and assume that `chunk` will always be a Buffer. + +This method is prefixed with an underscore because it is internal to +the class that defines it, and should not be called directly by user +programs. However, you **are** expected to override this method in +your own extension classes. + +#### writable.\_writev(chunks, callback) + +* `chunks` {Array} The chunks to be written. Each chunk has following + format: `{ chunk: ..., encoding: ... }`. +* `callback` {Function} Call this function (optionally with an error + argument) when you are done processing the supplied chunks. + +Note: **This function MUST NOT be called directly.** It may be +implemented by child classes, and called by the internal Writable +class methods only. + +This function is completely optional to implement. In most cases it is +unnecessary. If implemented, it will be called with all the chunks +that are buffered in the write queue. + + +## Simplified Constructor API + + + +In simple cases there is now the added benefit of being able to construct a +stream without inheritance. + +This can be done by passing the appropriate methods as constructor options: + +Examples: + +### Duplex + +```js +var duplex = new stream.Duplex({ + read: function(n) { + // sets this._read under the hood + + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + }, + write: function(chunk, encoding, next) { + // sets this._write under the hood + + // An optional error can be passed as the first argument + next() + } +}); + +// or + +var duplex = new stream.Duplex({ + read: function(n) { + // sets this._read under the hood + + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + }, + writev: function(chunks, next) { + // sets this._writev under the hood + + // An optional error can be passed as the first argument + next() + } +}); +``` + +### Readable + +```js +var readable = new stream.Readable({ + read: function(n) { + // sets this._read under the hood + + // push data onto the read queue, passing null + // will signal the end of the stream (EOF) + this.push(chunk); + } +}); +``` + +### Transform + +```js +var transform = new stream.Transform({ + transform: function(chunk, encoding, next) { + // sets this._transform under the hood + + // generate output as many times as needed + // this.push(chunk); + + // call when the current chunk is consumed + next(); + }, + flush: function(done) { + // sets this._flush under the hood + + // generate output as many times as needed + // this.push(chunk); + + done(); + } +}); +``` + +### Writable + +```js +var writable = new stream.Writable({ + write: function(chunk, encoding, next) { + // sets this._write under the hood + + // An optional error can be passed as the first argument + next() + } +}); + +// or + +var writable = new stream.Writable({ + writev: function(chunks, next) { + // sets this._writev under the hood + + // An optional error can be passed as the first argument + next() + } +}); +``` + +## Streams: Under the Hood + + + +### Buffering + + + +Both Writable and Readable streams will buffer data on an internal +object which can be retrieved from `_writableState.getBuffer()` or +`_readableState.buffer`, respectively. + +The amount of data that will potentially be buffered depends on the +`highWaterMark` option which is passed into the constructor. + +Buffering in Readable streams happens when the implementation calls +[`stream.push(chunk)`][stream-push]. If the consumer of the Stream does not +call [`stream.read()`][stream-read], then the data will sit in the internal +queue until it is consumed. + +Buffering in Writable streams happens when the user calls +[`stream.write(chunk)`][stream-write] repeatedly, even when it returns `false`. + +The purpose of streams, especially with the [`stream.pipe()`][] method, is to +limit the buffering of data to acceptable levels, so that sources and +destinations of varying speed will not overwhelm the available memory. + +### Compatibility with Older Node.js Versions + + + +In versions of Node.js prior to v0.10, the Readable stream interface was +simpler, but also less powerful and less useful. + +* Rather than waiting for you to call the [`stream.read()`][stream-read] method, + [`'data'`][] events would start emitting immediately. If you needed to do + some I/O to decide how to handle data, then you had to store the chunks + in some kind of buffer so that they would not be lost. +* The [`stream.pause()`][stream-pause] method was advisory, rather than + guaranteed. This meant that you still had to be prepared to receive + [`'data'`][] events even when the stream was in a paused state. + +In Node.js v0.10, the [Readable][] class was added. +For backwards compatibility with older Node.js programs, Readable streams +switch into "flowing mode" when a [`'data'`][] event handler is added, or +when the [`stream.resume()`][stream-resume] method is called. The effect is +that, even if you are not using the new [`stream.read()`][stream-read] method +and [`'readable'`][] event, you no longer have to worry about losing +[`'data'`][] chunks. + +Most programs will continue to function normally. However, this +introduces an edge case in the following conditions: + +* No [`'data'`][] event handler is added. +* The [`stream.resume()`][stream-resume] method is never called. +* The stream is not piped to any writable destination. + +For example, consider the following code: + +```js +// WARNING! BROKEN! +net.createServer((socket) => { + + // we add an 'end' method, but never consume the data + socket.on('end', () => { + // It will never get here. + socket.end('I got your message (but didnt read it)\n'); + }); + +}).listen(1337); +``` + +In versions of Node.js prior to v0.10, the incoming message data would be +simply discarded. However, in Node.js v0.10 and beyond, +the socket will remain paused forever. + +The workaround in this situation is to call the +[`stream.resume()`][stream-resume] method to start the flow of data: + +```js +// Workaround +net.createServer((socket) => { + + socket.on('end', () => { + socket.end('I got your message (but didnt read it)\n'); + }); + + // start the flow of data, discarding it. + socket.resume(); + +}).listen(1337); +``` + +In addition to new Readable streams switching into flowing mode, +pre-v0.10 style streams can be wrapped in a Readable class using the +[`stream.wrap()`][] method. + + +### Object Mode + + + +Normally, Streams operate on Strings and Buffers exclusively. + +Streams that are in **object mode** can emit generic JavaScript values +other than Buffers and Strings. + +A Readable stream in object mode will always return a single item from +a call to [`stream.read(size)`][stream-read], regardless of what the size +argument is. + +A Writable stream in object mode will always ignore the `encoding` +argument to [`stream.write(data, encoding)`][stream-write]. + +The special value `null` still retains its special value for object +mode streams. That is, for object mode readable streams, `null` as a +return value from [`stream.read()`][stream-read] indicates that there is no more +data, and [`stream.push(null)`][stream-push] will signal the end of stream data +(`EOF`). + +No streams in Node.js core are object mode streams. This pattern is only +used by userland streaming libraries. + +You should set `objectMode` in your stream child class constructor on +the options object. Setting `objectMode` mid-stream is not safe. + +For Duplex streams `objectMode` can be set exclusively for readable or +writable side with `readableObjectMode` and `writableObjectMode` +respectively. These options can be used to implement parsers and +serializers with Transform streams. + +```js +const util = require('util'); +const StringDecoder = require('string_decoder').StringDecoder; +const Transform = require('stream').Transform; +util.inherits(JSONParseStream, Transform); + +// Gets \n-delimited JSON string data, and emits the parsed objects +function JSONParseStream() { + if (!(this instanceof JSONParseStream)) + return new JSONParseStream(); + + Transform.call(this, { readableObjectMode : true }); + + this._buffer = ''; + this._decoder = new StringDecoder('utf8'); +} + +JSONParseStream.prototype._transform = function(chunk, encoding, cb) { + this._buffer += this._decoder.write(chunk); + // split on newlines + var lines = this._buffer.split(/\r?\n/); + // keep the last partial line buffered + this._buffer = lines.pop(); + for (var l = 0; l < lines.length; l++) { + var line = lines[l]; + try { + var obj = JSON.parse(line); + } catch (er) { + this.emit('error', er); + return; + } + // push the parsed object out to the readable consumer + this.push(obj); + } + cb(); +}; + +JSONParseStream.prototype._flush = function(cb) { + // Just handle any leftover + var rem = this._buffer.trim(); + if (rem) { + try { + var obj = JSON.parse(rem); + } catch (er) { + this.emit('error', er); + return; + } + // push the parsed object out to the readable consumer + this.push(obj); + } + cb(); +}; +``` + +### `stream.read(0)` + +There are some cases where you want to trigger a refresh of the +underlying readable stream mechanisms, without actually consuming any +data. In that case, you can call `stream.read(0)`, which will always +return null. + +If the internal read buffer is below the `highWaterMark`, and the +stream is not currently reading, then calling `stream.read(0)` will trigger +a low-level [`stream._read()`][stream-_read] call. + +There is almost never a need to do this. However, you will see some +cases in Node.js's internals where this is done, particularly in the +Readable stream class internals. + +### `stream.push('')` + +Pushing a zero-byte string or Buffer (when not in [Object mode][]) has an +interesting side effect. Because it *is* a call to +[`stream.push()`][stream-push], it will end the `reading` process. However, it +does *not* add any data to the readable buffer, so there's nothing for +a user to consume. + +Very rarely, there are cases where you have no data to provide now, +but the consumer of your stream (or, perhaps, another bit of your own +code) will know when to check again, by calling [`stream.read(0)`][stream-read]. +In those cases, you *may* call `stream.push('')`. + +So far, the only use case for this functionality is in the +[`tls.CryptoStream`][] class, which is deprecated in Node.js/io.js v1.0. If you +find that you have to use `stream.push('')`, please consider another +approach, because it almost certainly indicates that something is +horribly wrong. + +[`'data'`]: #stream_event_data +[`'drain'`]: #stream_event_drain +[`'end'`]: #stream_event_end +[`'finish'`]: #stream_event_finish +[`'readable'`]: #stream_event_readable +[`buf.toString(encoding)`]: https://nodejs.org/docs/v5.8.0/api/buffer.html#buffer_buf_tostring_encoding_start_end +[`EventEmitter`]: https://nodejs.org/docs/v5.8.0/api/events.html#events_class_eventemitter +[`process.stderr`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stderr +[`process.stdin`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stdin +[`process.stdout`]: https://nodejs.org/docs/v5.8.0/api/process.html#process_process_stdout +[`stream.cork()`]: #stream_writable_cork +[`stream.pipe()`]: #stream_readable_pipe_destination_options +[`stream.uncork()`]: #stream_writable_uncork +[`stream.unpipe()`]: #stream_readable_unpipe_destination +[`stream.wrap()`]: #stream_readable_wrap_stream +[`tls.CryptoStream`]: https://nodejs.org/docs/v5.8.0/api/tls.html#tls_class_cryptostream +[`util.inherits()`]: https://nodejs.org/docs/v5.8.0/api/util.html#util_util_inherits_constructor_superconstructor +[API for Stream Consumers]: #stream_api_for_stream_consumers +[API for Stream Implementors]: #stream_api_for_stream_implementors +[child process stdin]: https://nodejs.org/docs/v5.8.0/api/child_process.html#child_process_child_stdin +[child process stdout and stderr]: https://nodejs.org/docs/v5.8.0/api/child_process.html#child_process_child_stdout +[Compatibility]: #stream_compatibility_with_older_node_js_versions +[crypto]: crypto.html +[Duplex]: #stream_class_stream_duplex +[fs read streams]: https://nodejs.org/docs/v5.8.0/api/fs.html#fs_class_fs_readstream +[fs write streams]: https://nodejs.org/docs/v5.8.0/api/fs.html#fs_class_fs_writestream +[HTTP requests, on the client]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_clientrequest +[HTTP responses, on the server]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_serverresponse +[http-incoming-message]: https://nodejs.org/docs/v5.8.0/api/http.html#http_class_http_incomingmessage +[Object mode]: #stream_object_mode +[Readable]: #stream_class_stream_readable +[SimpleProtocol v2]: #stream_example_simpleprotocol_parser_v2 +[stream-_flush]: #stream_transform_flush_callback +[stream-_read]: #stream_readable_read_size_1 +[stream-_transform]: #stream_transform_transform_chunk_encoding_callback +[stream-_write]: #stream_writable_write_chunk_encoding_callback_1 +[stream-_writev]: #stream_writable_writev_chunks_callback +[stream-end]: #stream_writable_end_chunk_encoding_callback +[stream-pause]: #stream_readable_pause +[stream-push]: #stream_readable_push_chunk_encoding +[stream-read]: #stream_readable_read_size +[stream-resume]: #stream_readable_resume +[stream-write]: #stream_writable_write_chunk_encoding_callback +[TCP sockets]: https://nodejs.org/docs/v5.8.0/api/net.html#net_class_net_socket +[Transform]: #stream_class_stream_transform +[Writable]: #stream_class_stream_writable +[zlib]: zlib.html diff --git a/node_modules/archiver/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md diff --git a/node_modules/crc32-stream/node_modules/readable-stream/duplex.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/duplex.js similarity index 100% rename from node_modules/crc32-stream/node_modules/readable-stream/duplex.js rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/duplex.js diff --git a/node_modules/archiver/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_duplex.js similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/lib/_stream_duplex.js rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_duplex.js diff --git a/node_modules/archiver/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_passthrough.js similarity index 100% rename from node_modules/archiver/node_modules/readable-stream/lib/_stream_passthrough.js rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_passthrough.js diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 000000000..54a9d5c55 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,880 @@ +'use strict'; + +module.exports = Readable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Readable.ReadableState = ReadableState; + +var EE = require('events'); + +/**/ +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream; +(function () { + try { + Stream = require('st' + 'ream'); + } catch (_) {} finally { + if (!Stream) Stream = require('events').EventEmitter; + } +})(); +/**/ + +var Buffer = require('buffer').Buffer; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = undefined; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var StringDecoder; + +util.inherits(Readable, Stream); + +var Duplex; +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~ ~this.highWaterMark; + + this.buffer = []; + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +var Duplex; +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options && typeof options.read === 'function') this._read = options.read; + + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + + if (!state.objectMode && typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = new Buffer(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var e = new Error('stream.unshift() after end event'); + stream.emit('error', e); + } else { + var skipAdd; + if (state.decoder && !addToFront && !encoding) { + chunk = state.decoder.write(chunk); + skipAdd = !state.objectMode && chunk.length === 0; + } + + if (!addToFront) state.reading = false; + + // Don't add to the buffer if we've decoded to an empty string chunk and + // we're not in object mode + if (!skipAdd) { + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + } + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +function howMuchToRead(n, state) { + if (state.length === 0 && state.ended) return 0; + + if (state.objectMode) return n === 0 ? 0 : 1; + + if (n === null || isNaN(n)) { + // only flow one buffer at a time + if (state.flowing && state.buffer.length) return state.buffer[0].length;else return state.length; + } + + if (n <= 0) return 0; + + // If we're asking for more than the target buffer level, + // then raise the water mark. Bump up to the next highest + // power of 2, to prevent increasing it excessively in tiny + // amounts. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + + // don't have that much. return null, unless we've ended. + if (n > state.length) { + if (!state.ended) { + state.needReadable = true; + return 0; + } else { + return state.length; + } + } + + return n; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + var state = this._readableState; + var nOrig = n; + + if (typeof n !== 'number' || n > 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } + + if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + } + + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (doRead && !state.reading) n = howMuchToRead(nOrig, state); + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } + + state.length -= n; + + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (state.length === 0 && !state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended && state.length === 0) endReadable(this); + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function chunkInvalid(state, chunk) { + var er = null; + if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + processNextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + debug('onunpipe'); + if (readable === src) { + cleanup(); + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + if (false === ret) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + if (state.pipesCount === 1 && state.pipes[0] === dest && src.listenerCount('data') === 1 && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + // This is a brutally ugly hack to make sure that our error handler + // is attached before any userland ones. NEVER DO THIS. + if (!dest._events || !dest._events.error) dest.on('error', onerror);else if (isArray(dest._events.error)) dest._events.error.unshift(onerror);else dest._events.error = [onerror, dest._events.error]; + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var _i = 0; _i < len; _i++) { + dests[_i].emit('unpipe', this); + }return this; + } + + // try to find the right one. + var i = indexOf(state.pipes, dest); + if (i === -1) return this; + + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + // If listening to data, and it has not explicitly been paused, + // then call resume to start the flow of data on the next tick. + if (ev === 'data' && false !== this._readableState.flowing) { + this.resume(); + } + + if (ev === 'readable' && !this._readableState.endEmitted) { + var state = this._readableState; + if (!state.readableListening) { + state.readableListening = true; + state.emittedReadable = false; + state.needReadable = true; + if (!state.reading) { + processNextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this, state); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + processNextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + if (state.flowing) { + do { + var chunk = stream.read(); + } while (null !== chunk && state.flowing); + } +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function (ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +function fromList(n, state) { + var list = state.buffer; + var length = state.length; + var stringMode = !!state.decoder; + var objectMode = !!state.objectMode; + var ret; + + // nothing in the list, definitely empty. + if (list.length === 0) return null; + + if (length === 0) ret = null;else if (objectMode) ret = list.shift();else if (!n || n >= length) { + // read it all, truncate the array. + if (stringMode) ret = list.join('');else if (list.length === 1) ret = list[0];else ret = Buffer.concat(list, length); + list.length = 0; + } else { + // read just some of it. + if (n < list[0].length) { + // just take a part of the first list item. + // slice is the same for buffers and strings. + var buf = list[0]; + ret = buf.slice(0, n); + list[0] = buf.slice(n); + } else if (n === list[0].length) { + // first list is a perfect match + ret = list.shift(); + } else { + // complex case. + // we have enough to cover it, but it spans past the first buffer. + if (stringMode) ret = '';else ret = new Buffer(n); + + var c = 0; + for (var i = 0, l = list.length; i < l && c < n; i++) { + var buf = list[0]; + var cpy = Math.min(n - c, buf.length); + + if (stringMode) ret += buf.slice(0, cpy);else buf.copy(ret, c, 0, cpy); + + if (cpy < buf.length) list[0] = buf.slice(cpy);else list.shift(); + + c += cpy; + } + } + } + + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('endReadable called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + processNextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} \ No newline at end of file diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 000000000..625cdc176 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,180 @@ +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function TransformState(stream) { + this.afterTransform = function (er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; + this.writeencoding = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) stream.push(data); + + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = new TransformState(this); + + // when the writable side finishes, then flush out anything remaining. + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + this.once('prefinish', function () { + if (typeof this._flush === 'function') this._flush(function (er) { + done(stream, er); + });else done(stream); + }); +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +function done(stream, er) { + if (er) return stream.emit('error', er); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; + + if (ws.length) throw new Error('calling transform done when ws.length != 0'); + + if (ts.transforming) throw new Error('calling transform done when still transforming'); + + return stream.push(null); +} \ No newline at end of file diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 000000000..95916c992 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,516 @@ +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +module.exports = Writable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; +/**/ + +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream; +(function () { + try { + Stream = require('st' + 'ream'); + } catch (_) {} finally { + if (!Stream) Stream = require('events').EventEmitter; + } +})(); +/**/ + +var Buffer = require('buffer').Buffer; + +util.inherits(Writable, Stream); + +function nop() {} + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +var Duplex; +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~ ~this.highWaterMark; + + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // create the two objects needed to store the corked requests + // they are not a linked list, as no new elements are inserted in there + this.corkedRequestsFree = new CorkedRequest(this); + this.corkedRequestsFree.next = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function writableStateGetBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') + }); + } catch (_) {} +})(); + +var Duplex; +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options); + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe. Not readable.')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + processNextTick(cb, er); +} + +// If we get something that is not a buffer, string, null, or undefined, +// and we're not in objectMode, then that's an error. +// Otherwise stream chunks are all considered to be of length=1, and the +// watermarks determine how many objects to keep in the buffer, rather than +// how many bytes or characters. +function validChunk(stream, state, chunk, cb) { + var valid = true; + + if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + var er = new TypeError('Invalid non-string/buffer chunk'); + stream.emit('error', er); + processNextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + + if (Buffer.isBuffer(chunk)) encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) processNextTick(cb, er);else cb(er); + + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + while (entry) { + buffer[count] = entry; + entry = entry.next; + count += 1; + } + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequestCount = 0; + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} + +function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else { + prefinish(stream, state); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) processNextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + + this.finish = function (err) { + var entry = _this.entry; + _this.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = _this; + } else { + state.corkedRequestsFree = _this; + } + }; +} \ No newline at end of file diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/package.json b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/package.json new file mode 100644 index 000000000..d77b090ec --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/package.json @@ -0,0 +1,37 @@ +{ + "name": "readable-stream", + "version": "2.0.6", + "description": "Streams3, a user-land copy of the stream library from Node.js", + "main": "readable.js", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + }, + "devDependencies": { + "tap": "~0.2.6", + "tape": "~4.5.1", + "zuul": "~3.9.0" + }, + "scripts": { + "test": "tap test/parallel/*.js test/ours/*.js", + "browser": "npm run write-zuul && zuul -- test/browser.js", + "write-zuul": "printf \"ui: tape\nbrowsers:\n - name: $BROWSER_NAME\n version: $BROWSER_VERSION\n\">.zuul.yml" + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/readable-stream" + }, + "keywords": [ + "readable", + "stream", + "pipe" + ], + "browser": { + "util": false + }, + "license": "MIT" +} diff --git a/node_modules/crc32-stream/node_modules/readable-stream/passthrough.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/passthrough.js similarity index 100% rename from node_modules/crc32-stream/node_modules/readable-stream/passthrough.js rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/passthrough.js diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/readable.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/readable.js new file mode 100644 index 000000000..6222a5798 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/readable.js @@ -0,0 +1,12 @@ +var Stream = (function (){ + try { + return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify + } catch(_){} +}()); +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = Stream || exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/crc32-stream/node_modules/readable-stream/transform.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/transform.js similarity index 100% rename from node_modules/crc32-stream/node_modules/readable-stream/transform.js rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/transform.js diff --git a/node_modules/crc32-stream/node_modules/readable-stream/writable.js b/node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/writable.js similarity index 100% rename from node_modules/crc32-stream/node_modules/readable-stream/writable.js rename to node_modules/gulp/node_modules/gulp-util/node_modules/readable-stream/writable.js diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/through2/.npmignore b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/.npmignore new file mode 100644 index 000000000..1e1dcab34 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/.npmignore @@ -0,0 +1,3 @@ +test +.jshintrc +.travis.yml \ No newline at end of file diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/through2/LICENSE b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/LICENSE new file mode 100644 index 000000000..f6a0029de --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/LICENSE @@ -0,0 +1,39 @@ +Copyright 2013, Rod Vagg (the "Original Author") +All rights reserved. + +MIT +no-false-attribs License + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +Distributions of all or part of the Software intended to be used +by the recipients as they would use the unmodified Software, +containing modifications that substantially alter, remove, or +disable functionality of the Software, outside of the documented +configuration mechanisms provided by the Software, shall be +modified such that the Original Author's bug reporting email +addresses and urls are either replaced with the contact information +of the parties responsible for the changes, or removed entirely. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +Except where noted, this license applies to any and all software +programs and associated documentation files created by the +Original Author, when distributed with the Software. \ No newline at end of file diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/through2/README.md b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/README.md new file mode 100644 index 000000000..c84b3464a --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/README.md @@ -0,0 +1,133 @@ +# through2 + +[![NPM](https://nodei.co/npm/through2.png?downloads&downloadRank)](https://nodei.co/npm/through2/) + +**A tiny wrapper around Node streams.Transform (Streams2) to avoid explicit subclassing noise** + +Inspired by [Dominic Tarr](https://github.com/dominictarr)'s [through](https://github.com/dominictarr/through) in that it's so much easier to make a stream out of a function than it is to set up the prototype chain properly: `through(function (chunk) { ... })`. + +Note: As 2.x.x this module starts using **Streams3** instead of Stream2. To continue using a Streams2 version use `npm install through2@0` to fetch the latest version of 0.x.x. More information about Streams2 vs Streams3 and recommendations see the article **[Why I don't use Node's core 'stream' module](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html)**. + +```js +fs.createReadStream('ex.txt') + .pipe(through2(function (chunk, enc, callback) { + for (var i = 0; i < chunk.length; i++) + if (chunk[i] == 97) + chunk[i] = 122 // swap 'a' for 'z' + + this.push(chunk) + + callback() + })) + .pipe(fs.createWriteStream('out.txt')) +``` + +Or object streams: + +```js +var all = [] + +fs.createReadStream('data.csv') + .pipe(csv2()) + .pipe(through2.obj(function (chunk, enc, callback) { + var data = { + name : chunk[0] + , address : chunk[3] + , phone : chunk[10] + } + this.push(data) + + callback() + })) + .on('data', function (data) { + all.push(data) + }) + .on('end', function () { + doSomethingSpecial(all) + }) +``` + +Note that `through2.obj(fn)` is a convenience wrapper around `through2({ objectMode: true }, fn)`. + +## API + +through2([ options, ] [ transformFunction ] [, flushFunction ]) + +Consult the **[stream.Transform](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_transform)** documentation for the exact rules of the `transformFunction` (i.e. `this._transform`) and the optional `flushFunction` (i.e. `this._flush`). + +### options + +The options argument is optional and is passed straight through to `stream.Transform`. So you can use `objectMode:true` if you are processing non-binary streams (or just use `through2.obj()`). + +The `options` argument is first, unlike standard convention, because if I'm passing in an anonymous function then I'd prefer for the options argument to not get lost at the end of the call: + +```js +fs.createReadStream('/tmp/important.dat') + .pipe(through2({ objectMode: true, allowHalfOpen: false }, + function (chunk, enc, cb) { + cb(null, 'wut?') // note we can use the second argument on the callback + // to provide data as an alternative to this.push('wut?') + } + ) + .pipe(fs.createWriteStream('/tmp/wut.txt')) +``` + +### transformFunction + +The `transformFunction` must have the following signature: `function (chunk, encoding, callback) {}`. A minimal implementation should call the `callback` function to indicate that the transformation is done, even if that transformation means discarding the chunk. + +To queue a new chunk, call `this.push(chunk)`—this can be called as many times as required before the `callback()` if you have multiple pieces to send on. + +Alternatively, you may use `callback(err, chunk)` as shorthand for emitting a single chunk or an error. + +If you **do not provide a `transformFunction`** then you will get a simple pass-through stream. + +### flushFunction + +The optional `flushFunction` is provided as the last argument (2nd or 3rd, depending on whether you've supplied options) is called just prior to the stream ending. Can be used to finish up any processing that may be in progress. + +```js +fs.createReadStream('/tmp/important.dat') + .pipe(through2( + function (chunk, enc, cb) { cb(null, chunk) }, // transform is a noop + function (cb) { // flush function + this.push('tacking on an extra buffer to the end'); + cb(); + } + )) + .pipe(fs.createWriteStream('/tmp/wut.txt')); +``` + +through2.ctor([ options, ] transformFunction[, flushFunction ]) + +Instead of returning a `stream.Transform` instance, `through2.ctor()` returns a **constructor** for a custom Transform. This is useful when you want to use the same transform logic in multiple instances. + +```js +var FToC = through2.ctor({objectMode: true}, function (record, encoding, callback) { + if (record.temp != null && record.unit == "F") { + record.temp = ( ( record.temp - 32 ) * 5 ) / 9 + record.unit = "C" + } + this.push(record) + callback() +}) + +// Create instances of FToC like so: +var converter = new FToC() +// Or: +var converter = FToC() +// Or specify/override options when you instantiate, if you prefer: +var converter = FToC({objectMode: true}) +``` + +## See Also + + - [through2-map](https://github.com/brycebaril/through2-map) - Array.prototype.map analog for streams. + - [through2-filter](https://github.com/brycebaril/through2-filter) - Array.prototype.filter analog for streams. + - [through2-reduce](https://github.com/brycebaril/through2-reduce) - Array.prototype.reduce analog for streams. + - [through2-spy](https://github.com/brycebaril/through2-spy) - Wrapper for simple stream.PassThrough spies. + - the [mississippi stream utility collection](https://github.com/maxogden/mississippi) includes `through2` as well as many more useful stream modules similar to this one + +## License + +**through2** is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/through2/package.json b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/package.json new file mode 100644 index 000000000..c7afac7f0 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/package.json @@ -0,0 +1,32 @@ +{ + "name": "through2", + "version": "2.0.1", + "description": "A tiny wrapper around Node streams2 Transform to avoid explicit subclassing noise", + "main": "through2.js", + "scripts": { + "test": "node test/test.js | faucet", + "test-local": "brtapsauce-local test/basic-test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/rvagg/through2.git" + }, + "keywords": [ + "stream", + "streams2", + "through", + "transform" + ], + "author": "Rod Vagg (https://github.com/rvagg)", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" + }, + "devDependencies": { + "bl": "~0.9.4", + "faucet": "0.0.1", + "stream-spigot": "~3.0.5", + "tape": "~4.0.0" + } +} diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/through2/through2.js b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/through2.js new file mode 100644 index 000000000..5b7a880e8 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/through2/through2.js @@ -0,0 +1,96 @@ +var Transform = require('readable-stream/transform') + , inherits = require('util').inherits + , xtend = require('xtend') + +function DestroyableTransform(opts) { + Transform.call(this, opts) + this._destroyed = false +} + +inherits(DestroyableTransform, Transform) + +DestroyableTransform.prototype.destroy = function(err) { + if (this._destroyed) return + this._destroyed = true + + var self = this + process.nextTick(function() { + if (err) + self.emit('error', err) + self.emit('close') + }) +} + +// a noop _transform function +function noop (chunk, enc, callback) { + callback(null, chunk) +} + + +// create a new export function, used by both the main export and +// the .ctor export, contains common logic for dealing with arguments +function through2 (construct) { + return function (options, transform, flush) { + if (typeof options == 'function') { + flush = transform + transform = options + options = {} + } + + if (typeof transform != 'function') + transform = noop + + if (typeof flush != 'function') + flush = null + + return construct(options, transform, flush) + } +} + + +// main export, just make me a transform stream! +module.exports = through2(function (options, transform, flush) { + var t2 = new DestroyableTransform(options) + + t2._transform = transform + + if (flush) + t2._flush = flush + + return t2 +}) + + +// make me a reusable prototype that I can `new`, or implicitly `new` +// with a constructor call +module.exports.ctor = through2(function (options, transform, flush) { + function Through2 (override) { + if (!(this instanceof Through2)) + return new Through2(override) + + this.options = xtend(options, override) + + DestroyableTransform.call(this, this.options) + } + + inherits(Through2, DestroyableTransform) + + Through2.prototype._transform = transform + + if (flush) + Through2.prototype._flush = flush + + return Through2 +}) + + +module.exports.obj = through2(function (options, transform, flush) { + var t2 = new DestroyableTransform(xtend({ objectMode: true, highWaterMark: 16 }, options)) + + t2._transform = transform + + if (flush) + t2._flush = flush + + return t2 +}) diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/LICENSE b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/LICENSE new file mode 100644 index 000000000..4f482f9ba --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2013 Fractal + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/README.md b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/README.md new file mode 100644 index 000000000..2d57d8566 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/README.md @@ -0,0 +1,195 @@ +# vinyl [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status](https://david-dm.org/wearefractal/vinyl.png?theme=shields.io)](https://david-dm.org/wearefractal/vinyl) +## Information +











    Packagevinyl
    DescriptionA virtual file format
    Node Version>= 0.9
    + +## What is this? +Read this for more info about how this plays into the grand scheme of things [https://medium.com/@eschoff/3828e8126466](https://medium.com/@eschoff/3828e8126466) + +## File + +```javascript +var File = require('vinyl'); + +var coffeeFile = new File({ + cwd: "/", + base: "/test/", + path: "/test/file.coffee", + contents: new Buffer("test = 123") +}); +``` + +### isVinyl +When checking if an object is a vinyl file, you should not use instanceof. Use the isVinyl function instead. + +```js +var File = require('vinyl'); + +var dummy = new File({stuff}); +var notAFile = {}; + +File.isVinyl(dummy); // true +File.isVinyl(notAFile); // false +``` + +### constructor(options) +#### options.cwd +Type: `String`

    Default: `process.cwd()` + +#### options.base +Used for relative pathing. Typically where a glob starts. + +Type: `String`

    Default: `options.cwd` + +#### options.path +Full path to the file. + +Type: `String`

    Default: `undefined` + +#### options.history +Path history. Has no effect if `options.path` is passed. + +Type: `Array`

    Default: `options.path ? [options.path] : []` + +#### options.stat +The result of an fs.stat call. See [fs.Stats](http://nodejs.org/api/fs.html#fs_class_fs_stats) for more information. + +Type: `fs.Stats`

    Default: `null` + +#### options.contents +File contents. + +Type: `Buffer, Stream, or null`

    Default: `null` + +### isBuffer() +Returns true if file.contents is a Buffer. + +### isStream() +Returns true if file.contents is a Stream. + +### isNull() +Returns true if file.contents is null. + +### clone([opt]) +Returns a new File object with all attributes cloned.
    By default custom attributes are deep-cloned. + +If opt or opt.deep is false, custom attributes will not be deep-cloned. + +If opt.contents is false, it will copy file.contents Buffer's reference. + +### pipe(stream[, opt]) +If file.contents is a Buffer, it will write it to the stream. + +If file.contents is a Stream, it will pipe it to the stream. + +If file.contents is null, it will do nothing. + +If opt.end is false, the destination stream will not be ended (same as node core). + +Returns the stream. + +### inspect() +Returns a pretty String interpretation of the File. Useful for console.log. + +### contents +The [Stream](https://nodejs.org/api/stream.html#stream_stream) or [Buffer](https://nodejs.org/api/buffer.html#buffer_class_buffer) of the file as it was passed in via options, or as the result of modification. + +For example: + +```js +if (file.isBuffer()) { + console.log(file.contents.toString()); // logs out the string of contents +} +``` + +### path +Absolute pathname string or `undefined`. Setting to a different value pushes the old value to `history`. + +### history +Array of `path` values the file object has had, from `history[0]` (original) through `history[history.length - 1]` (current). `history` and its elements should normally be treated as read-only and only altered indirectly by setting `path`. + +### relative +Returns path.relative for the file base and file path. + +Example: + +```javascript +var file = new File({ + cwd: "/", + base: "/test/", + path: "/test/file.coffee" +}); + +console.log(file.relative); // file.coffee +``` + +### dirname +Gets and sets path.dirname for the file path. + +Example: + +```javascript +var file = new File({ + cwd: "/", + base: "/test/", + path: "/test/file.coffee" +}); + +console.log(file.dirname); // /test + +file.dirname = '/specs'; + +console.log(file.dirname); // /specs +console.log(file.path); // /specs/file.coffee +` +``` + +### basename +Gets and sets path.basename for the file path. + +Example: + +```javascript +var file = new File({ + cwd: "/", + base: "/test/", + path: "/test/file.coffee" +}); + +console.log(file.basename); // file.coffee + +file.basename = 'file.js'; + +console.log(file.basename); // file.js +console.log(file.path); // /test/file.js +` +``` + +### extname +Gets and sets path.extname for the file path. + +Example: + +```javascript +var file = new File({ + cwd: "/", + base: "/test/", + path: "/test/file.coffee" +}); + +console.log(file.extname); // .coffee + +file.extname = '.js'; + +console.log(file.extname); // .js +console.log(file.path); // /test/file.js +` +``` + +[npm-url]: https://npmjs.org/package/vinyl +[npm-image]: https://badge.fury.io/js/vinyl.png +[travis-url]: https://travis-ci.org/wearefractal/vinyl +[travis-image]: https://travis-ci.org/wearefractal/vinyl.png?branch=master +[coveralls-url]: https://coveralls.io/r/wearefractal/vinyl +[coveralls-image]: https://coveralls.io/repos/wearefractal/vinyl/badge.png +[depstat-url]: https://david-dm.org/wearefractal/vinyl +[depstat-image]: https://david-dm.org/wearefractal/vinyl.png diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/index.js b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/index.js new file mode 100644 index 000000000..c8f113ffe --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/index.js @@ -0,0 +1,213 @@ +var path = require('path'); +var clone = require('clone'); +var cloneStats = require('clone-stats'); +var cloneBuffer = require('./lib/cloneBuffer'); +var isBuffer = require('./lib/isBuffer'); +var isStream = require('./lib/isStream'); +var isNull = require('./lib/isNull'); +var inspectStream = require('./lib/inspectStream'); +var Stream = require('stream'); +var replaceExt = require('replace-ext'); + +function File(file) { + if (!file) file = {}; + + // record path change + var history = file.path ? [file.path] : file.history; + this.history = history || []; + + this.cwd = file.cwd || process.cwd(); + this.base = file.base || this.cwd; + + // stat = files stats object + this.stat = file.stat || null; + + // contents = stream, buffer, or null if not read + this.contents = file.contents || null; + + this._isVinyl = true; +} + +File.prototype.isBuffer = function() { + return isBuffer(this.contents); +}; + +File.prototype.isStream = function() { + return isStream(this.contents); +}; + +File.prototype.isNull = function() { + return isNull(this.contents); +}; + +// TODO: should this be moved to vinyl-fs? +File.prototype.isDirectory = function() { + return this.isNull() && this.stat && this.stat.isDirectory(); +}; + +File.prototype.clone = function(opt) { + if (typeof opt === 'boolean') { + opt = { + deep: opt, + contents: true + }; + } else if (!opt) { + opt = { + deep: true, + contents: true + }; + } else { + opt.deep = opt.deep === true; + opt.contents = opt.contents !== false; + } + + // clone our file contents + var contents; + if (this.isStream()) { + contents = this.contents.pipe(new Stream.PassThrough()); + this.contents = this.contents.pipe(new Stream.PassThrough()); + } else if (this.isBuffer()) { + contents = opt.contents ? cloneBuffer(this.contents) : this.contents; + } + + var file = new File({ + cwd: this.cwd, + base: this.base, + stat: (this.stat ? cloneStats(this.stat) : null), + history: this.history.slice(), + contents: contents + }); + + // clone our custom properties + Object.keys(this).forEach(function(key) { + // ignore built-in fields + if (key === '_contents' || key === 'stat' || + key === 'history' || key === 'path' || + key === 'base' || key === 'cwd') { + return; + } + file[key] = opt.deep ? clone(this[key], true) : this[key]; + }, this); + return file; +}; + +File.prototype.pipe = function(stream, opt) { + if (!opt) opt = {}; + if (typeof opt.end === 'undefined') opt.end = true; + + if (this.isStream()) { + return this.contents.pipe(stream, opt); + } + if (this.isBuffer()) { + if (opt.end) { + stream.end(this.contents); + } else { + stream.write(this.contents); + } + return stream; + } + + // isNull + if (opt.end) stream.end(); + return stream; +}; + +File.prototype.inspect = function() { + var inspect = []; + + // use relative path if possible + var filePath = (this.base && this.path) ? this.relative : this.path; + + if (filePath) { + inspect.push('"'+filePath+'"'); + } + + if (this.isBuffer()) { + inspect.push(this.contents.inspect()); + } + + if (this.isStream()) { + inspect.push(inspectStream(this.contents)); + } + + return ''; +}; + +File.isVinyl = function(file) { + return file && file._isVinyl === true; +}; + +// virtual attributes +// or stuff with extra logic +Object.defineProperty(File.prototype, 'contents', { + get: function() { + return this._contents; + }, + set: function(val) { + if (!isBuffer(val) && !isStream(val) && !isNull(val)) { + throw new Error('File.contents can only be a Buffer, a Stream, or null.'); + } + this._contents = val; + } +}); + +// TODO: should this be moved to vinyl-fs? +Object.defineProperty(File.prototype, 'relative', { + get: function() { + if (!this.base) throw new Error('No base specified! Can not get relative.'); + if (!this.path) throw new Error('No path specified! Can not get relative.'); + return path.relative(this.base, this.path); + }, + set: function() { + throw new Error('File.relative is generated from the base and path attributes. Do not modify it.'); + } +}); + +Object.defineProperty(File.prototype, 'dirname', { + get: function() { + if (!this.path) throw new Error('No path specified! Can not get dirname.'); + return path.dirname(this.path); + }, + set: function(dirname) { + if (!this.path) throw new Error('No path specified! Can not set dirname.'); + this.path = path.join(dirname, path.basename(this.path)); + } +}); + +Object.defineProperty(File.prototype, 'basename', { + get: function() { + if (!this.path) throw new Error('No path specified! Can not get basename.'); + return path.basename(this.path); + }, + set: function(basename) { + if (!this.path) throw new Error('No path specified! Can not set basename.'); + this.path = path.join(path.dirname(this.path), basename); + } +}); + +Object.defineProperty(File.prototype, 'extname', { + get: function() { + if (!this.path) throw new Error('No path specified! Can not get extname.'); + return path.extname(this.path); + }, + set: function(extname) { + if (!this.path) throw new Error('No path specified! Can not set extname.'); + this.path = replaceExt(this.path, extname); + } +}); + +Object.defineProperty(File.prototype, 'path', { + get: function() { + return this.history[this.history.length - 1]; + }, + set: function(path) { + if (typeof path !== 'string') throw new Error('path should be string'); + + // record history only when path changed + if (path && path !== this.path) { + this.history.push(path); + } + } +}); + +module.exports = File; diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js new file mode 100644 index 000000000..89f09eda1 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js @@ -0,0 +1,7 @@ +var Buffer = require('buffer').Buffer; + +module.exports = function(buf) { + var out = new Buffer(buf.length); + buf.copy(out); + return out; +}; diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js new file mode 100644 index 000000000..d36df6ff6 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js @@ -0,0 +1,11 @@ +var isStream = require('./isStream'); + +module.exports = function(stream) { + if (!isStream(stream)) return; + + var streamType = stream.constructor.name; + // avoid StreamStream + if (streamType === 'Stream') streamType = ''; + + return '<'+streamType+'Stream>'; +}; diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js new file mode 100644 index 000000000..8a767d174 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js @@ -0,0 +1 @@ +module.exports = require('buffer').Buffer.isBuffer; diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js new file mode 100644 index 000000000..7f22c63ae --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js @@ -0,0 +1,3 @@ +module.exports = function(v) { + return v === null; +}; diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js new file mode 100644 index 000000000..9ce0929b0 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js @@ -0,0 +1,5 @@ +var Stream = require('stream').Stream; + +module.exports = function(o) { + return !!o && o instanceof Stream; +}; \ No newline at end of file diff --git a/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/package.json b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/package.json new file mode 100644 index 000000000..6000cffb3 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/node_modules/vinyl/package.json @@ -0,0 +1,37 @@ +{ + "name": "vinyl", + "description": "A virtual file format", + "version": "0.5.3", + "homepage": "http://github.com/wearefractal/vinyl", + "repository": "git://github.com/wearefractal/vinyl.git", + "author": "Fractal (http://wearefractal.com/)", + "main": "./index.js", + "files": [ + "index.js", + "lib" + ], + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "devDependencies": { + "buffer-equal": "0.0.1", + "event-stream": "^3.1.0", + "istanbul": "^0.3.0", + "istanbul-coveralls": "^1.0.1", + "jshint": "^2.4.1", + "lodash.templatesettings": "^3.1.0", + "mocha": "^2.0.0", + "rimraf": "^2.2.5", + "should": "^7.0.0" + }, + "scripts": { + "test": "mocha && jshint lib", + "coveralls": "istanbul cover _mocha && istanbul-coveralls" + }, + "engines": { + "node": ">= 0.9" + }, + "license": "MIT" +} diff --git a/node_modules/gulp/node_modules/gulp-util/package.json b/node_modules/gulp/node_modules/gulp-util/package.json new file mode 100644 index 000000000..7ef3b82d7 --- /dev/null +++ b/node_modules/gulp/node_modules/gulp-util/package.json @@ -0,0 +1,51 @@ +{ + "name": "gulp-util", + "description": "Utility functions for gulp plugins", + "version": "3.0.7", + "repository": "gulpjs/gulp-util", + "author": "Fractal (http://wearefractal.com/)", + "files": [ + "index.js", + "lib" + ], + "dependencies": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^1.0.11", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "devDependencies": { + "buffer-equal": "^0.0.1", + "coveralls": "^2.11.2", + "event-stream": "^3.1.7", + "istanbul": "^0.3.5", + "istanbul-coveralls": "^1.0.1", + "jshint": "^2.5.11", + "lodash.templatesettings": "^3.0.0", + "mocha": "^2.0.1", + "rimraf": "^2.2.8", + "should": "^7.0.1" + }, + "scripts": { + "test": "jshint *.js lib/*.js test/*.js && mocha", + "coveralls": "istanbul cover _mocha --report lcovonly && istanbul-coveralls" + }, + "engines": { + "node": ">=0.10" + }, + "license": "MIT" +} diff --git a/node_modules/gulp/node_modules/lodash._reinterpolate/LICENSE.txt b/node_modules/gulp/node_modules/lodash._reinterpolate/LICENSE.txt new file mode 100644 index 000000000..17764328c --- /dev/null +++ b/node_modules/gulp/node_modules/lodash._reinterpolate/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/gulp/node_modules/lodash._reinterpolate/README.md b/node_modules/gulp/node_modules/lodash._reinterpolate/README.md new file mode 100644 index 000000000..1423e502f --- /dev/null +++ b/node_modules/gulp/node_modules/lodash._reinterpolate/README.md @@ -0,0 +1,20 @@ +# lodash._reinterpolate v3.0.0 + +The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `reInterpolate` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. + +## Installation + +Using npm: + +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash._reinterpolate +``` + +In Node.js/io.js: + +```js +var reInterpolate = require('lodash._reinterpolate'); +``` + +See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._reinterpolate) for more details. diff --git a/node_modules/gulp/node_modules/lodash._reinterpolate/index.js b/node_modules/gulp/node_modules/lodash._reinterpolate/index.js new file mode 100644 index 000000000..5c06abcf3 --- /dev/null +++ b/node_modules/gulp/node_modules/lodash._reinterpolate/index.js @@ -0,0 +1,13 @@ +/** + * lodash 3.0.0 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.7.0 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/node_modules/gulp/node_modules/lodash._reinterpolate/package.json b/node_modules/gulp/node_modules/lodash._reinterpolate/package.json new file mode 100644 index 000000000..4cc9f1a53 --- /dev/null +++ b/node_modules/gulp/node_modules/lodash._reinterpolate/package.json @@ -0,0 +1,18 @@ +{ + "name": "lodash._reinterpolate", + "version": "3.0.0", + "description": "The modern build of lodash’s internal `reInterpolate` as a module.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Benjamin Tan (https://d10.github.io/)", + "Blaine Bublitz (http://www.iceddev.com/)", + "Kit Cambridge (http://kitcambridge.be/)", + "Mathias Bynens (https://mathiasbynens.be/)" + ], + "repository": "lodash/lodash", + "scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" } +} diff --git a/node_modules/gulp/node_modules/lodash.template/LICENSE b/node_modules/gulp/node_modules/lodash.template/LICENSE new file mode 100644 index 000000000..9cd87e5dc --- /dev/null +++ b/node_modules/gulp/node_modules/lodash.template/LICENSE @@ -0,0 +1,22 @@ +Copyright 2012-2015 The Dojo Foundation +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/gulp/node_modules/lodash.template/README.md b/node_modules/gulp/node_modules/lodash.template/README.md new file mode 100644 index 000000000..f542f713b --- /dev/null +++ b/node_modules/gulp/node_modules/lodash.template/README.md @@ -0,0 +1,20 @@ +# lodash.template v3.6.2 + +The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.template` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. + +## Installation + +Using npm: + +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash.template +``` + +In Node.js/io.js: + +```js +var template = require('lodash.template'); +``` + +See the [documentation](https://lodash.com/docs#template) or [package source](https://github.com/lodash/lodash/blob/3.6.2-npm-packages/lodash.template) for more details. diff --git a/node_modules/gulp/node_modules/lodash.template/index.js b/node_modules/gulp/node_modules/lodash.template/index.js new file mode 100644 index 000000000..e5a9629b9 --- /dev/null +++ b/node_modules/gulp/node_modules/lodash.template/index.js @@ -0,0 +1,389 @@ +/** + * lodash 3.6.2 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +var baseCopy = require('lodash._basecopy'), + baseToString = require('lodash._basetostring'), + baseValues = require('lodash._basevalues'), + isIterateeCall = require('lodash._isiterateecall'), + reInterpolate = require('lodash._reinterpolate'), + keys = require('lodash.keys'), + restParam = require('lodash.restparam'), + templateSettings = require('lodash.templatesettings'); + +/** `Object#toString` result references. */ +var errorTag = '[object Error]'; + +/** Used to match empty string literals in compiled template source. */ +var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + +/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */ +var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + +/** Used to ensure capturing order of template delimiters. */ +var reNoMatch = /($^)/; + +/** Used to match unescaped characters in compiled string literals. */ +var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +/** + * Checks if `value` is object-like. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** Used for native method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * Used by `_.template` to customize its `_.assign` use. + * + * **Note:** This function is like `assignDefaults` except that it ignores + * inherited property values when checking if a property is `undefined`. + * + * @private + * @param {*} objectValue The destination object property value. + * @param {*} sourceValue The source object property value. + * @param {string} key The key associated with the object and source values. + * @param {Object} object The destination object. + * @returns {*} Returns the value to assign to the destination object. + */ +function assignOwnDefaults(objectValue, sourceValue, key, object) { + return (objectValue === undefined || !hasOwnProperty.call(object, key)) + ? sourceValue + : objectValue; +} + +/** + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + */ +function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; + } + } + return object; +} + +/** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); +} + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag; +} + +/** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is provided it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as free variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [options.sourceURL] The sourceURL of the template's compiled source. + * @param {string} [options.variable] The data object variable name. + * @param- {Object} [otherOptions] Enables the legacy `options` param signature. + * @returns {Function} Returns the compiled template function. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // using the HTML "escape" delimiter to escape data property values + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' +Using npm: +```shell +$ npm i -g npm +$ npm i --save lodash ``` -Using [`npm`](http://npmjs.org/): - -```bash -npm install lodash - -npm install -g lodash -npm link lodash -``` - -To avoid potential issues, update `npm` before installing Lo-Dash: - -```bash -npm install npm -g -``` - -In [Node.js](http://nodejs.org/) and [RingoJS v0.8.0+](http://ringojs.org/): - +In Node.js: ```js +// Load the full build. var _ = require('lodash'); +// Load the core build. +var _ = require('lodash/core'); +// Load the FP build for immutable auto-curried iteratee-first data-last methods. +var fp = require('lodash/fp'); -// or as a drop-in replacement for Underscore -var _ = require('lodash/lodash.underscore'); +// Load method categories. +var array = require('lodash/array'); +var object = require('lodash/fp/object'); + +// Cherry-pick methods for smaller browserify/rollup/webpack bundles. +var at = require('lodash/at'); +var curryN = require('lodash/fp/curryN'); ``` -**Note:** If Lo-Dash is installed globally, run [`npm link lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your project’s root directory before requiring it. +See the [package source](https://github.com/lodash/lodash/tree/4.16.6-npm) for more details. -In [RingoJS v0.7.0-](http://ringojs.org/): - -```js -var _ = require('lodash')._; -``` - -In [Rhino](http://www.mozilla.org/rhino/): - -```js -load('lodash.js'); -``` - -In an AMD loader like [RequireJS](http://requirejs.org/): - -```js -require({ - 'paths': { - 'underscore': 'path/to/lodash' - } -}, -['underscore'], function(_) { - console.log(_.VERSION); -}); -``` - -## Resources - -For more information check out these articles, screencasts, and other videos over Lo-Dash: - - * Posts - - [Say “Hello†to Lo-Dash](http://kitcambridge.be/blog/say-hello-to-lo-dash/) - - * Videos - - [Introducing Lo-Dash](https://vimeo.com/44154599) - - [Lo-Dash optimizations and custom builds](https://vimeo.com/44154601) - - [Lo-Dash’s origin and why it’s a better utility belt](https://vimeo.com/44154600) - - [Unit testing in Lo-Dash](https://vimeo.com/45865290) - - [Lo-Dash’s approach to native method use](https://vimeo.com/48576012) - - [CascadiaJS: Lo-Dash for a better utility belt](http://www.youtube.com/watch?v=dpPy4f_SeEk) - -## Features - - * AMD loader support ([RequireJS](http://requirejs.org/), [curl.js](https://github.com/cujojs/curl), etc.) - * [_(…)](http://lodash.com/docs#_) supports intuitive chaining - * [_.at](http://lodash.com/docs#at) for cherry-picking collection values - * [_.bindKey](http://lodash.com/docs#bindKey) for binding [*“lazyâ€* defined](http://michaux.ca/articles/lazy-function-definition-pattern) methods - * [_.cloneDeep](http://lodash.com/docs#cloneDeep) for deep cloning arrays and objects - * [_.contains](http://lodash.com/docs#contains) accepts a `fromIndex` argument - * [_.forEach](http://lodash.com/docs#forEach) is chainable and supports exiting iteration early - * [_.forIn](http://lodash.com/docs#forIn) for iterating over an object’s own and inherited properties - * [_.forOwn](http://lodash.com/docs#forOwn) for iterating over an object’s own properties - * [_.isPlainObject](http://lodash.com/docs#isPlainObject) checks if values are created by the `Object` constructor - * [_.merge](http://lodash.com/docs#merge) for a deep [_.extend](http://lodash.com/docs#extend) - * [_.partial](http://lodash.com/docs#partial) and [_.partialRight](http://lodash.com/docs#partialRight) for partial application without `this` binding - * [_.template](http://lodash.com/docs#template) supports [*“importsâ€* options](http://lodash.com/docs#templateSettings_imports), [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6), and [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * [_.where](http://lodash.com/docs#where) supports deep object comparisons - * [_.clone](http://lodash.com/docs#clone), [_.omit](http://lodash.com/docs#omit), [_.pick](http://lodash.com/docs#pick), - [and more…](http://lodash.com/docs "_.assign, _.cloneDeep, _.first, _.initial, _.isEqual, _.last, _.merge, _.rest") accept `callback` and `thisArg` arguments - * [_.contains](http://lodash.com/docs#contains), [_.size](http://lodash.com/docs#size), [_.toArray](http://lodash.com/docs#toArray), - [and more…](http://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.forEach, _.groupBy, _.invoke, _.map, _.max, _.min, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.some, _.sortBy, _.where") accept strings - * [_.filter](http://lodash.com/docs#filter), [_.find](http://lodash.com/docs#find), [_.map](http://lodash.com/docs#map), - [and more…](http://lodash.com/docs "_.countBy, _.every, _.first, _.groupBy, _.initial, _.last, _.max, _.min, _.reject, _.rest, _.some, _.sortBy, _.sortedIndex, _.uniq") support *“_.pluckâ€* and *“_.whereâ€* `callback` shorthands +**Note:**
    +Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. ## Support -Lo-Dash has been tested in at least Chrome 5~24, Firefox 1~18, IE 6-10, Opera 9.25-12, Safari 3-6, Node.js 0.4.8-0.8.20, Narwhal 0.3.2, PhantomJS 1.8.1, RingoJS 0.9, and Rhino 1.7RC5. +Tested in Chrome 53-54, Firefox 48-49, IE 11, Edge 14, Safari 9-10, Node.js 6-7, & PhantomJS 2.1.1.
    +Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/node_modules/archiver-utils/node_modules/lodash/_DataView.js b/node_modules/lodash/_DataView.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_DataView.js rename to node_modules/lodash/_DataView.js diff --git a/node_modules/lodash/_Hash.js b/node_modules/lodash/_Hash.js new file mode 100644 index 000000000..b504fe340 --- /dev/null +++ b/node_modules/lodash/_Hash.js @@ -0,0 +1,32 @@ +var hashClear = require('./_hashClear'), + hashDelete = require('./_hashDelete'), + hashGet = require('./_hashGet'), + hashHas = require('./_hashHas'), + hashSet = require('./_hashSet'); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; diff --git a/node_modules/archiver-utils/node_modules/lodash/_LazyWrapper.js b/node_modules/lodash/_LazyWrapper.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_LazyWrapper.js rename to node_modules/lodash/_LazyWrapper.js diff --git a/node_modules/lodash/_ListCache.js b/node_modules/lodash/_ListCache.js new file mode 100644 index 000000000..26895c3a8 --- /dev/null +++ b/node_modules/lodash/_ListCache.js @@ -0,0 +1,32 @@ +var listCacheClear = require('./_listCacheClear'), + listCacheDelete = require('./_listCacheDelete'), + listCacheGet = require('./_listCacheGet'), + listCacheHas = require('./_listCacheHas'), + listCacheSet = require('./_listCacheSet'); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; diff --git a/node_modules/archiver-utils/node_modules/lodash/_LodashWrapper.js b/node_modules/lodash/_LodashWrapper.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_LodashWrapper.js rename to node_modules/lodash/_LodashWrapper.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_Map.js b/node_modules/lodash/_Map.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_Map.js rename to node_modules/lodash/_Map.js diff --git a/node_modules/lodash/_MapCache.js b/node_modules/lodash/_MapCache.js new file mode 100644 index 000000000..4a4eea7bf --- /dev/null +++ b/node_modules/lodash/_MapCache.js @@ -0,0 +1,32 @@ +var mapCacheClear = require('./_mapCacheClear'), + mapCacheDelete = require('./_mapCacheDelete'), + mapCacheGet = require('./_mapCacheGet'), + mapCacheHas = require('./_mapCacheHas'), + mapCacheSet = require('./_mapCacheSet'); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; diff --git a/node_modules/archiver-utils/node_modules/lodash/_Promise.js b/node_modules/lodash/_Promise.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_Promise.js rename to node_modules/lodash/_Promise.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_Set.js b/node_modules/lodash/_Set.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_Set.js rename to node_modules/lodash/_Set.js diff --git a/node_modules/lodash/_SetCache.js b/node_modules/lodash/_SetCache.js new file mode 100644 index 000000000..6468b0647 --- /dev/null +++ b/node_modules/lodash/_SetCache.js @@ -0,0 +1,27 @@ +var MapCache = require('./_MapCache'), + setCacheAdd = require('./_setCacheAdd'), + setCacheHas = require('./_setCacheHas'); + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; diff --git a/node_modules/archiver-utils/node_modules/lodash/_Stack.js b/node_modules/lodash/_Stack.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_Stack.js rename to node_modules/lodash/_Stack.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_Symbol.js b/node_modules/lodash/_Symbol.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_Symbol.js rename to node_modules/lodash/_Symbol.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_Uint8Array.js b/node_modules/lodash/_Uint8Array.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_Uint8Array.js rename to node_modules/lodash/_Uint8Array.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_WeakMap.js b/node_modules/lodash/_WeakMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_WeakMap.js rename to node_modules/lodash/_WeakMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_addMapEntry.js b/node_modules/lodash/_addMapEntry.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_addMapEntry.js rename to node_modules/lodash/_addMapEntry.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_addSetEntry.js b/node_modules/lodash/_addSetEntry.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_addSetEntry.js rename to node_modules/lodash/_addSetEntry.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_apply.js b/node_modules/lodash/_apply.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_apply.js rename to node_modules/lodash/_apply.js diff --git a/node_modules/lodash/_arrayAggregator.js b/node_modules/lodash/_arrayAggregator.js new file mode 100644 index 000000000..d96c3ca47 --- /dev/null +++ b/node_modules/lodash/_arrayAggregator.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +module.exports = arrayAggregator; diff --git a/node_modules/lodash/_arrayEach.js b/node_modules/lodash/_arrayEach.js new file mode 100644 index 000000000..2c5f57968 --- /dev/null +++ b/node_modules/lodash/_arrayEach.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; diff --git a/node_modules/lodash/_arrayEachRight.js b/node_modules/lodash/_arrayEachRight.js new file mode 100644 index 000000000..976ca5c29 --- /dev/null +++ b/node_modules/lodash/_arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEachRight; diff --git a/node_modules/lodash/_arrayEvery.js b/node_modules/lodash/_arrayEvery.js new file mode 100644 index 000000000..e26a91845 --- /dev/null +++ b/node_modules/lodash/_arrayEvery.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; diff --git a/node_modules/lodash/_arrayFilter.js b/node_modules/lodash/_arrayFilter.js new file mode 100644 index 000000000..75ea25445 --- /dev/null +++ b/node_modules/lodash/_arrayFilter.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; diff --git a/node_modules/lodash/_arrayIncludes.js b/node_modules/lodash/_arrayIncludes.js new file mode 100644 index 000000000..3737a6d9e --- /dev/null +++ b/node_modules/lodash/_arrayIncludes.js @@ -0,0 +1,17 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; diff --git a/node_modules/lodash/_arrayIncludesWith.js b/node_modules/lodash/_arrayIncludesWith.js new file mode 100644 index 000000000..235fd9758 --- /dev/null +++ b/node_modules/lodash/_arrayIncludesWith.js @@ -0,0 +1,22 @@ +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +module.exports = arrayIncludesWith; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayLikeKeys.js b/node_modules/lodash/_arrayLikeKeys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_arrayLikeKeys.js rename to node_modules/lodash/_arrayLikeKeys.js diff --git a/node_modules/lodash/_arrayMap.js b/node_modules/lodash/_arrayMap.js new file mode 100644 index 000000000..22b22464e --- /dev/null +++ b/node_modules/lodash/_arrayMap.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayPush.js b/node_modules/lodash/_arrayPush.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_arrayPush.js rename to node_modules/lodash/_arrayPush.js diff --git a/node_modules/lodash/_arrayReduce.js b/node_modules/lodash/_arrayReduce.js new file mode 100644 index 000000000..de8b79b28 --- /dev/null +++ b/node_modules/lodash/_arrayReduce.js @@ -0,0 +1,26 @@ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; diff --git a/node_modules/lodash/_arrayReduceRight.js b/node_modules/lodash/_arrayReduceRight.js new file mode 100644 index 000000000..22d8976de --- /dev/null +++ b/node_modules/lodash/_arrayReduceRight.js @@ -0,0 +1,24 @@ +/** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; +} + +module.exports = arrayReduceRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/_arraySample.js b/node_modules/lodash/_arraySample.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_arraySample.js rename to node_modules/lodash/_arraySample.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_arraySampleSize.js b/node_modules/lodash/_arraySampleSize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_arraySampleSize.js rename to node_modules/lodash/_arraySampleSize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_arrayShuffle.js b/node_modules/lodash/_arrayShuffle.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_arrayShuffle.js rename to node_modules/lodash/_arrayShuffle.js diff --git a/node_modules/lodash/_arraySome.js b/node_modules/lodash/_arraySome.js new file mode 100644 index 000000000..6fd02fd4a --- /dev/null +++ b/node_modules/lodash/_arraySome.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; diff --git a/node_modules/archiver-utils/node_modules/lodash/_asciiSize.js b/node_modules/lodash/_asciiSize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_asciiSize.js rename to node_modules/lodash/_asciiSize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_asciiToArray.js b/node_modules/lodash/_asciiToArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_asciiToArray.js rename to node_modules/lodash/_asciiToArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_asciiWords.js b/node_modules/lodash/_asciiWords.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_asciiWords.js rename to node_modules/lodash/_asciiWords.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_assignInDefaults.js b/node_modules/lodash/_assignInDefaults.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_assignInDefaults.js rename to node_modules/lodash/_assignInDefaults.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_assignMergeValue.js b/node_modules/lodash/_assignMergeValue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_assignMergeValue.js rename to node_modules/lodash/_assignMergeValue.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_assignValue.js b/node_modules/lodash/_assignValue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_assignValue.js rename to node_modules/lodash/_assignValue.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_assocIndexOf.js b/node_modules/lodash/_assocIndexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_assocIndexOf.js rename to node_modules/lodash/_assocIndexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseAggregator.js b/node_modules/lodash/_baseAggregator.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseAggregator.js rename to node_modules/lodash/_baseAggregator.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseAssign.js b/node_modules/lodash/_baseAssign.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseAssign.js rename to node_modules/lodash/_baseAssign.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseAssignValue.js b/node_modules/lodash/_baseAssignValue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseAssignValue.js rename to node_modules/lodash/_baseAssignValue.js diff --git a/node_modules/lodash/_baseAt.js b/node_modules/lodash/_baseAt.js new file mode 100644 index 000000000..19eba75f5 --- /dev/null +++ b/node_modules/lodash/_baseAt.js @@ -0,0 +1,23 @@ +var get = require('./get'); + +/** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths of elements to pick. + * @returns {Array} Returns the picked elements. + */ +function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; +} + +module.exports = baseAt; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseClamp.js b/node_modules/lodash/_baseClamp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseClamp.js rename to node_modules/lodash/_baseClamp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseClone.js b/node_modules/lodash/_baseClone.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseClone.js rename to node_modules/lodash/_baseClone.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseConforms.js b/node_modules/lodash/_baseConforms.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseConforms.js rename to node_modules/lodash/_baseConforms.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseConformsTo.js b/node_modules/lodash/_baseConformsTo.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseConformsTo.js rename to node_modules/lodash/_baseConformsTo.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseCreate.js b/node_modules/lodash/_baseCreate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseCreate.js rename to node_modules/lodash/_baseCreate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseDelay.js b/node_modules/lodash/_baseDelay.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseDelay.js rename to node_modules/lodash/_baseDelay.js diff --git a/node_modules/lodash/_baseDifference.js b/node_modules/lodash/_baseDifference.js new file mode 100644 index 000000000..343ac19f0 --- /dev/null +++ b/node_modules/lodash/_baseDifference.js @@ -0,0 +1,67 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; +} + +module.exports = baseDifference; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseEach.js b/node_modules/lodash/_baseEach.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseEach.js rename to node_modules/lodash/_baseEach.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseEachRight.js b/node_modules/lodash/_baseEachRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseEachRight.js rename to node_modules/lodash/_baseEachRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseEvery.js b/node_modules/lodash/_baseEvery.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseEvery.js rename to node_modules/lodash/_baseEvery.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseExtremum.js b/node_modules/lodash/_baseExtremum.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseExtremum.js rename to node_modules/lodash/_baseExtremum.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseFill.js b/node_modules/lodash/_baseFill.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseFill.js rename to node_modules/lodash/_baseFill.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseFilter.js b/node_modules/lodash/_baseFilter.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseFilter.js rename to node_modules/lodash/_baseFilter.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseFindIndex.js b/node_modules/lodash/_baseFindIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseFindIndex.js rename to node_modules/lodash/_baseFindIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseFindKey.js b/node_modules/lodash/_baseFindKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseFindKey.js rename to node_modules/lodash/_baseFindKey.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseFlatten.js b/node_modules/lodash/_baseFlatten.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseFlatten.js rename to node_modules/lodash/_baseFlatten.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseFor.js b/node_modules/lodash/_baseFor.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseFor.js rename to node_modules/lodash/_baseFor.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseForOwn.js b/node_modules/lodash/_baseForOwn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseForOwn.js rename to node_modules/lodash/_baseForOwn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseForOwnRight.js b/node_modules/lodash/_baseForOwnRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseForOwnRight.js rename to node_modules/lodash/_baseForOwnRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseForRight.js b/node_modules/lodash/_baseForRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseForRight.js rename to node_modules/lodash/_baseForRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseFunctions.js b/node_modules/lodash/_baseFunctions.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseFunctions.js rename to node_modules/lodash/_baseFunctions.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseGet.js b/node_modules/lodash/_baseGet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseGet.js rename to node_modules/lodash/_baseGet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseGetAllKeys.js b/node_modules/lodash/_baseGetAllKeys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseGetAllKeys.js rename to node_modules/lodash/_baseGetAllKeys.js diff --git a/node_modules/lodash/_baseGetTag.js b/node_modules/lodash/_baseGetTag.js new file mode 100644 index 000000000..cf869ac6e --- /dev/null +++ b/node_modules/lodash/_baseGetTag.js @@ -0,0 +1,29 @@ +var Symbol = require('./_Symbol'), + getRawTag = require('./_getRawTag'), + objectToString = require('./_objectToString'); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + value = Object(value); + return (symToStringTag && symToStringTag in value) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseGt.js b/node_modules/lodash/_baseGt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseGt.js rename to node_modules/lodash/_baseGt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseHas.js b/node_modules/lodash/_baseHas.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseHas.js rename to node_modules/lodash/_baseHas.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseHasIn.js b/node_modules/lodash/_baseHasIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseHasIn.js rename to node_modules/lodash/_baseHasIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseInRange.js b/node_modules/lodash/_baseInRange.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseInRange.js rename to node_modules/lodash/_baseInRange.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIndexOf.js b/node_modules/lodash/_baseIndexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIndexOf.js rename to node_modules/lodash/_baseIndexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIndexOfWith.js b/node_modules/lodash/_baseIndexOfWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIndexOfWith.js rename to node_modules/lodash/_baseIndexOfWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIntersection.js b/node_modules/lodash/_baseIntersection.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIntersection.js rename to node_modules/lodash/_baseIntersection.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseInverter.js b/node_modules/lodash/_baseInverter.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseInverter.js rename to node_modules/lodash/_baseInverter.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseInvoke.js b/node_modules/lodash/_baseInvoke.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseInvoke.js rename to node_modules/lodash/_baseInvoke.js diff --git a/node_modules/lodash/_baseIsArguments.js b/node_modules/lodash/_baseIsArguments.js new file mode 100644 index 000000000..b3562cca2 --- /dev/null +++ b/node_modules/lodash/_baseIsArguments.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +module.exports = baseIsArguments; diff --git a/node_modules/lodash/_baseIsArrayBuffer.js b/node_modules/lodash/_baseIsArrayBuffer.js new file mode 100644 index 000000000..a2c4f30a8 --- /dev/null +++ b/node_modules/lodash/_baseIsArrayBuffer.js @@ -0,0 +1,17 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ +function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +} + +module.exports = baseIsArrayBuffer; diff --git a/node_modules/lodash/_baseIsDate.js b/node_modules/lodash/_baseIsDate.js new file mode 100644 index 000000000..ba67c7857 --- /dev/null +++ b/node_modules/lodash/_baseIsDate.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var dateTag = '[object Date]'; + +/** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ +function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; +} + +module.exports = baseIsDate; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsEqual.js b/node_modules/lodash/_baseIsEqual.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIsEqual.js rename to node_modules/lodash/_baseIsEqual.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsEqualDeep.js b/node_modules/lodash/_baseIsEqualDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIsEqualDeep.js rename to node_modules/lodash/_baseIsEqualDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsMap.js b/node_modules/lodash/_baseIsMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIsMap.js rename to node_modules/lodash/_baseIsMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsMatch.js b/node_modules/lodash/_baseIsMatch.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIsMatch.js rename to node_modules/lodash/_baseIsMatch.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsNaN.js b/node_modules/lodash/_baseIsNaN.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIsNaN.js rename to node_modules/lodash/_baseIsNaN.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsNative.js b/node_modules/lodash/_baseIsNative.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIsNative.js rename to node_modules/lodash/_baseIsNative.js diff --git a/node_modules/lodash/_baseIsRegExp.js b/node_modules/lodash/_baseIsRegExp.js new file mode 100644 index 000000000..6cd7c1aee --- /dev/null +++ b/node_modules/lodash/_baseIsRegExp.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +module.exports = baseIsRegExp; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIsSet.js b/node_modules/lodash/_baseIsSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIsSet.js rename to node_modules/lodash/_baseIsSet.js diff --git a/node_modules/lodash/_baseIsTypedArray.js b/node_modules/lodash/_baseIsTypedArray.js new file mode 100644 index 000000000..1edb32ff3 --- /dev/null +++ b/node_modules/lodash/_baseIsTypedArray.js @@ -0,0 +1,60 @@ +var baseGetTag = require('./_baseGetTag'), + isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var 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]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +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] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseIteratee.js b/node_modules/lodash/_baseIteratee.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseIteratee.js rename to node_modules/lodash/_baseIteratee.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseKeys.js b/node_modules/lodash/_baseKeys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseKeys.js rename to node_modules/lodash/_baseKeys.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseKeysIn.js b/node_modules/lodash/_baseKeysIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseKeysIn.js rename to node_modules/lodash/_baseKeysIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseLodash.js b/node_modules/lodash/_baseLodash.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseLodash.js rename to node_modules/lodash/_baseLodash.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseLt.js b/node_modules/lodash/_baseLt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseLt.js rename to node_modules/lodash/_baseLt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseMap.js b/node_modules/lodash/_baseMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseMap.js rename to node_modules/lodash/_baseMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseMatches.js b/node_modules/lodash/_baseMatches.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseMatches.js rename to node_modules/lodash/_baseMatches.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseMatchesProperty.js b/node_modules/lodash/_baseMatchesProperty.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseMatchesProperty.js rename to node_modules/lodash/_baseMatchesProperty.js diff --git a/node_modules/lodash/_baseMean.js b/node_modules/lodash/_baseMean.js new file mode 100644 index 000000000..fa9e00a0a --- /dev/null +++ b/node_modules/lodash/_baseMean.js @@ -0,0 +1,20 @@ +var baseSum = require('./_baseSum'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ +function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; +} + +module.exports = baseMean; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseMerge.js b/node_modules/lodash/_baseMerge.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseMerge.js rename to node_modules/lodash/_baseMerge.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseMergeDeep.js b/node_modules/lodash/_baseMergeDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseMergeDeep.js rename to node_modules/lodash/_baseMergeDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseNth.js b/node_modules/lodash/_baseNth.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseNth.js rename to node_modules/lodash/_baseNth.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseOrderBy.js b/node_modules/lodash/_baseOrderBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseOrderBy.js rename to node_modules/lodash/_baseOrderBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_basePick.js b/node_modules/lodash/_basePick.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_basePick.js rename to node_modules/lodash/_basePick.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_basePickBy.js b/node_modules/lodash/_basePickBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_basePickBy.js rename to node_modules/lodash/_basePickBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseProperty.js b/node_modules/lodash/_baseProperty.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseProperty.js rename to node_modules/lodash/_baseProperty.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_basePropertyDeep.js b/node_modules/lodash/_basePropertyDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_basePropertyDeep.js rename to node_modules/lodash/_basePropertyDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_basePropertyOf.js b/node_modules/lodash/_basePropertyOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_basePropertyOf.js rename to node_modules/lodash/_basePropertyOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_basePullAll.js b/node_modules/lodash/_basePullAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_basePullAll.js rename to node_modules/lodash/_basePullAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_basePullAt.js b/node_modules/lodash/_basePullAt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_basePullAt.js rename to node_modules/lodash/_basePullAt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseRandom.js b/node_modules/lodash/_baseRandom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseRandom.js rename to node_modules/lodash/_baseRandom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseRange.js b/node_modules/lodash/_baseRange.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseRange.js rename to node_modules/lodash/_baseRange.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseReduce.js b/node_modules/lodash/_baseReduce.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseReduce.js rename to node_modules/lodash/_baseReduce.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseRepeat.js b/node_modules/lodash/_baseRepeat.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseRepeat.js rename to node_modules/lodash/_baseRepeat.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseRest.js b/node_modules/lodash/_baseRest.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseRest.js rename to node_modules/lodash/_baseRest.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSample.js b/node_modules/lodash/_baseSample.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSample.js rename to node_modules/lodash/_baseSample.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSampleSize.js b/node_modules/lodash/_baseSampleSize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSampleSize.js rename to node_modules/lodash/_baseSampleSize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSet.js b/node_modules/lodash/_baseSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSet.js rename to node_modules/lodash/_baseSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSetData.js b/node_modules/lodash/_baseSetData.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSetData.js rename to node_modules/lodash/_baseSetData.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSetToString.js b/node_modules/lodash/_baseSetToString.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSetToString.js rename to node_modules/lodash/_baseSetToString.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseShuffle.js b/node_modules/lodash/_baseShuffle.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseShuffle.js rename to node_modules/lodash/_baseShuffle.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSlice.js b/node_modules/lodash/_baseSlice.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSlice.js rename to node_modules/lodash/_baseSlice.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSome.js b/node_modules/lodash/_baseSome.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSome.js rename to node_modules/lodash/_baseSome.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSortBy.js b/node_modules/lodash/_baseSortBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSortBy.js rename to node_modules/lodash/_baseSortBy.js diff --git a/node_modules/lodash/_baseSortedIndex.js b/node_modules/lodash/_baseSortedIndex.js new file mode 100644 index 000000000..638c366c7 --- /dev/null +++ b/node_modules/lodash/_baseSortedIndex.js @@ -0,0 +1,42 @@ +var baseSortedIndexBy = require('./_baseSortedIndexBy'), + identity = require('./identity'), + isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +/** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); +} + +module.exports = baseSortedIndex; diff --git a/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/lodash/_baseSortedIndexBy.js new file mode 100644 index 000000000..bb22e36dc --- /dev/null +++ b/node_modules/lodash/_baseSortedIndexBy.js @@ -0,0 +1,64 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeMin = Math.min; + +/** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); +} + +module.exports = baseSortedIndexBy; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSortedUniq.js b/node_modules/lodash/_baseSortedUniq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSortedUniq.js rename to node_modules/lodash/_baseSortedUniq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseSum.js b/node_modules/lodash/_baseSum.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseSum.js rename to node_modules/lodash/_baseSum.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseTimes.js b/node_modules/lodash/_baseTimes.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseTimes.js rename to node_modules/lodash/_baseTimes.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseToNumber.js b/node_modules/lodash/_baseToNumber.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseToNumber.js rename to node_modules/lodash/_baseToNumber.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseToPairs.js b/node_modules/lodash/_baseToPairs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseToPairs.js rename to node_modules/lodash/_baseToPairs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseToString.js b/node_modules/lodash/_baseToString.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseToString.js rename to node_modules/lodash/_baseToString.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseUnary.js b/node_modules/lodash/_baseUnary.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseUnary.js rename to node_modules/lodash/_baseUnary.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseUniq.js b/node_modules/lodash/_baseUniq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseUniq.js rename to node_modules/lodash/_baseUniq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseUnset.js b/node_modules/lodash/_baseUnset.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseUnset.js rename to node_modules/lodash/_baseUnset.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseUpdate.js b/node_modules/lodash/_baseUpdate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseUpdate.js rename to node_modules/lodash/_baseUpdate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseValues.js b/node_modules/lodash/_baseValues.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseValues.js rename to node_modules/lodash/_baseValues.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseWhile.js b/node_modules/lodash/_baseWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseWhile.js rename to node_modules/lodash/_baseWhile.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseWrapperValue.js b/node_modules/lodash/_baseWrapperValue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseWrapperValue.js rename to node_modules/lodash/_baseWrapperValue.js diff --git a/node_modules/lodash/_baseXor.js b/node_modules/lodash/_baseXor.js new file mode 100644 index 000000000..8e69338bf --- /dev/null +++ b/node_modules/lodash/_baseXor.js @@ -0,0 +1,36 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseUniq = require('./_baseUniq'); + +/** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ +function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); +} + +module.exports = baseXor; diff --git a/node_modules/archiver-utils/node_modules/lodash/_baseZipObject.js b/node_modules/lodash/_baseZipObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_baseZipObject.js rename to node_modules/lodash/_baseZipObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cacheHas.js b/node_modules/lodash/_cacheHas.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cacheHas.js rename to node_modules/lodash/_cacheHas.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_castArrayLikeObject.js b/node_modules/lodash/_castArrayLikeObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_castArrayLikeObject.js rename to node_modules/lodash/_castArrayLikeObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_castFunction.js b/node_modules/lodash/_castFunction.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_castFunction.js rename to node_modules/lodash/_castFunction.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_castPath.js b/node_modules/lodash/_castPath.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_castPath.js rename to node_modules/lodash/_castPath.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_castRest.js b/node_modules/lodash/_castRest.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_castRest.js rename to node_modules/lodash/_castRest.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_castSlice.js b/node_modules/lodash/_castSlice.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_castSlice.js rename to node_modules/lodash/_castSlice.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_charsEndIndex.js b/node_modules/lodash/_charsEndIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_charsEndIndex.js rename to node_modules/lodash/_charsEndIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_charsStartIndex.js b/node_modules/lodash/_charsStartIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_charsStartIndex.js rename to node_modules/lodash/_charsStartIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneArrayBuffer.js b/node_modules/lodash/_cloneArrayBuffer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneArrayBuffer.js rename to node_modules/lodash/_cloneArrayBuffer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneBuffer.js b/node_modules/lodash/_cloneBuffer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneBuffer.js rename to node_modules/lodash/_cloneBuffer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneDataView.js b/node_modules/lodash/_cloneDataView.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneDataView.js rename to node_modules/lodash/_cloneDataView.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneMap.js b/node_modules/lodash/_cloneMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneMap.js rename to node_modules/lodash/_cloneMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneRegExp.js b/node_modules/lodash/_cloneRegExp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneRegExp.js rename to node_modules/lodash/_cloneRegExp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneSet.js b/node_modules/lodash/_cloneSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneSet.js rename to node_modules/lodash/_cloneSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneSymbol.js b/node_modules/lodash/_cloneSymbol.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneSymbol.js rename to node_modules/lodash/_cloneSymbol.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_cloneTypedArray.js b/node_modules/lodash/_cloneTypedArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_cloneTypedArray.js rename to node_modules/lodash/_cloneTypedArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_compareAscending.js b/node_modules/lodash/_compareAscending.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_compareAscending.js rename to node_modules/lodash/_compareAscending.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_compareMultiple.js b/node_modules/lodash/_compareMultiple.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_compareMultiple.js rename to node_modules/lodash/_compareMultiple.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_composeArgs.js b/node_modules/lodash/_composeArgs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_composeArgs.js rename to node_modules/lodash/_composeArgs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_composeArgsRight.js b/node_modules/lodash/_composeArgsRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_composeArgsRight.js rename to node_modules/lodash/_composeArgsRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_copyArray.js b/node_modules/lodash/_copyArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_copyArray.js rename to node_modules/lodash/_copyArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_copyObject.js b/node_modules/lodash/_copyObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_copyObject.js rename to node_modules/lodash/_copyObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_copySymbols.js b/node_modules/lodash/_copySymbols.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_copySymbols.js rename to node_modules/lodash/_copySymbols.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_coreJsData.js b/node_modules/lodash/_coreJsData.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_coreJsData.js rename to node_modules/lodash/_coreJsData.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_countHolders.js b/node_modules/lodash/_countHolders.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_countHolders.js rename to node_modules/lodash/_countHolders.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createAggregator.js b/node_modules/lodash/_createAggregator.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createAggregator.js rename to node_modules/lodash/_createAggregator.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createAssigner.js b/node_modules/lodash/_createAssigner.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createAssigner.js rename to node_modules/lodash/_createAssigner.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createBaseEach.js b/node_modules/lodash/_createBaseEach.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createBaseEach.js rename to node_modules/lodash/_createBaseEach.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createBaseFor.js b/node_modules/lodash/_createBaseFor.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createBaseFor.js rename to node_modules/lodash/_createBaseFor.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createBind.js b/node_modules/lodash/_createBind.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createBind.js rename to node_modules/lodash/_createBind.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createCaseFirst.js b/node_modules/lodash/_createCaseFirst.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createCaseFirst.js rename to node_modules/lodash/_createCaseFirst.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createCompounder.js b/node_modules/lodash/_createCompounder.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createCompounder.js rename to node_modules/lodash/_createCompounder.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createCtor.js b/node_modules/lodash/_createCtor.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createCtor.js rename to node_modules/lodash/_createCtor.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createCurry.js b/node_modules/lodash/_createCurry.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createCurry.js rename to node_modules/lodash/_createCurry.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createFind.js b/node_modules/lodash/_createFind.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createFind.js rename to node_modules/lodash/_createFind.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createFlow.js b/node_modules/lodash/_createFlow.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createFlow.js rename to node_modules/lodash/_createFlow.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createHybrid.js b/node_modules/lodash/_createHybrid.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createHybrid.js rename to node_modules/lodash/_createHybrid.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createInverter.js b/node_modules/lodash/_createInverter.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createInverter.js rename to node_modules/lodash/_createInverter.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createMathOperation.js b/node_modules/lodash/_createMathOperation.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createMathOperation.js rename to node_modules/lodash/_createMathOperation.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createOver.js b/node_modules/lodash/_createOver.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createOver.js rename to node_modules/lodash/_createOver.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createPadding.js b/node_modules/lodash/_createPadding.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createPadding.js rename to node_modules/lodash/_createPadding.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createPartial.js b/node_modules/lodash/_createPartial.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createPartial.js rename to node_modules/lodash/_createPartial.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createRange.js b/node_modules/lodash/_createRange.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createRange.js rename to node_modules/lodash/_createRange.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createRecurry.js b/node_modules/lodash/_createRecurry.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createRecurry.js rename to node_modules/lodash/_createRecurry.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createRelationalOperation.js b/node_modules/lodash/_createRelationalOperation.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createRelationalOperation.js rename to node_modules/lodash/_createRelationalOperation.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createRound.js b/node_modules/lodash/_createRound.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createRound.js rename to node_modules/lodash/_createRound.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createSet.js b/node_modules/lodash/_createSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createSet.js rename to node_modules/lodash/_createSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createToPairs.js b/node_modules/lodash/_createToPairs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createToPairs.js rename to node_modules/lodash/_createToPairs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_createWrap.js b/node_modules/lodash/_createWrap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_createWrap.js rename to node_modules/lodash/_createWrap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_deburrLetter.js b/node_modules/lodash/_deburrLetter.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_deburrLetter.js rename to node_modules/lodash/_deburrLetter.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_defineProperty.js b/node_modules/lodash/_defineProperty.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_defineProperty.js rename to node_modules/lodash/_defineProperty.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_equalArrays.js b/node_modules/lodash/_equalArrays.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_equalArrays.js rename to node_modules/lodash/_equalArrays.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_equalByTag.js b/node_modules/lodash/_equalByTag.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_equalByTag.js rename to node_modules/lodash/_equalByTag.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_equalObjects.js b/node_modules/lodash/_equalObjects.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_equalObjects.js rename to node_modules/lodash/_equalObjects.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_escapeHtmlChar.js b/node_modules/lodash/_escapeHtmlChar.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_escapeHtmlChar.js rename to node_modules/lodash/_escapeHtmlChar.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_escapeStringChar.js b/node_modules/lodash/_escapeStringChar.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_escapeStringChar.js rename to node_modules/lodash/_escapeStringChar.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_flatRest.js b/node_modules/lodash/_flatRest.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_flatRest.js rename to node_modules/lodash/_flatRest.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_freeGlobal.js b/node_modules/lodash/_freeGlobal.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_freeGlobal.js rename to node_modules/lodash/_freeGlobal.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getAllKeys.js b/node_modules/lodash/_getAllKeys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getAllKeys.js rename to node_modules/lodash/_getAllKeys.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getAllKeysIn.js b/node_modules/lodash/_getAllKeysIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getAllKeysIn.js rename to node_modules/lodash/_getAllKeysIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getData.js b/node_modules/lodash/_getData.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getData.js rename to node_modules/lodash/_getData.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getFuncName.js b/node_modules/lodash/_getFuncName.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getFuncName.js rename to node_modules/lodash/_getFuncName.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getHolder.js b/node_modules/lodash/_getHolder.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getHolder.js rename to node_modules/lodash/_getHolder.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getMapData.js b/node_modules/lodash/_getMapData.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getMapData.js rename to node_modules/lodash/_getMapData.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getMatchData.js b/node_modules/lodash/_getMatchData.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getMatchData.js rename to node_modules/lodash/_getMatchData.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getNative.js b/node_modules/lodash/_getNative.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getNative.js rename to node_modules/lodash/_getNative.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getPrototype.js b/node_modules/lodash/_getPrototype.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getPrototype.js rename to node_modules/lodash/_getPrototype.js diff --git a/node_modules/lodash/_getRawTag.js b/node_modules/lodash/_getRawTag.js new file mode 100644 index 000000000..49a95c9c6 --- /dev/null +++ b/node_modules/lodash/_getRawTag.js @@ -0,0 +1,46 @@ +var Symbol = require('./_Symbol'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; diff --git a/node_modules/archiver-utils/node_modules/lodash/_getSymbols.js b/node_modules/lodash/_getSymbols.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getSymbols.js rename to node_modules/lodash/_getSymbols.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getSymbolsIn.js b/node_modules/lodash/_getSymbolsIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getSymbolsIn.js rename to node_modules/lodash/_getSymbolsIn.js diff --git a/node_modules/lodash/_getTag.js b/node_modules/lodash/_getTag.js new file mode 100644 index 000000000..deaf89d58 --- /dev/null +++ b/node_modules/lodash/_getTag.js @@ -0,0 +1,58 @@ +var DataView = require('./_DataView'), + Map = require('./_Map'), + Promise = require('./_Promise'), + Set = require('./_Set'), + WeakMap = require('./_WeakMap'), + baseGetTag = require('./_baseGetTag'), + toSource = require('./_toSource'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((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; + }; +} + +module.exports = getTag; diff --git a/node_modules/archiver-utils/node_modules/lodash/_getValue.js b/node_modules/lodash/_getValue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getValue.js rename to node_modules/lodash/_getValue.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getView.js b/node_modules/lodash/_getView.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getView.js rename to node_modules/lodash/_getView.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_getWrapDetails.js b/node_modules/lodash/_getWrapDetails.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_getWrapDetails.js rename to node_modules/lodash/_getWrapDetails.js diff --git a/node_modules/lodash/_hasPath.js b/node_modules/lodash/_hasPath.js new file mode 100644 index 000000000..de11c7298 --- /dev/null +++ b/node_modules/lodash/_hasPath.js @@ -0,0 +1,40 @@ +var castPath = require('./_castPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isKey = require('./_isKey'), + isLength = require('./isLength'), + toKey = require('./_toKey'); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; diff --git a/node_modules/archiver-utils/node_modules/lodash/_hasUnicode.js b/node_modules/lodash/_hasUnicode.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_hasUnicode.js rename to node_modules/lodash/_hasUnicode.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_hasUnicodeWord.js b/node_modules/lodash/_hasUnicodeWord.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_hasUnicodeWord.js rename to node_modules/lodash/_hasUnicodeWord.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_hashClear.js b/node_modules/lodash/_hashClear.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_hashClear.js rename to node_modules/lodash/_hashClear.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_hashDelete.js b/node_modules/lodash/_hashDelete.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_hashDelete.js rename to node_modules/lodash/_hashDelete.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_hashGet.js b/node_modules/lodash/_hashGet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_hashGet.js rename to node_modules/lodash/_hashGet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_hashHas.js b/node_modules/lodash/_hashHas.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_hashHas.js rename to node_modules/lodash/_hashHas.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_hashSet.js b/node_modules/lodash/_hashSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_hashSet.js rename to node_modules/lodash/_hashSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_initCloneArray.js b/node_modules/lodash/_initCloneArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_initCloneArray.js rename to node_modules/lodash/_initCloneArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_initCloneByTag.js b/node_modules/lodash/_initCloneByTag.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_initCloneByTag.js rename to node_modules/lodash/_initCloneByTag.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_initCloneObject.js b/node_modules/lodash/_initCloneObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_initCloneObject.js rename to node_modules/lodash/_initCloneObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_insertWrapDetails.js b/node_modules/lodash/_insertWrapDetails.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_insertWrapDetails.js rename to node_modules/lodash/_insertWrapDetails.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isFlattenable.js b/node_modules/lodash/_isFlattenable.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isFlattenable.js rename to node_modules/lodash/_isFlattenable.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isIndex.js b/node_modules/lodash/_isIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isIndex.js rename to node_modules/lodash/_isIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isIterateeCall.js b/node_modules/lodash/_isIterateeCall.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isIterateeCall.js rename to node_modules/lodash/_isIterateeCall.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isKey.js b/node_modules/lodash/_isKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isKey.js rename to node_modules/lodash/_isKey.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isKeyable.js b/node_modules/lodash/_isKeyable.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isKeyable.js rename to node_modules/lodash/_isKeyable.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isLaziable.js b/node_modules/lodash/_isLaziable.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isLaziable.js rename to node_modules/lodash/_isLaziable.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isMaskable.js b/node_modules/lodash/_isMaskable.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isMaskable.js rename to node_modules/lodash/_isMaskable.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isMasked.js b/node_modules/lodash/_isMasked.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isMasked.js rename to node_modules/lodash/_isMasked.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isPrototype.js b/node_modules/lodash/_isPrototype.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isPrototype.js rename to node_modules/lodash/_isPrototype.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_isStrictComparable.js b/node_modules/lodash/_isStrictComparable.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_isStrictComparable.js rename to node_modules/lodash/_isStrictComparable.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_iteratorToArray.js b/node_modules/lodash/_iteratorToArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_iteratorToArray.js rename to node_modules/lodash/_iteratorToArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_lazyClone.js b/node_modules/lodash/_lazyClone.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_lazyClone.js rename to node_modules/lodash/_lazyClone.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_lazyReverse.js b/node_modules/lodash/_lazyReverse.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_lazyReverse.js rename to node_modules/lodash/_lazyReverse.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_lazyValue.js b/node_modules/lodash/_lazyValue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_lazyValue.js rename to node_modules/lodash/_lazyValue.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_listCacheClear.js b/node_modules/lodash/_listCacheClear.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_listCacheClear.js rename to node_modules/lodash/_listCacheClear.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_listCacheDelete.js b/node_modules/lodash/_listCacheDelete.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_listCacheDelete.js rename to node_modules/lodash/_listCacheDelete.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_listCacheGet.js b/node_modules/lodash/_listCacheGet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_listCacheGet.js rename to node_modules/lodash/_listCacheGet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_listCacheHas.js b/node_modules/lodash/_listCacheHas.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_listCacheHas.js rename to node_modules/lodash/_listCacheHas.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_listCacheSet.js b/node_modules/lodash/_listCacheSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_listCacheSet.js rename to node_modules/lodash/_listCacheSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mapCacheClear.js b/node_modules/lodash/_mapCacheClear.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mapCacheClear.js rename to node_modules/lodash/_mapCacheClear.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mapCacheDelete.js b/node_modules/lodash/_mapCacheDelete.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mapCacheDelete.js rename to node_modules/lodash/_mapCacheDelete.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mapCacheGet.js b/node_modules/lodash/_mapCacheGet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mapCacheGet.js rename to node_modules/lodash/_mapCacheGet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mapCacheHas.js b/node_modules/lodash/_mapCacheHas.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mapCacheHas.js rename to node_modules/lodash/_mapCacheHas.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mapCacheSet.js b/node_modules/lodash/_mapCacheSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mapCacheSet.js rename to node_modules/lodash/_mapCacheSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mapToArray.js b/node_modules/lodash/_mapToArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mapToArray.js rename to node_modules/lodash/_mapToArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_matchesStrictComparable.js b/node_modules/lodash/_matchesStrictComparable.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_matchesStrictComparable.js rename to node_modules/lodash/_matchesStrictComparable.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_memoizeCapped.js b/node_modules/lodash/_memoizeCapped.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_memoizeCapped.js rename to node_modules/lodash/_memoizeCapped.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mergeData.js b/node_modules/lodash/_mergeData.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mergeData.js rename to node_modules/lodash/_mergeData.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_mergeDefaults.js b/node_modules/lodash/_mergeDefaults.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_mergeDefaults.js rename to node_modules/lodash/_mergeDefaults.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_metaMap.js b/node_modules/lodash/_metaMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_metaMap.js rename to node_modules/lodash/_metaMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_nativeCreate.js b/node_modules/lodash/_nativeCreate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_nativeCreate.js rename to node_modules/lodash/_nativeCreate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_nativeKeys.js b/node_modules/lodash/_nativeKeys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_nativeKeys.js rename to node_modules/lodash/_nativeKeys.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_nativeKeysIn.js b/node_modules/lodash/_nativeKeysIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_nativeKeysIn.js rename to node_modules/lodash/_nativeKeysIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_nodeUtil.js b/node_modules/lodash/_nodeUtil.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_nodeUtil.js rename to node_modules/lodash/_nodeUtil.js diff --git a/node_modules/lodash/_objectToString.js b/node_modules/lodash/_objectToString.js new file mode 100644 index 000000000..c614ec09b --- /dev/null +++ b/node_modules/lodash/_objectToString.js @@ -0,0 +1,22 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; diff --git a/node_modules/archiver-utils/node_modules/lodash/_overArg.js b/node_modules/lodash/_overArg.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_overArg.js rename to node_modules/lodash/_overArg.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_overRest.js b/node_modules/lodash/_overRest.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_overRest.js rename to node_modules/lodash/_overRest.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_parent.js b/node_modules/lodash/_parent.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_parent.js rename to node_modules/lodash/_parent.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_reEscape.js b/node_modules/lodash/_reEscape.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_reEscape.js rename to node_modules/lodash/_reEscape.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_reEvaluate.js b/node_modules/lodash/_reEvaluate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_reEvaluate.js rename to node_modules/lodash/_reEvaluate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_reInterpolate.js b/node_modules/lodash/_reInterpolate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_reInterpolate.js rename to node_modules/lodash/_reInterpolate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_realNames.js b/node_modules/lodash/_realNames.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_realNames.js rename to node_modules/lodash/_realNames.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_reorder.js b/node_modules/lodash/_reorder.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_reorder.js rename to node_modules/lodash/_reorder.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_replaceHolders.js b/node_modules/lodash/_replaceHolders.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_replaceHolders.js rename to node_modules/lodash/_replaceHolders.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_root.js b/node_modules/lodash/_root.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_root.js rename to node_modules/lodash/_root.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_setCacheAdd.js b/node_modules/lodash/_setCacheAdd.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_setCacheAdd.js rename to node_modules/lodash/_setCacheAdd.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_setCacheHas.js b/node_modules/lodash/_setCacheHas.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_setCacheHas.js rename to node_modules/lodash/_setCacheHas.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_setData.js b/node_modules/lodash/_setData.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_setData.js rename to node_modules/lodash/_setData.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_setToArray.js b/node_modules/lodash/_setToArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_setToArray.js rename to node_modules/lodash/_setToArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_setToPairs.js b/node_modules/lodash/_setToPairs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_setToPairs.js rename to node_modules/lodash/_setToPairs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_setToString.js b/node_modules/lodash/_setToString.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_setToString.js rename to node_modules/lodash/_setToString.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_setWrapToString.js b/node_modules/lodash/_setWrapToString.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_setWrapToString.js rename to node_modules/lodash/_setWrapToString.js diff --git a/node_modules/lodash/_shortOut.js b/node_modules/lodash/_shortOut.js new file mode 100644 index 000000000..3300a0796 --- /dev/null +++ b/node_modules/lodash/_shortOut.js @@ -0,0 +1,37 @@ +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +module.exports = shortOut; diff --git a/node_modules/archiver-utils/node_modules/lodash/_shuffleSelf.js b/node_modules/lodash/_shuffleSelf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_shuffleSelf.js rename to node_modules/lodash/_shuffleSelf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stackClear.js b/node_modules/lodash/_stackClear.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stackClear.js rename to node_modules/lodash/_stackClear.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stackDelete.js b/node_modules/lodash/_stackDelete.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stackDelete.js rename to node_modules/lodash/_stackDelete.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stackGet.js b/node_modules/lodash/_stackGet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stackGet.js rename to node_modules/lodash/_stackGet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stackHas.js b/node_modules/lodash/_stackHas.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stackHas.js rename to node_modules/lodash/_stackHas.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stackSet.js b/node_modules/lodash/_stackSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stackSet.js rename to node_modules/lodash/_stackSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_strictIndexOf.js b/node_modules/lodash/_strictIndexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_strictIndexOf.js rename to node_modules/lodash/_strictIndexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_strictLastIndexOf.js b/node_modules/lodash/_strictLastIndexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_strictLastIndexOf.js rename to node_modules/lodash/_strictLastIndexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stringSize.js b/node_modules/lodash/_stringSize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stringSize.js rename to node_modules/lodash/_stringSize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stringToArray.js b/node_modules/lodash/_stringToArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stringToArray.js rename to node_modules/lodash/_stringToArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_stringToPath.js b/node_modules/lodash/_stringToPath.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_stringToPath.js rename to node_modules/lodash/_stringToPath.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_toKey.js b/node_modules/lodash/_toKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_toKey.js rename to node_modules/lodash/_toKey.js diff --git a/node_modules/lodash/_toSource.js b/node_modules/lodash/_toSource.js new file mode 100644 index 000000000..a020b386c --- /dev/null +++ b/node_modules/lodash/_toSource.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; diff --git a/node_modules/archiver-utils/node_modules/lodash/_unescapeHtmlChar.js b/node_modules/lodash/_unescapeHtmlChar.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_unescapeHtmlChar.js rename to node_modules/lodash/_unescapeHtmlChar.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_unicodeSize.js b/node_modules/lodash/_unicodeSize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_unicodeSize.js rename to node_modules/lodash/_unicodeSize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_unicodeToArray.js b/node_modules/lodash/_unicodeToArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_unicodeToArray.js rename to node_modules/lodash/_unicodeToArray.js diff --git a/node_modules/lodash/_unicodeWords.js b/node_modules/lodash/_unicodeWords.js new file mode 100644 index 000000000..6c328ba50 --- /dev/null +++ b/node_modules/lodash/_unicodeWords.js @@ -0,0 +1,67 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]", + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)', + rsOrdUpper = '\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match complex or compound words. */ +var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji +].join('|'), 'g'); + +/** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function unicodeWords(string) { + return string.match(reUnicodeWord) || []; +} + +module.exports = unicodeWords; diff --git a/node_modules/archiver-utils/node_modules/lodash/_updateWrapDetails.js b/node_modules/lodash/_updateWrapDetails.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_updateWrapDetails.js rename to node_modules/lodash/_updateWrapDetails.js diff --git a/node_modules/archiver-utils/node_modules/lodash/_wrapperClone.js b/node_modules/lodash/_wrapperClone.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/_wrapperClone.js rename to node_modules/lodash/_wrapperClone.js diff --git a/node_modules/archiver-utils/node_modules/lodash/add.js b/node_modules/lodash/add.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/add.js rename to node_modules/lodash/add.js diff --git a/node_modules/archiver-utils/node_modules/lodash/after.js b/node_modules/lodash/after.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/after.js rename to node_modules/lodash/after.js diff --git a/node_modules/archiver-utils/node_modules/lodash/array.js b/node_modules/lodash/array.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/array.js rename to node_modules/lodash/array.js diff --git a/node_modules/archiver-utils/node_modules/lodash/ary.js b/node_modules/lodash/ary.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/ary.js rename to node_modules/lodash/ary.js diff --git a/node_modules/archiver-utils/node_modules/lodash/assign.js b/node_modules/lodash/assign.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/assign.js rename to node_modules/lodash/assign.js diff --git a/node_modules/archiver-utils/node_modules/lodash/assignIn.js b/node_modules/lodash/assignIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/assignIn.js rename to node_modules/lodash/assignIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/assignInWith.js b/node_modules/lodash/assignInWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/assignInWith.js rename to node_modules/lodash/assignInWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/assignWith.js b/node_modules/lodash/assignWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/assignWith.js rename to node_modules/lodash/assignWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/at.js b/node_modules/lodash/at.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/at.js rename to node_modules/lodash/at.js diff --git a/node_modules/archiver-utils/node_modules/lodash/attempt.js b/node_modules/lodash/attempt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/attempt.js rename to node_modules/lodash/attempt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/before.js b/node_modules/lodash/before.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/before.js rename to node_modules/lodash/before.js diff --git a/node_modules/archiver-utils/node_modules/lodash/bind.js b/node_modules/lodash/bind.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/bind.js rename to node_modules/lodash/bind.js diff --git a/node_modules/archiver-utils/node_modules/lodash/bindAll.js b/node_modules/lodash/bindAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/bindAll.js rename to node_modules/lodash/bindAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/bindKey.js b/node_modules/lodash/bindKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/bindKey.js rename to node_modules/lodash/bindKey.js diff --git a/node_modules/archiver-utils/node_modules/lodash/camelCase.js b/node_modules/lodash/camelCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/camelCase.js rename to node_modules/lodash/camelCase.js diff --git a/node_modules/archiver-utils/node_modules/lodash/capitalize.js b/node_modules/lodash/capitalize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/capitalize.js rename to node_modules/lodash/capitalize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/castArray.js b/node_modules/lodash/castArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/castArray.js rename to node_modules/lodash/castArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/ceil.js b/node_modules/lodash/ceil.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/ceil.js rename to node_modules/lodash/ceil.js diff --git a/node_modules/archiver-utils/node_modules/lodash/chain.js b/node_modules/lodash/chain.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/chain.js rename to node_modules/lodash/chain.js diff --git a/node_modules/lodash/chunk.js b/node_modules/lodash/chunk.js new file mode 100644 index 000000000..5b562fef3 --- /dev/null +++ b/node_modules/lodash/chunk.js @@ -0,0 +1,50 @@ +var baseSlice = require('./_baseSlice'), + isIterateeCall = require('./_isIterateeCall'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/node_modules/archiver-utils/node_modules/lodash/clamp.js b/node_modules/lodash/clamp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/clamp.js rename to node_modules/lodash/clamp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/clone.js b/node_modules/lodash/clone.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/clone.js rename to node_modules/lodash/clone.js diff --git a/node_modules/archiver-utils/node_modules/lodash/cloneDeep.js b/node_modules/lodash/cloneDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/cloneDeep.js rename to node_modules/lodash/cloneDeep.js diff --git a/node_modules/lodash/cloneDeepWith.js b/node_modules/lodash/cloneDeepWith.js new file mode 100644 index 000000000..c3ec6bac0 --- /dev/null +++ b/node_modules/lodash/cloneDeepWith.js @@ -0,0 +1,36 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ +function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, true, true, customizer); +} + +module.exports = cloneDeepWith; diff --git a/node_modules/lodash/cloneWith.js b/node_modules/lodash/cloneWith.js new file mode 100644 index 000000000..f24caf8b3 --- /dev/null +++ b/node_modules/lodash/cloneWith.js @@ -0,0 +1,39 @@ +var baseClone = require('./_baseClone'); + +/** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ +function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, false, true, customizer); +} + +module.exports = cloneWith; diff --git a/node_modules/archiver-utils/node_modules/lodash/collection.js b/node_modules/lodash/collection.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/collection.js rename to node_modules/lodash/collection.js diff --git a/node_modules/archiver-utils/node_modules/lodash/commit.js b/node_modules/lodash/commit.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/commit.js rename to node_modules/lodash/commit.js diff --git a/node_modules/lodash/compact.js b/node_modules/lodash/compact.js new file mode 100644 index 000000000..031fab4e6 --- /dev/null +++ b/node_modules/lodash/compact.js @@ -0,0 +1,31 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/node_modules/archiver-utils/node_modules/lodash/concat.js b/node_modules/lodash/concat.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/concat.js rename to node_modules/lodash/concat.js diff --git a/node_modules/lodash/cond.js b/node_modules/lodash/cond.js new file mode 100644 index 000000000..64555986a --- /dev/null +++ b/node_modules/lodash/cond.js @@ -0,0 +1,60 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that iterates over `pairs` and invokes the corresponding + * function of the first predicate to return truthy. The predicate-function + * pairs are invoked with the `this` binding and arguments of the created + * function. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Array} pairs The predicate-function pairs. + * @returns {Function} Returns the new composite function. + * @example + * + * var func = _.cond([ + * [_.matches({ 'a': 1 }), _.constant('matches A')], + * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], + * [_.stubTrue, _.constant('no match')] + * ]); + * + * func({ 'a': 1, 'b': 2 }); + * // => 'matches A' + * + * func({ 'a': 0, 'b': 1 }); + * // => 'matches B' + * + * func({ 'a': '1', 'b': '2' }); + * // => 'no match' + */ +function cond(pairs) { + var length = pairs == null ? 0 : pairs.length, + toIteratee = baseIteratee; + + pairs = !length ? [] : arrayMap(pairs, function(pair) { + if (typeof pair[1] != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return [toIteratee(pair[0]), pair[1]]; + }); + + return baseRest(function(args) { + var index = -1; + while (++index < length) { + var pair = pairs[index]; + if (apply(pair[0], this, args)) { + return apply(pair[1], this, args); + } + } + }); +} + +module.exports = cond; diff --git a/node_modules/archiver-utils/node_modules/lodash/conforms.js b/node_modules/lodash/conforms.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/conforms.js rename to node_modules/lodash/conforms.js diff --git a/node_modules/archiver-utils/node_modules/lodash/conformsTo.js b/node_modules/lodash/conformsTo.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/conformsTo.js rename to node_modules/lodash/conformsTo.js diff --git a/node_modules/archiver-utils/node_modules/lodash/constant.js b/node_modules/lodash/constant.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/constant.js rename to node_modules/lodash/constant.js diff --git a/node_modules/lodash/core.js b/node_modules/lodash/core.js new file mode 100644 index 000000000..3a13976cd --- /dev/null +++ b/node_modules/lodash/core.js @@ -0,0 +1,3853 @@ +/** + * @license + * lodash (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.16.6'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for function metadata. */ + var BIND_FLAG = 1, + PARTIAL_FLAG = 32; + + /** Used to compose bitmasks for comparison styles. */ + var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + array.push.apply(array, values); + return array; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array of at least `200` elements + * and any iteratees accept only one argument. The heuristic for whether a + * section qualifies for shortcut fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + return value instanceof LodashWrapper + ? value + : new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + object[key] = value; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !false) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + return objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + var baseIsArguments = noop; + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = baseGetTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = baseGetTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + stack || (stack = []); + var objStack = find(stack, function(entry) { + return entry[0] == object; + }); + var othStack = find(stack, function(entry) { + return entry[0] == other; + }); + if (objStack && othStack) { + return objStack[1] == other; + } + stack.push([object, other]); + stack.push([other, object]); + if (isSameTag && !objIsObj) { + var result = (objIsArr) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + stack.pop(); + return result; + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + 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; + + var result = equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, equalFunc, customizer, bitmask, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + if (typeof func == 'function') { + return func; + } + if (func == null) { + return identity; + } + return (typeof func == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var props = nativeKeys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = false; + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = false; + + 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; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(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; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var index = -1, + result = true, + seen = (bitmask & UNORDERED_COMPARE_FLAG) ? [] : undefined; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!baseSome(other, function(othValue, othIndex) { + if (!indexOf(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, customizer, bitmask, stack) + )) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value); + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return func.apply(this, otherArgs); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = identity; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + var toKey = String; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseIteratee(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : nativeKeys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + return createPartial(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + return !nativeKeys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = baseIsRegExp; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + var toNumber = Number; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, nativeKeys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, nativeKeysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : assign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(args) { + args.push(undefined, assignInDefaults); + return assignInWith.apply(undefined, args); + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = nativeKeys; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + var keysIn = nativeKeysIn; + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property identifiers to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, props) { + return object == null ? {} : basePick(object, baseMap(props, toKey)); + }); + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(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); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|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); + }); + }; + }); + + // Add chain sequence methods to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + root._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + define(function() { + return lodash; + }); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } +}.call(this)); diff --git a/node_modules/lodash/core.min.js b/node_modules/lodash/core.min.js new file mode 100644 index 000000000..632c523ab --- /dev/null +++ b/node_modules/lodash/core.min.js @@ -0,0 +1,29 @@ +/** + * @license + * lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + * Build: `lodash core -o ./dist/lodash.core.js` + */ +;(function(){function n(n){return K(n)&&pn.call(n,"callee")&&!bn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?nn:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return d(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r,e){return n===nn||M(n,ln[r])&&!pn.call(e,r)?t:n}function f(n,t,r){ +if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(nn,r)},t)}function a(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function l(n,t,r){for(var e=-1,u=n.length;++et}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!K(t)?n!==n&&t!==t:g(n,t,b,r,e,u))}function g(n,t,r,e,u,o){var i=Sn(n),c=Sn(t),f="[object Array]",a="[object Array]";i||(f=hn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=hn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]); +var p=En(o,function(t){return t[0]==n}),s=En(o,function(n){return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=B(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=M(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 2&u||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o), +o.pop(),r):(i=i?n.value():n,f=f?t.value():t,r=r(i,f,e,u,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?Y:(typeof n=="object"?m:r)(n)}function j(n,t){return nt&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++ei))return false;for(var c=-1,f=true,a=1&u?[]:nn;++cr?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,mn); +}function J(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=nn),r}}function M(n,t){return n===t||n!==n&&t!==t}function U(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1=t),t&&!V(n)}function V(n){return!!H(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function H(n){var t=typeof n; +return null!=n&&("object"==t||"function"==t)}function K(n){return null!=n&&typeof n=="object"}function L(n){return typeof n=="number"||K(n)&&"[object Number]"==hn.call(n)}function Q(n){return typeof n=="string"||!Sn(n)&&K(n)&&"[object String]"==hn.call(n)}function W(n){return typeof n=="string"?n:null==n?"":n+""}function X(n){return null==n?[]:u(n,qn(n))}function Y(n){return n}function Z(n,r,e){var u=qn(r),o=v(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=v(r,qn(r)));var i=!(H(e)&&"chain"in e&&!e.chain),c=V(n); +return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var nn,tn=1/0,rn=/[&<>"']/g,en=RegExp(rn.source),un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){ +return function(t){return null==n?nn:n[t]}}({"&":"&","<":"<",">":">",'"':""","'":"'"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,yn=Object.create,bn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return H(t)?yn?yn(t):(n.prototype=t,t=new n,n.prototype=nn,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i; +var mn=function(n,t){return function(r,e){if(null==r)return r;if(!U(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++or&&(r=jn(e+r,0));n:{for(t=_(t),e=n.length,r+=-1;++re||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } +}); + +module.exports = countBy; diff --git a/node_modules/lodash/create.js b/node_modules/lodash/create.js new file mode 100644 index 000000000..919edb850 --- /dev/null +++ b/node_modules/lodash/create.js @@ -0,0 +1,43 @@ +var baseAssign = require('./_baseAssign'), + baseCreate = require('./_baseCreate'); + +/** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); +} + +module.exports = create; diff --git a/node_modules/archiver-utils/node_modules/lodash/curry.js b/node_modules/lodash/curry.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/curry.js rename to node_modules/lodash/curry.js diff --git a/node_modules/archiver-utils/node_modules/lodash/curryRight.js b/node_modules/lodash/curryRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/curryRight.js rename to node_modules/lodash/curryRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/date.js b/node_modules/lodash/date.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/date.js rename to node_modules/lodash/date.js diff --git a/node_modules/archiver-utils/node_modules/lodash/debounce.js b/node_modules/lodash/debounce.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/debounce.js rename to node_modules/lodash/debounce.js diff --git a/node_modules/archiver-utils/node_modules/lodash/deburr.js b/node_modules/lodash/deburr.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/deburr.js rename to node_modules/lodash/deburr.js diff --git a/node_modules/archiver-utils/node_modules/lodash/defaultTo.js b/node_modules/lodash/defaultTo.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/defaultTo.js rename to node_modules/lodash/defaultTo.js diff --git a/node_modules/archiver-utils/node_modules/lodash/defaults.js b/node_modules/lodash/defaults.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/defaults.js rename to node_modules/lodash/defaults.js diff --git a/node_modules/archiver-utils/node_modules/lodash/defaultsDeep.js b/node_modules/lodash/defaultsDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/defaultsDeep.js rename to node_modules/lodash/defaultsDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/defer.js b/node_modules/lodash/defer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/defer.js rename to node_modules/lodash/defer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/delay.js b/node_modules/lodash/delay.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/delay.js rename to node_modules/lodash/delay.js diff --git a/node_modules/archiver-utils/node_modules/lodash/difference.js b/node_modules/lodash/difference.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/difference.js rename to node_modules/lodash/difference.js diff --git a/node_modules/archiver-utils/node_modules/lodash/differenceBy.js b/node_modules/lodash/differenceBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/differenceBy.js rename to node_modules/lodash/differenceBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/differenceWith.js b/node_modules/lodash/differenceWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/differenceWith.js rename to node_modules/lodash/differenceWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/divide.js b/node_modules/lodash/divide.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/divide.js rename to node_modules/lodash/divide.js diff --git a/node_modules/lodash/drop.js b/node_modules/lodash/drop.js new file mode 100644 index 000000000..d5c3cbaa4 --- /dev/null +++ b/node_modules/lodash/drop.js @@ -0,0 +1,38 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = drop; diff --git a/node_modules/lodash/dropRight.js b/node_modules/lodash/dropRight.js new file mode 100644 index 000000000..441fe9968 --- /dev/null +++ b/node_modules/lodash/dropRight.js @@ -0,0 +1,39 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/dropRightWhile.js b/node_modules/lodash/dropRightWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/dropRightWhile.js rename to node_modules/lodash/dropRightWhile.js diff --git a/node_modules/lodash/dropWhile.js b/node_modules/lodash/dropWhile.js new file mode 100644 index 000000000..903ef568c --- /dev/null +++ b/node_modules/lodash/dropWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/node_modules/archiver-utils/node_modules/lodash/each.js b/node_modules/lodash/each.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/each.js rename to node_modules/lodash/each.js diff --git a/node_modules/archiver-utils/node_modules/lodash/eachRight.js b/node_modules/lodash/eachRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/eachRight.js rename to node_modules/lodash/eachRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/endsWith.js b/node_modules/lodash/endsWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/endsWith.js rename to node_modules/lodash/endsWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/entries.js b/node_modules/lodash/entries.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/entries.js rename to node_modules/lodash/entries.js diff --git a/node_modules/archiver-utils/node_modules/lodash/entriesIn.js b/node_modules/lodash/entriesIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/entriesIn.js rename to node_modules/lodash/entriesIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/eq.js b/node_modules/lodash/eq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/eq.js rename to node_modules/lodash/eq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/escape.js b/node_modules/lodash/escape.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/escape.js rename to node_modules/lodash/escape.js diff --git a/node_modules/archiver-utils/node_modules/lodash/escapeRegExp.js b/node_modules/lodash/escapeRegExp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/escapeRegExp.js rename to node_modules/lodash/escapeRegExp.js diff --git a/node_modules/lodash/every.js b/node_modules/lodash/every.js new file mode 100644 index 000000000..25080dac4 --- /dev/null +++ b/node_modules/lodash/every.js @@ -0,0 +1,56 @@ +var arrayEvery = require('./_arrayEvery'), + baseEvery = require('./_baseEvery'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = every; diff --git a/node_modules/archiver-utils/node_modules/lodash/extend.js b/node_modules/lodash/extend.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/extend.js rename to node_modules/lodash/extend.js diff --git a/node_modules/archiver-utils/node_modules/lodash/extendWith.js b/node_modules/lodash/extendWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/extendWith.js rename to node_modules/lodash/extendWith.js diff --git a/node_modules/lodash/fill.js b/node_modules/lodash/fill.js new file mode 100644 index 000000000..ae13aa1c9 --- /dev/null +++ b/node_modules/lodash/fill.js @@ -0,0 +1,45 @@ +var baseFill = require('./_baseFill'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ +function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/node_modules/lodash/filter.js b/node_modules/lodash/filter.js new file mode 100644 index 000000000..52616be8b --- /dev/null +++ b/node_modules/lodash/filter.js @@ -0,0 +1,48 @@ +var arrayFilter = require('./_arrayFilter'), + baseFilter = require('./_baseFilter'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ +function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = filter; diff --git a/node_modules/lodash/find.js b/node_modules/lodash/find.js new file mode 100644 index 000000000..de732ccb4 --- /dev/null +++ b/node_modules/lodash/find.js @@ -0,0 +1,42 @@ +var createFind = require('./_createFind'), + findIndex = require('./findIndex'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = createFind(findIndex); + +module.exports = find; diff --git a/node_modules/lodash/findIndex.js b/node_modules/lodash/findIndex.js new file mode 100644 index 000000000..4689069f8 --- /dev/null +++ b/node_modules/lodash/findIndex.js @@ -0,0 +1,55 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); +} + +module.exports = findIndex; diff --git a/node_modules/archiver-utils/node_modules/lodash/findKey.js b/node_modules/lodash/findKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/findKey.js rename to node_modules/lodash/findKey.js diff --git a/node_modules/lodash/findLast.js b/node_modules/lodash/findLast.js new file mode 100644 index 000000000..70b4271dc --- /dev/null +++ b/node_modules/lodash/findLast.js @@ -0,0 +1,25 @@ +var createFind = require('./_createFind'), + findLastIndex = require('./findLastIndex'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +var findLast = createFind(findLastIndex); + +module.exports = findLast; diff --git a/node_modules/lodash/findLastIndex.js b/node_modules/lodash/findLastIndex.js new file mode 100644 index 000000000..7da3431f6 --- /dev/null +++ b/node_modules/lodash/findLastIndex.js @@ -0,0 +1,59 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ +function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); +} + +module.exports = findLastIndex; diff --git a/node_modules/archiver-utils/node_modules/lodash/findLastKey.js b/node_modules/lodash/findLastKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/findLastKey.js rename to node_modules/lodash/findLastKey.js diff --git a/node_modules/archiver-utils/node_modules/lodash/first.js b/node_modules/lodash/first.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/first.js rename to node_modules/lodash/first.js diff --git a/node_modules/lodash/flatMap.js b/node_modules/lodash/flatMap.js new file mode 100644 index 000000000..e6685068f --- /dev/null +++ b/node_modules/lodash/flatMap.js @@ -0,0 +1,29 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); +} + +module.exports = flatMap; diff --git a/node_modules/lodash/flatMapDeep.js b/node_modules/lodash/flatMapDeep.js new file mode 100644 index 000000000..4653d6033 --- /dev/null +++ b/node_modules/lodash/flatMapDeep.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); +} + +module.exports = flatMapDeep; diff --git a/node_modules/lodash/flatMapDepth.js b/node_modules/lodash/flatMapDepth.js new file mode 100644 index 000000000..6d72005c9 --- /dev/null +++ b/node_modules/lodash/flatMapDepth.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'), + toInteger = require('./toInteger'); + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ +function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); +} + +module.exports = flatMapDepth; diff --git a/node_modules/lodash/flatten.js b/node_modules/lodash/flatten.js new file mode 100644 index 000000000..3f09f7f77 --- /dev/null +++ b/node_modules/lodash/flatten.js @@ -0,0 +1,22 @@ +var baseFlatten = require('./_baseFlatten'); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; diff --git a/node_modules/lodash/flattenDeep.js b/node_modules/lodash/flattenDeep.js new file mode 100644 index 000000000..8ad585cf4 --- /dev/null +++ b/node_modules/lodash/flattenDeep.js @@ -0,0 +1,25 @@ +var baseFlatten = require('./_baseFlatten'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ +function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; +} + +module.exports = flattenDeep; diff --git a/node_modules/lodash/flattenDepth.js b/node_modules/lodash/flattenDepth.js new file mode 100644 index 000000000..441fdcc22 --- /dev/null +++ b/node_modules/lodash/flattenDepth.js @@ -0,0 +1,33 @@ +var baseFlatten = require('./_baseFlatten'), + toInteger = require('./toInteger'); + +/** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ +function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); +} + +module.exports = flattenDepth; diff --git a/node_modules/archiver-utils/node_modules/lodash/flip.js b/node_modules/lodash/flip.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/flip.js rename to node_modules/lodash/flip.js diff --git a/node_modules/archiver-utils/node_modules/lodash/floor.js b/node_modules/lodash/floor.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/floor.js rename to node_modules/lodash/floor.js diff --git a/node_modules/archiver-utils/node_modules/lodash/flow.js b/node_modules/lodash/flow.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/flow.js rename to node_modules/lodash/flow.js diff --git a/node_modules/archiver-utils/node_modules/lodash/flowRight.js b/node_modules/lodash/flowRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/flowRight.js rename to node_modules/lodash/flowRight.js diff --git a/node_modules/lodash/forEach.js b/node_modules/lodash/forEach.js new file mode 100644 index 000000000..c64eaa73f --- /dev/null +++ b/node_modules/lodash/forEach.js @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), + baseEach = require('./_baseEach'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEach; diff --git a/node_modules/lodash/forEachRight.js b/node_modules/lodash/forEachRight.js new file mode 100644 index 000000000..7390ebaf8 --- /dev/null +++ b/node_modules/lodash/forEachRight.js @@ -0,0 +1,31 @@ +var arrayEachRight = require('./_arrayEachRight'), + baseEachRight = require('./_baseEachRight'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ +function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEachRight; diff --git a/node_modules/lodash/forIn.js b/node_modules/lodash/forIn.js new file mode 100644 index 000000000..583a59638 --- /dev/null +++ b/node_modules/lodash/forIn.js @@ -0,0 +1,39 @@ +var baseFor = require('./_baseFor'), + castFunction = require('./_castFunction'), + keysIn = require('./keysIn'); + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, castFunction(iteratee), keysIn); +} + +module.exports = forIn; diff --git a/node_modules/lodash/forInRight.js b/node_modules/lodash/forInRight.js new file mode 100644 index 000000000..4aedf58af --- /dev/null +++ b/node_modules/lodash/forInRight.js @@ -0,0 +1,37 @@ +var baseForRight = require('./_baseForRight'), + castFunction = require('./_castFunction'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ +function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, castFunction(iteratee), keysIn); +} + +module.exports = forInRight; diff --git a/node_modules/lodash/forOwn.js b/node_modules/lodash/forOwn.js new file mode 100644 index 000000000..94eed8402 --- /dev/null +++ b/node_modules/lodash/forOwn.js @@ -0,0 +1,36 @@ +var baseForOwn = require('./_baseForOwn'), + castFunction = require('./_castFunction'); + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && baseForOwn(object, castFunction(iteratee)); +} + +module.exports = forOwn; diff --git a/node_modules/lodash/forOwnRight.js b/node_modules/lodash/forOwnRight.js new file mode 100644 index 000000000..86f338f03 --- /dev/null +++ b/node_modules/lodash/forOwnRight.js @@ -0,0 +1,34 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + castFunction = require('./_castFunction'); + +/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ +function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, castFunction(iteratee)); +} + +module.exports = forOwnRight; diff --git a/node_modules/archiver-utils/node_modules/lodash/fp.js b/node_modules/lodash/fp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp.js rename to node_modules/lodash/fp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/F.js b/node_modules/lodash/fp/F.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/F.js rename to node_modules/lodash/fp/F.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/T.js b/node_modules/lodash/fp/T.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/T.js rename to node_modules/lodash/fp/T.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/__.js b/node_modules/lodash/fp/__.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/__.js rename to node_modules/lodash/fp/__.js diff --git a/node_modules/lodash/fp/_baseConvert.js b/node_modules/lodash/fp/_baseConvert.js new file mode 100644 index 000000000..524498526 --- /dev/null +++ b/node_modules/lodash/fp/_baseConvert.js @@ -0,0 +1,536 @@ +var mapping = require('./_mapping'), + fallbackHolder = require('./placeholder'); + +/** + * Creates a function, with an arity of `n`, that invokes `func` with the + * arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} n The arity of the new function. + * @returns {Function} Returns the new function. + */ +function baseArity(func, n) { + return n == 2 + ? function(a, b) { return func.apply(undefined, arguments); } + : function(a) { return func.apply(undefined, arguments); }; +} + +/** + * Creates a function that invokes `func`, with up to `n` arguments, ignoring + * any additional arguments. + * + * @private + * @param {Function} func The function to cap arguments for. + * @param {number} n The arity cap. + * @returns {Function} Returns the new function. + */ +function baseAry(func, n) { + return n == 2 + ? function(a, b) { return func(a, b); } + : function(a) { return func(a); }; +} + +/** + * Creates a clone of `array`. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the cloned array. + */ +function cloneArray(array) { + var length = array ? array.length : 0, + result = Array(length); + + while (length--) { + result[length] = array[length]; + } + return result; +} + +/** + * Creates a function that clones a given object using the assignment `func`. + * + * @private + * @param {Function} func The assignment function. + * @returns {Function} Returns the new cloner function. + */ +function createCloner(func) { + return function(object) { + return func({}, object); + }; +} + +/** + * Creates a function that wraps `func` and uses `cloner` to clone the first + * argument it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} cloner The function to clone arguments. + * @returns {Function} Returns the new immutable function. + */ +function wrapImmutable(func, cloner) { + return function() { + var length = arguments.length; + if (!length) { + return; + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var result = args[0] = cloner.apply(undefined, args); + func.apply(undefined, args); + return result; + }; +} + +/** + * The base implementation of `convert` which accepts a `util` object of methods + * required to perform conversions. + * + * @param {Object} util The util object. + * @param {string} name The name of the function to convert. + * @param {Function} func The function to convert. + * @param {Object} [options] The options object. + * @param {boolean} [options.cap=true] Specify capping iteratee arguments. + * @param {boolean} [options.curry=true] Specify currying. + * @param {boolean} [options.fixed=true] Specify fixed arity. + * @param {boolean} [options.immutable=true] Specify immutable operations. + * @param {boolean} [options.rearg=true] Specify rearranging arguments. + * @returns {Function|Object} Returns the converted function or object. + */ +function baseConvert(util, name, func, options) { + var setPlaceholder, + isLib = typeof name == 'function', + isObj = name === Object(name); + + if (isObj) { + options = func; + func = name; + name = undefined; + } + if (func == null) { + throw new TypeError; + } + options || (options = {}); + + var config = { + 'cap': 'cap' in options ? options.cap : true, + 'curry': 'curry' in options ? options.curry : true, + 'fixed': 'fixed' in options ? options.fixed : true, + 'immutable': 'immutable' in options ? options.immutable : true, + 'rearg': 'rearg' in options ? options.rearg : true + }; + + var forceCurry = ('curry' in options) && options.curry, + forceFixed = ('fixed' in options) && options.fixed, + forceRearg = ('rearg' in options) && options.rearg, + placeholder = isLib ? func : fallbackHolder, + pristine = isLib ? func.runInContext() : undefined; + + var helpers = isLib ? func : { + 'ary': util.ary, + 'assign': util.assign, + 'clone': util.clone, + 'curry': util.curry, + 'forEach': util.forEach, + 'isArray': util.isArray, + 'isFunction': util.isFunction, + 'iteratee': util.iteratee, + 'keys': util.keys, + 'rearg': util.rearg, + 'spread': util.spread, + 'toInteger': util.toInteger, + 'toPath': util.toPath + }; + + var ary = helpers.ary, + assign = helpers.assign, + clone = helpers.clone, + curry = helpers.curry, + each = helpers.forEach, + isArray = helpers.isArray, + isFunction = helpers.isFunction, + keys = helpers.keys, + rearg = helpers.rearg, + spread = helpers.spread, + toInteger = helpers.toInteger, + toPath = helpers.toPath; + + var aryMethodKeys = keys(mapping.aryMethod); + + var wrappers = { + 'castArray': function(castArray) { + return function() { + var value = arguments[0]; + return isArray(value) + ? castArray(cloneArray(value)) + : castArray.apply(undefined, arguments); + }; + }, + 'iteratee': function(iteratee) { + return function() { + var func = arguments[0], + arity = arguments[1], + result = iteratee(func, arity), + length = result.length; + + if (config.cap && typeof arity == 'number') { + arity = arity > 2 ? (arity - 2) : 1; + return (length && length <= arity) ? result : baseAry(result, arity); + } + return result; + }; + }, + 'mixin': function(mixin) { + return function(source) { + var func = this; + if (!isFunction(func)) { + return mixin(func, Object(source)); + } + var pairs = []; + each(keys(source), function(key) { + if (isFunction(source[key])) { + pairs.push([key, func.prototype[key]]); + } + }); + + mixin(func, Object(source)); + + each(pairs, function(pair) { + var value = pair[1]; + if (isFunction(value)) { + func.prototype[pair[0]] = value; + } else { + delete func.prototype[pair[0]]; + } + }); + return func; + }; + }, + 'nthArg': function(nthArg) { + return function(n) { + var arity = n < 0 ? 1 : (toInteger(n) + 1); + return curry(nthArg(n), arity); + }; + }, + 'rearg': function(rearg) { + return function(func, indexes) { + var arity = indexes ? indexes.length : 0; + return curry(rearg(func, indexes), arity); + }; + }, + 'runInContext': function(runInContext) { + return function(context) { + return baseConvert(util, runInContext(context), options); + }; + } + }; + + /*--------------------------------------------------------------------------*/ + + /** + * Casts `func` to a function with an arity capped iteratee if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @returns {Function} Returns the cast function. + */ + function castCap(name, func) { + if (config.cap) { + var indexes = mapping.iterateeRearg[name]; + if (indexes) { + return iterateeRearg(func, indexes); + } + var n = !isLib && mapping.iterateeAry[name]; + if (n) { + return iterateeAry(func, n); + } + } + return func; + } + + /** + * Casts `func` to a curried function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity of `func`. + * @returns {Function} Returns the cast function. + */ + function castCurry(name, func, n) { + return (forceCurry || (config.curry && n > 1)) + ? curry(func, n) + : func; + } + + /** + * Casts `func` to a fixed arity function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity cap. + * @returns {Function} Returns the cast function. + */ + function castFixed(name, func, n) { + if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { + var data = mapping.methodSpread[name], + start = data && data.start; + + return start === undefined ? ary(func, n) : spread(func, start); + } + return func; + } + + /** + * Casts `func` to an rearged function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity of `func`. + * @returns {Function} Returns the cast function. + */ + function castRearg(name, func, n) { + return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) + ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) + : func; + } + + /** + * Creates a clone of `object` by `path`. + * + * @private + * @param {Object} object The object to clone. + * @param {Array|string} path The path to clone by. + * @returns {Object} Returns the cloned object. + */ + function cloneByPath(object, path) { + path = toPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + result = clone(Object(object)), + nested = result; + + while (nested != null && ++index < length) { + var key = path[index], + value = nested[key]; + + if (value != null) { + nested[path[index]] = clone(index == lastIndex ? value : Object(value)); + } + nested = nested[key]; + } + return result; + } + + /** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. + * + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ + function convertLib(options) { + return _.runInContext.convert(options)(undefined); + } + + /** + * Create a converter function for `func` of `name`. + * + * @param {string} name The name of the function to convert. + * @param {Function} func The function to convert. + * @returns {Function} Returns the new converter function. + */ + function createConverter(name, func) { + var realName = mapping.aliasToReal[name] || name, + methodName = mapping.remap[realName] || realName, + oldOptions = options; + + return function(options) { + var newUtil = isLib ? pristine : helpers, + newFunc = isLib ? pristine[methodName] : func, + newOptions = assign(assign({}, oldOptions), options); + + return baseConvert(newUtil, realName, newFunc, newOptions); + }; + } + + /** + * Creates a function that wraps `func` to invoke its iteratee, with up to `n` + * arguments, ignoring any additional arguments. + * + * @private + * @param {Function} func The function to cap iteratee arguments for. + * @param {number} n The arity cap. + * @returns {Function} Returns the new function. + */ + function iterateeAry(func, n) { + return overArg(func, function(func) { + return typeof func == 'function' ? baseAry(func, n) : func; + }); + } + + /** + * Creates a function that wraps `func` to invoke its iteratee with arguments + * arranged according to the specified `indexes` where the argument value at + * the first index is provided as the first argument, the argument value at + * the second index is provided as the second argument, and so on. + * + * @private + * @param {Function} func The function to rearrange iteratee arguments for. + * @param {number[]} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + */ + function iterateeRearg(func, indexes) { + return overArg(func, function(func) { + var n = indexes.length; + return baseArity(rearg(baseAry(func, n), indexes), n); + }); + } + + /** + * Creates a function that invokes `func` with its first argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function() { + var length = arguments.length; + if (!length) { + return func(); + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var index = config.rearg ? 0 : (length - 1); + args[index] = transform(args[index]); + return func.apply(undefined, args); + }; + } + + /** + * Creates a function that wraps `func` and applys the conversions + * rules by `name`. + * + * @private + * @param {string} name The name of the function to wrap. + * @param {Function} func The function to wrap. + * @returns {Function} Returns the converted function. + */ + function wrap(name, func) { + var result, + realName = mapping.aliasToReal[name] || name, + wrapped = func, + wrapper = wrappers[realName]; + + if (wrapper) { + wrapped = wrapper(func); + } + else if (config.immutable) { + if (mapping.mutate.array[realName]) { + wrapped = wrapImmutable(func, cloneArray); + } + else if (mapping.mutate.object[realName]) { + wrapped = wrapImmutable(func, createCloner(func)); + } + else if (mapping.mutate.set[realName]) { + wrapped = wrapImmutable(func, cloneByPath); + } + } + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(otherName) { + if (realName == otherName) { + var spreadData = mapping.methodSpread[realName], + afterRearg = spreadData && spreadData.afterRearg; + + result = afterRearg + ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey) + : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey); + + result = castCap(realName, result); + result = castCurry(realName, result, aryKey); + return false; + } + }); + return !result; + }); + + result || (result = wrapped); + if (result == func) { + result = forceCurry ? curry(result, 1) : function() { + return func.apply(this, arguments); + }; + } + result.convert = createConverter(realName, func); + if (mapping.placeholder[realName]) { + setPlaceholder = true; + result.placeholder = func.placeholder = placeholder; + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + if (!isObj) { + return wrap(name, func); + } + var _ = func; + + // Convert methods by ary cap. + var pairs = []; + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(key) { + var func = _[mapping.remap[key] || key]; + if (func) { + pairs.push([key, wrap(key, func)]); + } + }); + }); + + // Convert remaining methods. + each(keys(_), function(key) { + var func = _[key]; + if (typeof func == 'function') { + var length = pairs.length; + while (length--) { + if (pairs[length][0] == key) { + return; + } + } + func.convert = createConverter(key, func); + pairs.push([key, func]); + } + }); + + // Assign to `_` leaving `_.prototype` unchanged to allow chaining. + each(pairs, function(pair) { + _[pair[0]] = pair[1]; + }); + + _.convert = convertLib; + if (setPlaceholder) { + _.placeholder = placeholder; + } + // Assign aliases. + each(keys(_), function(key) { + each(mapping.realToAlias[key] || [], function(alias) { + _[alias] = _[key]; + }); + }); + + return _; +} + +module.exports = baseConvert; diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/_convertBrowser.js b/node_modules/lodash/fp/_convertBrowser.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/_convertBrowser.js rename to node_modules/lodash/fp/_convertBrowser.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/_falseOptions.js b/node_modules/lodash/fp/_falseOptions.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/_falseOptions.js rename to node_modules/lodash/fp/_falseOptions.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/_mapping.js b/node_modules/lodash/fp/_mapping.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/_mapping.js rename to node_modules/lodash/fp/_mapping.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/_util.js b/node_modules/lodash/fp/_util.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/_util.js rename to node_modules/lodash/fp/_util.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/add.js b/node_modules/lodash/fp/add.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/add.js rename to node_modules/lodash/fp/add.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/after.js b/node_modules/lodash/fp/after.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/after.js rename to node_modules/lodash/fp/after.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/all.js b/node_modules/lodash/fp/all.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/all.js rename to node_modules/lodash/fp/all.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/allPass.js b/node_modules/lodash/fp/allPass.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/allPass.js rename to node_modules/lodash/fp/allPass.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/always.js b/node_modules/lodash/fp/always.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/always.js rename to node_modules/lodash/fp/always.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/any.js b/node_modules/lodash/fp/any.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/any.js rename to node_modules/lodash/fp/any.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/anyPass.js b/node_modules/lodash/fp/anyPass.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/anyPass.js rename to node_modules/lodash/fp/anyPass.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/apply.js b/node_modules/lodash/fp/apply.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/apply.js rename to node_modules/lodash/fp/apply.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/array.js b/node_modules/lodash/fp/array.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/array.js rename to node_modules/lodash/fp/array.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/ary.js b/node_modules/lodash/fp/ary.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/ary.js rename to node_modules/lodash/fp/ary.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assign.js b/node_modules/lodash/fp/assign.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assign.js rename to node_modules/lodash/fp/assign.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assignAll.js b/node_modules/lodash/fp/assignAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assignAll.js rename to node_modules/lodash/fp/assignAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assignAllWith.js b/node_modules/lodash/fp/assignAllWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assignAllWith.js rename to node_modules/lodash/fp/assignAllWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assignIn.js b/node_modules/lodash/fp/assignIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assignIn.js rename to node_modules/lodash/fp/assignIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assignInAll.js b/node_modules/lodash/fp/assignInAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assignInAll.js rename to node_modules/lodash/fp/assignInAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assignInAllWith.js b/node_modules/lodash/fp/assignInAllWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assignInAllWith.js rename to node_modules/lodash/fp/assignInAllWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assignInWith.js b/node_modules/lodash/fp/assignInWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assignInWith.js rename to node_modules/lodash/fp/assignInWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assignWith.js b/node_modules/lodash/fp/assignWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assignWith.js rename to node_modules/lodash/fp/assignWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assoc.js b/node_modules/lodash/fp/assoc.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assoc.js rename to node_modules/lodash/fp/assoc.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/assocPath.js b/node_modules/lodash/fp/assocPath.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/assocPath.js rename to node_modules/lodash/fp/assocPath.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/at.js b/node_modules/lodash/fp/at.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/at.js rename to node_modules/lodash/fp/at.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/attempt.js b/node_modules/lodash/fp/attempt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/attempt.js rename to node_modules/lodash/fp/attempt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/before.js b/node_modules/lodash/fp/before.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/before.js rename to node_modules/lodash/fp/before.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/bind.js b/node_modules/lodash/fp/bind.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/bind.js rename to node_modules/lodash/fp/bind.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/bindAll.js b/node_modules/lodash/fp/bindAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/bindAll.js rename to node_modules/lodash/fp/bindAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/bindKey.js b/node_modules/lodash/fp/bindKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/bindKey.js rename to node_modules/lodash/fp/bindKey.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/camelCase.js b/node_modules/lodash/fp/camelCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/camelCase.js rename to node_modules/lodash/fp/camelCase.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/capitalize.js b/node_modules/lodash/fp/capitalize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/capitalize.js rename to node_modules/lodash/fp/capitalize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/castArray.js b/node_modules/lodash/fp/castArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/castArray.js rename to node_modules/lodash/fp/castArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/ceil.js b/node_modules/lodash/fp/ceil.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/ceil.js rename to node_modules/lodash/fp/ceil.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/chain.js b/node_modules/lodash/fp/chain.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/chain.js rename to node_modules/lodash/fp/chain.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/chunk.js b/node_modules/lodash/fp/chunk.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/chunk.js rename to node_modules/lodash/fp/chunk.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/clamp.js b/node_modules/lodash/fp/clamp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/clamp.js rename to node_modules/lodash/fp/clamp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/clone.js b/node_modules/lodash/fp/clone.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/clone.js rename to node_modules/lodash/fp/clone.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/cloneDeep.js b/node_modules/lodash/fp/cloneDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/cloneDeep.js rename to node_modules/lodash/fp/cloneDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/cloneDeepWith.js b/node_modules/lodash/fp/cloneDeepWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/cloneDeepWith.js rename to node_modules/lodash/fp/cloneDeepWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/cloneWith.js b/node_modules/lodash/fp/cloneWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/cloneWith.js rename to node_modules/lodash/fp/cloneWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/collection.js b/node_modules/lodash/fp/collection.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/collection.js rename to node_modules/lodash/fp/collection.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/commit.js b/node_modules/lodash/fp/commit.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/commit.js rename to node_modules/lodash/fp/commit.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/compact.js b/node_modules/lodash/fp/compact.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/compact.js rename to node_modules/lodash/fp/compact.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/complement.js b/node_modules/lodash/fp/complement.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/complement.js rename to node_modules/lodash/fp/complement.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/compose.js b/node_modules/lodash/fp/compose.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/compose.js rename to node_modules/lodash/fp/compose.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/concat.js b/node_modules/lodash/fp/concat.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/concat.js rename to node_modules/lodash/fp/concat.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/cond.js b/node_modules/lodash/fp/cond.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/cond.js rename to node_modules/lodash/fp/cond.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/conforms.js b/node_modules/lodash/fp/conforms.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/conforms.js rename to node_modules/lodash/fp/conforms.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/conformsTo.js b/node_modules/lodash/fp/conformsTo.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/conformsTo.js rename to node_modules/lodash/fp/conformsTo.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/constant.js b/node_modules/lodash/fp/constant.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/constant.js rename to node_modules/lodash/fp/constant.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/contains.js b/node_modules/lodash/fp/contains.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/contains.js rename to node_modules/lodash/fp/contains.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/convert.js b/node_modules/lodash/fp/convert.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/convert.js rename to node_modules/lodash/fp/convert.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/countBy.js b/node_modules/lodash/fp/countBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/countBy.js rename to node_modules/lodash/fp/countBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/create.js b/node_modules/lodash/fp/create.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/create.js rename to node_modules/lodash/fp/create.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/curry.js b/node_modules/lodash/fp/curry.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/curry.js rename to node_modules/lodash/fp/curry.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/curryN.js b/node_modules/lodash/fp/curryN.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/curryN.js rename to node_modules/lodash/fp/curryN.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/curryRight.js b/node_modules/lodash/fp/curryRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/curryRight.js rename to node_modules/lodash/fp/curryRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/curryRightN.js b/node_modules/lodash/fp/curryRightN.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/curryRightN.js rename to node_modules/lodash/fp/curryRightN.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/date.js b/node_modules/lodash/fp/date.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/date.js rename to node_modules/lodash/fp/date.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/debounce.js b/node_modules/lodash/fp/debounce.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/debounce.js rename to node_modules/lodash/fp/debounce.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/deburr.js b/node_modules/lodash/fp/deburr.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/deburr.js rename to node_modules/lodash/fp/deburr.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/defaultTo.js b/node_modules/lodash/fp/defaultTo.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/defaultTo.js rename to node_modules/lodash/fp/defaultTo.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/defaults.js b/node_modules/lodash/fp/defaults.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/defaults.js rename to node_modules/lodash/fp/defaults.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/defaultsAll.js b/node_modules/lodash/fp/defaultsAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/defaultsAll.js rename to node_modules/lodash/fp/defaultsAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/defaultsDeep.js b/node_modules/lodash/fp/defaultsDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/defaultsDeep.js rename to node_modules/lodash/fp/defaultsDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/defaultsDeepAll.js b/node_modules/lodash/fp/defaultsDeepAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/defaultsDeepAll.js rename to node_modules/lodash/fp/defaultsDeepAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/defer.js b/node_modules/lodash/fp/defer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/defer.js rename to node_modules/lodash/fp/defer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/delay.js b/node_modules/lodash/fp/delay.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/delay.js rename to node_modules/lodash/fp/delay.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/difference.js b/node_modules/lodash/fp/difference.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/difference.js rename to node_modules/lodash/fp/difference.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/differenceBy.js b/node_modules/lodash/fp/differenceBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/differenceBy.js rename to node_modules/lodash/fp/differenceBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/differenceWith.js b/node_modules/lodash/fp/differenceWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/differenceWith.js rename to node_modules/lodash/fp/differenceWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/dissoc.js b/node_modules/lodash/fp/dissoc.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/dissoc.js rename to node_modules/lodash/fp/dissoc.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/dissocPath.js b/node_modules/lodash/fp/dissocPath.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/dissocPath.js rename to node_modules/lodash/fp/dissocPath.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/divide.js b/node_modules/lodash/fp/divide.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/divide.js rename to node_modules/lodash/fp/divide.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/drop.js b/node_modules/lodash/fp/drop.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/drop.js rename to node_modules/lodash/fp/drop.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/dropLast.js b/node_modules/lodash/fp/dropLast.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/dropLast.js rename to node_modules/lodash/fp/dropLast.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/dropLastWhile.js b/node_modules/lodash/fp/dropLastWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/dropLastWhile.js rename to node_modules/lodash/fp/dropLastWhile.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/dropRight.js b/node_modules/lodash/fp/dropRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/dropRight.js rename to node_modules/lodash/fp/dropRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/dropRightWhile.js b/node_modules/lodash/fp/dropRightWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/dropRightWhile.js rename to node_modules/lodash/fp/dropRightWhile.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/dropWhile.js b/node_modules/lodash/fp/dropWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/dropWhile.js rename to node_modules/lodash/fp/dropWhile.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/each.js b/node_modules/lodash/fp/each.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/each.js rename to node_modules/lodash/fp/each.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/eachRight.js b/node_modules/lodash/fp/eachRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/eachRight.js rename to node_modules/lodash/fp/eachRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/endsWith.js b/node_modules/lodash/fp/endsWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/endsWith.js rename to node_modules/lodash/fp/endsWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/entries.js b/node_modules/lodash/fp/entries.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/entries.js rename to node_modules/lodash/fp/entries.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/entriesIn.js b/node_modules/lodash/fp/entriesIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/entriesIn.js rename to node_modules/lodash/fp/entriesIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/eq.js b/node_modules/lodash/fp/eq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/eq.js rename to node_modules/lodash/fp/eq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/equals.js b/node_modules/lodash/fp/equals.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/equals.js rename to node_modules/lodash/fp/equals.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/escape.js b/node_modules/lodash/fp/escape.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/escape.js rename to node_modules/lodash/fp/escape.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/escapeRegExp.js b/node_modules/lodash/fp/escapeRegExp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/escapeRegExp.js rename to node_modules/lodash/fp/escapeRegExp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/every.js b/node_modules/lodash/fp/every.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/every.js rename to node_modules/lodash/fp/every.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/extend.js b/node_modules/lodash/fp/extend.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/extend.js rename to node_modules/lodash/fp/extend.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/extendAll.js b/node_modules/lodash/fp/extendAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/extendAll.js rename to node_modules/lodash/fp/extendAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/extendAllWith.js b/node_modules/lodash/fp/extendAllWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/extendAllWith.js rename to node_modules/lodash/fp/extendAllWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/extendWith.js b/node_modules/lodash/fp/extendWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/extendWith.js rename to node_modules/lodash/fp/extendWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/fill.js b/node_modules/lodash/fp/fill.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/fill.js rename to node_modules/lodash/fp/fill.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/filter.js b/node_modules/lodash/fp/filter.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/filter.js rename to node_modules/lodash/fp/filter.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/find.js b/node_modules/lodash/fp/find.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/find.js rename to node_modules/lodash/fp/find.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findFrom.js b/node_modules/lodash/fp/findFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findFrom.js rename to node_modules/lodash/fp/findFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findIndex.js b/node_modules/lodash/fp/findIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findIndex.js rename to node_modules/lodash/fp/findIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findIndexFrom.js b/node_modules/lodash/fp/findIndexFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findIndexFrom.js rename to node_modules/lodash/fp/findIndexFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findKey.js b/node_modules/lodash/fp/findKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findKey.js rename to node_modules/lodash/fp/findKey.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findLast.js b/node_modules/lodash/fp/findLast.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findLast.js rename to node_modules/lodash/fp/findLast.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findLastFrom.js b/node_modules/lodash/fp/findLastFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findLastFrom.js rename to node_modules/lodash/fp/findLastFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findLastIndex.js b/node_modules/lodash/fp/findLastIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findLastIndex.js rename to node_modules/lodash/fp/findLastIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findLastIndexFrom.js b/node_modules/lodash/fp/findLastIndexFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findLastIndexFrom.js rename to node_modules/lodash/fp/findLastIndexFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/findLastKey.js b/node_modules/lodash/fp/findLastKey.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/findLastKey.js rename to node_modules/lodash/fp/findLastKey.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/first.js b/node_modules/lodash/fp/first.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/first.js rename to node_modules/lodash/fp/first.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flatMap.js b/node_modules/lodash/fp/flatMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flatMap.js rename to node_modules/lodash/fp/flatMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flatMapDeep.js b/node_modules/lodash/fp/flatMapDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flatMapDeep.js rename to node_modules/lodash/fp/flatMapDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flatMapDepth.js b/node_modules/lodash/fp/flatMapDepth.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flatMapDepth.js rename to node_modules/lodash/fp/flatMapDepth.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flatten.js b/node_modules/lodash/fp/flatten.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flatten.js rename to node_modules/lodash/fp/flatten.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flattenDeep.js b/node_modules/lodash/fp/flattenDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flattenDeep.js rename to node_modules/lodash/fp/flattenDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flattenDepth.js b/node_modules/lodash/fp/flattenDepth.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flattenDepth.js rename to node_modules/lodash/fp/flattenDepth.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flip.js b/node_modules/lodash/fp/flip.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flip.js rename to node_modules/lodash/fp/flip.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/floor.js b/node_modules/lodash/fp/floor.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/floor.js rename to node_modules/lodash/fp/floor.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flow.js b/node_modules/lodash/fp/flow.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flow.js rename to node_modules/lodash/fp/flow.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/flowRight.js b/node_modules/lodash/fp/flowRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/flowRight.js rename to node_modules/lodash/fp/flowRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/forEach.js b/node_modules/lodash/fp/forEach.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/forEach.js rename to node_modules/lodash/fp/forEach.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/forEachRight.js b/node_modules/lodash/fp/forEachRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/forEachRight.js rename to node_modules/lodash/fp/forEachRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/forIn.js b/node_modules/lodash/fp/forIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/forIn.js rename to node_modules/lodash/fp/forIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/forInRight.js b/node_modules/lodash/fp/forInRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/forInRight.js rename to node_modules/lodash/fp/forInRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/forOwn.js b/node_modules/lodash/fp/forOwn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/forOwn.js rename to node_modules/lodash/fp/forOwn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/forOwnRight.js b/node_modules/lodash/fp/forOwnRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/forOwnRight.js rename to node_modules/lodash/fp/forOwnRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/fromPairs.js b/node_modules/lodash/fp/fromPairs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/fromPairs.js rename to node_modules/lodash/fp/fromPairs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/function.js b/node_modules/lodash/fp/function.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/function.js rename to node_modules/lodash/fp/function.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/functions.js b/node_modules/lodash/fp/functions.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/functions.js rename to node_modules/lodash/fp/functions.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/functionsIn.js b/node_modules/lodash/fp/functionsIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/functionsIn.js rename to node_modules/lodash/fp/functionsIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/get.js b/node_modules/lodash/fp/get.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/get.js rename to node_modules/lodash/fp/get.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/getOr.js b/node_modules/lodash/fp/getOr.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/getOr.js rename to node_modules/lodash/fp/getOr.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/groupBy.js b/node_modules/lodash/fp/groupBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/groupBy.js rename to node_modules/lodash/fp/groupBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/gt.js b/node_modules/lodash/fp/gt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/gt.js rename to node_modules/lodash/fp/gt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/gte.js b/node_modules/lodash/fp/gte.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/gte.js rename to node_modules/lodash/fp/gte.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/has.js b/node_modules/lodash/fp/has.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/has.js rename to node_modules/lodash/fp/has.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/hasIn.js b/node_modules/lodash/fp/hasIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/hasIn.js rename to node_modules/lodash/fp/hasIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/head.js b/node_modules/lodash/fp/head.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/head.js rename to node_modules/lodash/fp/head.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/identical.js b/node_modules/lodash/fp/identical.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/identical.js rename to node_modules/lodash/fp/identical.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/identity.js b/node_modules/lodash/fp/identity.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/identity.js rename to node_modules/lodash/fp/identity.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/inRange.js b/node_modules/lodash/fp/inRange.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/inRange.js rename to node_modules/lodash/fp/inRange.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/includes.js b/node_modules/lodash/fp/includes.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/includes.js rename to node_modules/lodash/fp/includes.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/includesFrom.js b/node_modules/lodash/fp/includesFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/includesFrom.js rename to node_modules/lodash/fp/includesFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/indexBy.js b/node_modules/lodash/fp/indexBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/indexBy.js rename to node_modules/lodash/fp/indexBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/indexOf.js b/node_modules/lodash/fp/indexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/indexOf.js rename to node_modules/lodash/fp/indexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/indexOfFrom.js b/node_modules/lodash/fp/indexOfFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/indexOfFrom.js rename to node_modules/lodash/fp/indexOfFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/init.js b/node_modules/lodash/fp/init.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/init.js rename to node_modules/lodash/fp/init.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/initial.js b/node_modules/lodash/fp/initial.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/initial.js rename to node_modules/lodash/fp/initial.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/intersection.js b/node_modules/lodash/fp/intersection.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/intersection.js rename to node_modules/lodash/fp/intersection.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/intersectionBy.js b/node_modules/lodash/fp/intersectionBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/intersectionBy.js rename to node_modules/lodash/fp/intersectionBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/intersectionWith.js b/node_modules/lodash/fp/intersectionWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/intersectionWith.js rename to node_modules/lodash/fp/intersectionWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/invert.js b/node_modules/lodash/fp/invert.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/invert.js rename to node_modules/lodash/fp/invert.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/invertBy.js b/node_modules/lodash/fp/invertBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/invertBy.js rename to node_modules/lodash/fp/invertBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/invertObj.js b/node_modules/lodash/fp/invertObj.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/invertObj.js rename to node_modules/lodash/fp/invertObj.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/invoke.js b/node_modules/lodash/fp/invoke.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/invoke.js rename to node_modules/lodash/fp/invoke.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/invokeArgs.js b/node_modules/lodash/fp/invokeArgs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/invokeArgs.js rename to node_modules/lodash/fp/invokeArgs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/invokeArgsMap.js b/node_modules/lodash/fp/invokeArgsMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/invokeArgsMap.js rename to node_modules/lodash/fp/invokeArgsMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/invokeMap.js b/node_modules/lodash/fp/invokeMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/invokeMap.js rename to node_modules/lodash/fp/invokeMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isArguments.js b/node_modules/lodash/fp/isArguments.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isArguments.js rename to node_modules/lodash/fp/isArguments.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isArray.js b/node_modules/lodash/fp/isArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isArray.js rename to node_modules/lodash/fp/isArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isArrayBuffer.js b/node_modules/lodash/fp/isArrayBuffer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isArrayBuffer.js rename to node_modules/lodash/fp/isArrayBuffer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isArrayLike.js b/node_modules/lodash/fp/isArrayLike.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isArrayLike.js rename to node_modules/lodash/fp/isArrayLike.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isArrayLikeObject.js b/node_modules/lodash/fp/isArrayLikeObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isArrayLikeObject.js rename to node_modules/lodash/fp/isArrayLikeObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isBoolean.js b/node_modules/lodash/fp/isBoolean.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isBoolean.js rename to node_modules/lodash/fp/isBoolean.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isBuffer.js b/node_modules/lodash/fp/isBuffer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isBuffer.js rename to node_modules/lodash/fp/isBuffer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isDate.js b/node_modules/lodash/fp/isDate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isDate.js rename to node_modules/lodash/fp/isDate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isElement.js b/node_modules/lodash/fp/isElement.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isElement.js rename to node_modules/lodash/fp/isElement.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isEmpty.js b/node_modules/lodash/fp/isEmpty.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isEmpty.js rename to node_modules/lodash/fp/isEmpty.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isEqual.js b/node_modules/lodash/fp/isEqual.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isEqual.js rename to node_modules/lodash/fp/isEqual.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isEqualWith.js b/node_modules/lodash/fp/isEqualWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isEqualWith.js rename to node_modules/lodash/fp/isEqualWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isError.js b/node_modules/lodash/fp/isError.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isError.js rename to node_modules/lodash/fp/isError.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isFinite.js b/node_modules/lodash/fp/isFinite.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isFinite.js rename to node_modules/lodash/fp/isFinite.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isFunction.js b/node_modules/lodash/fp/isFunction.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isFunction.js rename to node_modules/lodash/fp/isFunction.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isInteger.js b/node_modules/lodash/fp/isInteger.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isInteger.js rename to node_modules/lodash/fp/isInteger.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isLength.js b/node_modules/lodash/fp/isLength.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isLength.js rename to node_modules/lodash/fp/isLength.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isMap.js b/node_modules/lodash/fp/isMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isMap.js rename to node_modules/lodash/fp/isMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isMatch.js b/node_modules/lodash/fp/isMatch.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isMatch.js rename to node_modules/lodash/fp/isMatch.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isMatchWith.js b/node_modules/lodash/fp/isMatchWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isMatchWith.js rename to node_modules/lodash/fp/isMatchWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isNaN.js b/node_modules/lodash/fp/isNaN.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isNaN.js rename to node_modules/lodash/fp/isNaN.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isNative.js b/node_modules/lodash/fp/isNative.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isNative.js rename to node_modules/lodash/fp/isNative.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isNil.js b/node_modules/lodash/fp/isNil.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isNil.js rename to node_modules/lodash/fp/isNil.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isNull.js b/node_modules/lodash/fp/isNull.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isNull.js rename to node_modules/lodash/fp/isNull.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isNumber.js b/node_modules/lodash/fp/isNumber.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isNumber.js rename to node_modules/lodash/fp/isNumber.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isObject.js b/node_modules/lodash/fp/isObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isObject.js rename to node_modules/lodash/fp/isObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isObjectLike.js b/node_modules/lodash/fp/isObjectLike.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isObjectLike.js rename to node_modules/lodash/fp/isObjectLike.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isPlainObject.js b/node_modules/lodash/fp/isPlainObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isPlainObject.js rename to node_modules/lodash/fp/isPlainObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isRegExp.js b/node_modules/lodash/fp/isRegExp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isRegExp.js rename to node_modules/lodash/fp/isRegExp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isSafeInteger.js b/node_modules/lodash/fp/isSafeInteger.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isSafeInteger.js rename to node_modules/lodash/fp/isSafeInteger.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isSet.js b/node_modules/lodash/fp/isSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isSet.js rename to node_modules/lodash/fp/isSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isString.js b/node_modules/lodash/fp/isString.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isString.js rename to node_modules/lodash/fp/isString.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isSymbol.js b/node_modules/lodash/fp/isSymbol.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isSymbol.js rename to node_modules/lodash/fp/isSymbol.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isTypedArray.js b/node_modules/lodash/fp/isTypedArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isTypedArray.js rename to node_modules/lodash/fp/isTypedArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isUndefined.js b/node_modules/lodash/fp/isUndefined.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isUndefined.js rename to node_modules/lodash/fp/isUndefined.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isWeakMap.js b/node_modules/lodash/fp/isWeakMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isWeakMap.js rename to node_modules/lodash/fp/isWeakMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/isWeakSet.js b/node_modules/lodash/fp/isWeakSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/isWeakSet.js rename to node_modules/lodash/fp/isWeakSet.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/iteratee.js b/node_modules/lodash/fp/iteratee.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/iteratee.js rename to node_modules/lodash/fp/iteratee.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/join.js b/node_modules/lodash/fp/join.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/join.js rename to node_modules/lodash/fp/join.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/juxt.js b/node_modules/lodash/fp/juxt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/juxt.js rename to node_modules/lodash/fp/juxt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/kebabCase.js b/node_modules/lodash/fp/kebabCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/kebabCase.js rename to node_modules/lodash/fp/kebabCase.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/keyBy.js b/node_modules/lodash/fp/keyBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/keyBy.js rename to node_modules/lodash/fp/keyBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/keys.js b/node_modules/lodash/fp/keys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/keys.js rename to node_modules/lodash/fp/keys.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/keysIn.js b/node_modules/lodash/fp/keysIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/keysIn.js rename to node_modules/lodash/fp/keysIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/lang.js b/node_modules/lodash/fp/lang.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/lang.js rename to node_modules/lodash/fp/lang.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/last.js b/node_modules/lodash/fp/last.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/last.js rename to node_modules/lodash/fp/last.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/lastIndexOf.js b/node_modules/lodash/fp/lastIndexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/lastIndexOf.js rename to node_modules/lodash/fp/lastIndexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/lastIndexOfFrom.js b/node_modules/lodash/fp/lastIndexOfFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/lastIndexOfFrom.js rename to node_modules/lodash/fp/lastIndexOfFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/lowerCase.js b/node_modules/lodash/fp/lowerCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/lowerCase.js rename to node_modules/lodash/fp/lowerCase.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/lowerFirst.js b/node_modules/lodash/fp/lowerFirst.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/lowerFirst.js rename to node_modules/lodash/fp/lowerFirst.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/lt.js b/node_modules/lodash/fp/lt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/lt.js rename to node_modules/lodash/fp/lt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/lte.js b/node_modules/lodash/fp/lte.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/lte.js rename to node_modules/lodash/fp/lte.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/map.js b/node_modules/lodash/fp/map.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/map.js rename to node_modules/lodash/fp/map.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/mapKeys.js b/node_modules/lodash/fp/mapKeys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/mapKeys.js rename to node_modules/lodash/fp/mapKeys.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/mapValues.js b/node_modules/lodash/fp/mapValues.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/mapValues.js rename to node_modules/lodash/fp/mapValues.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/matches.js b/node_modules/lodash/fp/matches.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/matches.js rename to node_modules/lodash/fp/matches.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/matchesProperty.js b/node_modules/lodash/fp/matchesProperty.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/matchesProperty.js rename to node_modules/lodash/fp/matchesProperty.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/math.js b/node_modules/lodash/fp/math.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/math.js rename to node_modules/lodash/fp/math.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/max.js b/node_modules/lodash/fp/max.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/max.js rename to node_modules/lodash/fp/max.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/maxBy.js b/node_modules/lodash/fp/maxBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/maxBy.js rename to node_modules/lodash/fp/maxBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/mean.js b/node_modules/lodash/fp/mean.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/mean.js rename to node_modules/lodash/fp/mean.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/meanBy.js b/node_modules/lodash/fp/meanBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/meanBy.js rename to node_modules/lodash/fp/meanBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/memoize.js b/node_modules/lodash/fp/memoize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/memoize.js rename to node_modules/lodash/fp/memoize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/merge.js b/node_modules/lodash/fp/merge.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/merge.js rename to node_modules/lodash/fp/merge.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/mergeAll.js b/node_modules/lodash/fp/mergeAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/mergeAll.js rename to node_modules/lodash/fp/mergeAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/mergeAllWith.js b/node_modules/lodash/fp/mergeAllWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/mergeAllWith.js rename to node_modules/lodash/fp/mergeAllWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/mergeWith.js b/node_modules/lodash/fp/mergeWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/mergeWith.js rename to node_modules/lodash/fp/mergeWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/method.js b/node_modules/lodash/fp/method.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/method.js rename to node_modules/lodash/fp/method.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/methodOf.js b/node_modules/lodash/fp/methodOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/methodOf.js rename to node_modules/lodash/fp/methodOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/min.js b/node_modules/lodash/fp/min.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/min.js rename to node_modules/lodash/fp/min.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/minBy.js b/node_modules/lodash/fp/minBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/minBy.js rename to node_modules/lodash/fp/minBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/mixin.js b/node_modules/lodash/fp/mixin.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/mixin.js rename to node_modules/lodash/fp/mixin.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/multiply.js b/node_modules/lodash/fp/multiply.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/multiply.js rename to node_modules/lodash/fp/multiply.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/nAry.js b/node_modules/lodash/fp/nAry.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/nAry.js rename to node_modules/lodash/fp/nAry.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/negate.js b/node_modules/lodash/fp/negate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/negate.js rename to node_modules/lodash/fp/negate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/next.js b/node_modules/lodash/fp/next.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/next.js rename to node_modules/lodash/fp/next.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/noop.js b/node_modules/lodash/fp/noop.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/noop.js rename to node_modules/lodash/fp/noop.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/now.js b/node_modules/lodash/fp/now.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/now.js rename to node_modules/lodash/fp/now.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/nth.js b/node_modules/lodash/fp/nth.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/nth.js rename to node_modules/lodash/fp/nth.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/nthArg.js b/node_modules/lodash/fp/nthArg.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/nthArg.js rename to node_modules/lodash/fp/nthArg.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/number.js b/node_modules/lodash/fp/number.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/number.js rename to node_modules/lodash/fp/number.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/object.js b/node_modules/lodash/fp/object.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/object.js rename to node_modules/lodash/fp/object.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/omit.js b/node_modules/lodash/fp/omit.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/omit.js rename to node_modules/lodash/fp/omit.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/omitAll.js b/node_modules/lodash/fp/omitAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/omitAll.js rename to node_modules/lodash/fp/omitAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/omitBy.js b/node_modules/lodash/fp/omitBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/omitBy.js rename to node_modules/lodash/fp/omitBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/once.js b/node_modules/lodash/fp/once.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/once.js rename to node_modules/lodash/fp/once.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/orderBy.js b/node_modules/lodash/fp/orderBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/orderBy.js rename to node_modules/lodash/fp/orderBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/over.js b/node_modules/lodash/fp/over.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/over.js rename to node_modules/lodash/fp/over.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/overArgs.js b/node_modules/lodash/fp/overArgs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/overArgs.js rename to node_modules/lodash/fp/overArgs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/overEvery.js b/node_modules/lodash/fp/overEvery.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/overEvery.js rename to node_modules/lodash/fp/overEvery.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/overSome.js b/node_modules/lodash/fp/overSome.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/overSome.js rename to node_modules/lodash/fp/overSome.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pad.js b/node_modules/lodash/fp/pad.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pad.js rename to node_modules/lodash/fp/pad.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/padChars.js b/node_modules/lodash/fp/padChars.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/padChars.js rename to node_modules/lodash/fp/padChars.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/padCharsEnd.js b/node_modules/lodash/fp/padCharsEnd.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/padCharsEnd.js rename to node_modules/lodash/fp/padCharsEnd.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/padCharsStart.js b/node_modules/lodash/fp/padCharsStart.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/padCharsStart.js rename to node_modules/lodash/fp/padCharsStart.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/padEnd.js b/node_modules/lodash/fp/padEnd.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/padEnd.js rename to node_modules/lodash/fp/padEnd.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/padStart.js b/node_modules/lodash/fp/padStart.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/padStart.js rename to node_modules/lodash/fp/padStart.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/parseInt.js b/node_modules/lodash/fp/parseInt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/parseInt.js rename to node_modules/lodash/fp/parseInt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/partial.js b/node_modules/lodash/fp/partial.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/partial.js rename to node_modules/lodash/fp/partial.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/partialRight.js b/node_modules/lodash/fp/partialRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/partialRight.js rename to node_modules/lodash/fp/partialRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/partition.js b/node_modules/lodash/fp/partition.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/partition.js rename to node_modules/lodash/fp/partition.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/path.js b/node_modules/lodash/fp/path.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/path.js rename to node_modules/lodash/fp/path.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pathEq.js b/node_modules/lodash/fp/pathEq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pathEq.js rename to node_modules/lodash/fp/pathEq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pathOr.js b/node_modules/lodash/fp/pathOr.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pathOr.js rename to node_modules/lodash/fp/pathOr.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/paths.js b/node_modules/lodash/fp/paths.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/paths.js rename to node_modules/lodash/fp/paths.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pick.js b/node_modules/lodash/fp/pick.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pick.js rename to node_modules/lodash/fp/pick.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pickAll.js b/node_modules/lodash/fp/pickAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pickAll.js rename to node_modules/lodash/fp/pickAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pickBy.js b/node_modules/lodash/fp/pickBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pickBy.js rename to node_modules/lodash/fp/pickBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pipe.js b/node_modules/lodash/fp/pipe.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pipe.js rename to node_modules/lodash/fp/pipe.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/placeholder.js b/node_modules/lodash/fp/placeholder.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/placeholder.js rename to node_modules/lodash/fp/placeholder.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/plant.js b/node_modules/lodash/fp/plant.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/plant.js rename to node_modules/lodash/fp/plant.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pluck.js b/node_modules/lodash/fp/pluck.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pluck.js rename to node_modules/lodash/fp/pluck.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/prop.js b/node_modules/lodash/fp/prop.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/prop.js rename to node_modules/lodash/fp/prop.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/propEq.js b/node_modules/lodash/fp/propEq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/propEq.js rename to node_modules/lodash/fp/propEq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/propOr.js b/node_modules/lodash/fp/propOr.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/propOr.js rename to node_modules/lodash/fp/propOr.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/property.js b/node_modules/lodash/fp/property.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/property.js rename to node_modules/lodash/fp/property.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/propertyOf.js b/node_modules/lodash/fp/propertyOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/propertyOf.js rename to node_modules/lodash/fp/propertyOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/props.js b/node_modules/lodash/fp/props.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/props.js rename to node_modules/lodash/fp/props.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pull.js b/node_modules/lodash/fp/pull.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pull.js rename to node_modules/lodash/fp/pull.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pullAll.js b/node_modules/lodash/fp/pullAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pullAll.js rename to node_modules/lodash/fp/pullAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pullAllBy.js b/node_modules/lodash/fp/pullAllBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pullAllBy.js rename to node_modules/lodash/fp/pullAllBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pullAllWith.js b/node_modules/lodash/fp/pullAllWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pullAllWith.js rename to node_modules/lodash/fp/pullAllWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/pullAt.js b/node_modules/lodash/fp/pullAt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/pullAt.js rename to node_modules/lodash/fp/pullAt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/random.js b/node_modules/lodash/fp/random.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/random.js rename to node_modules/lodash/fp/random.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/range.js b/node_modules/lodash/fp/range.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/range.js rename to node_modules/lodash/fp/range.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/rangeRight.js b/node_modules/lodash/fp/rangeRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/rangeRight.js rename to node_modules/lodash/fp/rangeRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/rangeStep.js b/node_modules/lodash/fp/rangeStep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/rangeStep.js rename to node_modules/lodash/fp/rangeStep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/rangeStepRight.js b/node_modules/lodash/fp/rangeStepRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/rangeStepRight.js rename to node_modules/lodash/fp/rangeStepRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/rearg.js b/node_modules/lodash/fp/rearg.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/rearg.js rename to node_modules/lodash/fp/rearg.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/reduce.js b/node_modules/lodash/fp/reduce.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/reduce.js rename to node_modules/lodash/fp/reduce.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/reduceRight.js b/node_modules/lodash/fp/reduceRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/reduceRight.js rename to node_modules/lodash/fp/reduceRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/reject.js b/node_modules/lodash/fp/reject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/reject.js rename to node_modules/lodash/fp/reject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/remove.js b/node_modules/lodash/fp/remove.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/remove.js rename to node_modules/lodash/fp/remove.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/repeat.js b/node_modules/lodash/fp/repeat.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/repeat.js rename to node_modules/lodash/fp/repeat.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/replace.js b/node_modules/lodash/fp/replace.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/replace.js rename to node_modules/lodash/fp/replace.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/rest.js b/node_modules/lodash/fp/rest.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/rest.js rename to node_modules/lodash/fp/rest.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/restFrom.js b/node_modules/lodash/fp/restFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/restFrom.js rename to node_modules/lodash/fp/restFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/result.js b/node_modules/lodash/fp/result.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/result.js rename to node_modules/lodash/fp/result.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/reverse.js b/node_modules/lodash/fp/reverse.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/reverse.js rename to node_modules/lodash/fp/reverse.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/round.js b/node_modules/lodash/fp/round.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/round.js rename to node_modules/lodash/fp/round.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sample.js b/node_modules/lodash/fp/sample.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sample.js rename to node_modules/lodash/fp/sample.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sampleSize.js b/node_modules/lodash/fp/sampleSize.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sampleSize.js rename to node_modules/lodash/fp/sampleSize.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/seq.js b/node_modules/lodash/fp/seq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/seq.js rename to node_modules/lodash/fp/seq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/set.js b/node_modules/lodash/fp/set.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/set.js rename to node_modules/lodash/fp/set.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/setWith.js b/node_modules/lodash/fp/setWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/setWith.js rename to node_modules/lodash/fp/setWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/shuffle.js b/node_modules/lodash/fp/shuffle.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/shuffle.js rename to node_modules/lodash/fp/shuffle.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/size.js b/node_modules/lodash/fp/size.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/size.js rename to node_modules/lodash/fp/size.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/slice.js b/node_modules/lodash/fp/slice.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/slice.js rename to node_modules/lodash/fp/slice.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/snakeCase.js b/node_modules/lodash/fp/snakeCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/snakeCase.js rename to node_modules/lodash/fp/snakeCase.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/some.js b/node_modules/lodash/fp/some.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/some.js rename to node_modules/lodash/fp/some.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortBy.js b/node_modules/lodash/fp/sortBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortBy.js rename to node_modules/lodash/fp/sortBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedIndex.js b/node_modules/lodash/fp/sortedIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedIndex.js rename to node_modules/lodash/fp/sortedIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedIndexBy.js b/node_modules/lodash/fp/sortedIndexBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedIndexBy.js rename to node_modules/lodash/fp/sortedIndexBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedIndexOf.js b/node_modules/lodash/fp/sortedIndexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedIndexOf.js rename to node_modules/lodash/fp/sortedIndexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedLastIndex.js b/node_modules/lodash/fp/sortedLastIndex.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedLastIndex.js rename to node_modules/lodash/fp/sortedLastIndex.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedLastIndexBy.js b/node_modules/lodash/fp/sortedLastIndexBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedLastIndexBy.js rename to node_modules/lodash/fp/sortedLastIndexBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedLastIndexOf.js b/node_modules/lodash/fp/sortedLastIndexOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedLastIndexOf.js rename to node_modules/lodash/fp/sortedLastIndexOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedUniq.js b/node_modules/lodash/fp/sortedUniq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedUniq.js rename to node_modules/lodash/fp/sortedUniq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sortedUniqBy.js b/node_modules/lodash/fp/sortedUniqBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sortedUniqBy.js rename to node_modules/lodash/fp/sortedUniqBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/split.js b/node_modules/lodash/fp/split.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/split.js rename to node_modules/lodash/fp/split.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/spread.js b/node_modules/lodash/fp/spread.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/spread.js rename to node_modules/lodash/fp/spread.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/spreadFrom.js b/node_modules/lodash/fp/spreadFrom.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/spreadFrom.js rename to node_modules/lodash/fp/spreadFrom.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/startCase.js b/node_modules/lodash/fp/startCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/startCase.js rename to node_modules/lodash/fp/startCase.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/startsWith.js b/node_modules/lodash/fp/startsWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/startsWith.js rename to node_modules/lodash/fp/startsWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/string.js b/node_modules/lodash/fp/string.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/string.js rename to node_modules/lodash/fp/string.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/stubArray.js b/node_modules/lodash/fp/stubArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/stubArray.js rename to node_modules/lodash/fp/stubArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/stubFalse.js b/node_modules/lodash/fp/stubFalse.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/stubFalse.js rename to node_modules/lodash/fp/stubFalse.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/stubObject.js b/node_modules/lodash/fp/stubObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/stubObject.js rename to node_modules/lodash/fp/stubObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/stubString.js b/node_modules/lodash/fp/stubString.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/stubString.js rename to node_modules/lodash/fp/stubString.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/stubTrue.js b/node_modules/lodash/fp/stubTrue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/stubTrue.js rename to node_modules/lodash/fp/stubTrue.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/subtract.js b/node_modules/lodash/fp/subtract.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/subtract.js rename to node_modules/lodash/fp/subtract.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sum.js b/node_modules/lodash/fp/sum.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sum.js rename to node_modules/lodash/fp/sum.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/sumBy.js b/node_modules/lodash/fp/sumBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/sumBy.js rename to node_modules/lodash/fp/sumBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/symmetricDifference.js b/node_modules/lodash/fp/symmetricDifference.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/symmetricDifference.js rename to node_modules/lodash/fp/symmetricDifference.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/symmetricDifferenceBy.js b/node_modules/lodash/fp/symmetricDifferenceBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/symmetricDifferenceBy.js rename to node_modules/lodash/fp/symmetricDifferenceBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/symmetricDifferenceWith.js b/node_modules/lodash/fp/symmetricDifferenceWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/symmetricDifferenceWith.js rename to node_modules/lodash/fp/symmetricDifferenceWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/tail.js b/node_modules/lodash/fp/tail.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/tail.js rename to node_modules/lodash/fp/tail.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/take.js b/node_modules/lodash/fp/take.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/take.js rename to node_modules/lodash/fp/take.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/takeLast.js b/node_modules/lodash/fp/takeLast.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/takeLast.js rename to node_modules/lodash/fp/takeLast.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/takeLastWhile.js b/node_modules/lodash/fp/takeLastWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/takeLastWhile.js rename to node_modules/lodash/fp/takeLastWhile.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/takeRight.js b/node_modules/lodash/fp/takeRight.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/takeRight.js rename to node_modules/lodash/fp/takeRight.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/takeRightWhile.js b/node_modules/lodash/fp/takeRightWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/takeRightWhile.js rename to node_modules/lodash/fp/takeRightWhile.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/takeWhile.js b/node_modules/lodash/fp/takeWhile.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/takeWhile.js rename to node_modules/lodash/fp/takeWhile.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/tap.js b/node_modules/lodash/fp/tap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/tap.js rename to node_modules/lodash/fp/tap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/template.js b/node_modules/lodash/fp/template.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/template.js rename to node_modules/lodash/fp/template.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/templateSettings.js b/node_modules/lodash/fp/templateSettings.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/templateSettings.js rename to node_modules/lodash/fp/templateSettings.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/throttle.js b/node_modules/lodash/fp/throttle.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/throttle.js rename to node_modules/lodash/fp/throttle.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/thru.js b/node_modules/lodash/fp/thru.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/thru.js rename to node_modules/lodash/fp/thru.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/times.js b/node_modules/lodash/fp/times.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/times.js rename to node_modules/lodash/fp/times.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toArray.js b/node_modules/lodash/fp/toArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toArray.js rename to node_modules/lodash/fp/toArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toFinite.js b/node_modules/lodash/fp/toFinite.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toFinite.js rename to node_modules/lodash/fp/toFinite.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toInteger.js b/node_modules/lodash/fp/toInteger.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toInteger.js rename to node_modules/lodash/fp/toInteger.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toIterator.js b/node_modules/lodash/fp/toIterator.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toIterator.js rename to node_modules/lodash/fp/toIterator.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toJSON.js b/node_modules/lodash/fp/toJSON.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toJSON.js rename to node_modules/lodash/fp/toJSON.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toLength.js b/node_modules/lodash/fp/toLength.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toLength.js rename to node_modules/lodash/fp/toLength.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toLower.js b/node_modules/lodash/fp/toLower.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toLower.js rename to node_modules/lodash/fp/toLower.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toNumber.js b/node_modules/lodash/fp/toNumber.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toNumber.js rename to node_modules/lodash/fp/toNumber.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toPairs.js b/node_modules/lodash/fp/toPairs.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toPairs.js rename to node_modules/lodash/fp/toPairs.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toPairsIn.js b/node_modules/lodash/fp/toPairsIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toPairsIn.js rename to node_modules/lodash/fp/toPairsIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toPath.js b/node_modules/lodash/fp/toPath.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toPath.js rename to node_modules/lodash/fp/toPath.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toPlainObject.js b/node_modules/lodash/fp/toPlainObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toPlainObject.js rename to node_modules/lodash/fp/toPlainObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toSafeInteger.js b/node_modules/lodash/fp/toSafeInteger.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toSafeInteger.js rename to node_modules/lodash/fp/toSafeInteger.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toString.js b/node_modules/lodash/fp/toString.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toString.js rename to node_modules/lodash/fp/toString.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/toUpper.js b/node_modules/lodash/fp/toUpper.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/toUpper.js rename to node_modules/lodash/fp/toUpper.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/transform.js b/node_modules/lodash/fp/transform.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/transform.js rename to node_modules/lodash/fp/transform.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/trim.js b/node_modules/lodash/fp/trim.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/trim.js rename to node_modules/lodash/fp/trim.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/trimChars.js b/node_modules/lodash/fp/trimChars.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/trimChars.js rename to node_modules/lodash/fp/trimChars.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/trimCharsEnd.js b/node_modules/lodash/fp/trimCharsEnd.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/trimCharsEnd.js rename to node_modules/lodash/fp/trimCharsEnd.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/trimCharsStart.js b/node_modules/lodash/fp/trimCharsStart.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/trimCharsStart.js rename to node_modules/lodash/fp/trimCharsStart.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/trimEnd.js b/node_modules/lodash/fp/trimEnd.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/trimEnd.js rename to node_modules/lodash/fp/trimEnd.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/trimStart.js b/node_modules/lodash/fp/trimStart.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/trimStart.js rename to node_modules/lodash/fp/trimStart.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/truncate.js b/node_modules/lodash/fp/truncate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/truncate.js rename to node_modules/lodash/fp/truncate.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unapply.js b/node_modules/lodash/fp/unapply.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unapply.js rename to node_modules/lodash/fp/unapply.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unary.js b/node_modules/lodash/fp/unary.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unary.js rename to node_modules/lodash/fp/unary.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unescape.js b/node_modules/lodash/fp/unescape.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unescape.js rename to node_modules/lodash/fp/unescape.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/union.js b/node_modules/lodash/fp/union.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/union.js rename to node_modules/lodash/fp/union.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unionBy.js b/node_modules/lodash/fp/unionBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unionBy.js rename to node_modules/lodash/fp/unionBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unionWith.js b/node_modules/lodash/fp/unionWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unionWith.js rename to node_modules/lodash/fp/unionWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/uniq.js b/node_modules/lodash/fp/uniq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/uniq.js rename to node_modules/lodash/fp/uniq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/uniqBy.js b/node_modules/lodash/fp/uniqBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/uniqBy.js rename to node_modules/lodash/fp/uniqBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/uniqWith.js b/node_modules/lodash/fp/uniqWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/uniqWith.js rename to node_modules/lodash/fp/uniqWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/uniqueId.js b/node_modules/lodash/fp/uniqueId.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/uniqueId.js rename to node_modules/lodash/fp/uniqueId.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unnest.js b/node_modules/lodash/fp/unnest.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unnest.js rename to node_modules/lodash/fp/unnest.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unset.js b/node_modules/lodash/fp/unset.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unset.js rename to node_modules/lodash/fp/unset.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unzip.js b/node_modules/lodash/fp/unzip.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unzip.js rename to node_modules/lodash/fp/unzip.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/unzipWith.js b/node_modules/lodash/fp/unzipWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/unzipWith.js rename to node_modules/lodash/fp/unzipWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/update.js b/node_modules/lodash/fp/update.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/update.js rename to node_modules/lodash/fp/update.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/updateWith.js b/node_modules/lodash/fp/updateWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/updateWith.js rename to node_modules/lodash/fp/updateWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/upperCase.js b/node_modules/lodash/fp/upperCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/upperCase.js rename to node_modules/lodash/fp/upperCase.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/upperFirst.js b/node_modules/lodash/fp/upperFirst.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/upperFirst.js rename to node_modules/lodash/fp/upperFirst.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/useWith.js b/node_modules/lodash/fp/useWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/useWith.js rename to node_modules/lodash/fp/useWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/util.js b/node_modules/lodash/fp/util.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/util.js rename to node_modules/lodash/fp/util.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/value.js b/node_modules/lodash/fp/value.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/value.js rename to node_modules/lodash/fp/value.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/valueOf.js b/node_modules/lodash/fp/valueOf.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/valueOf.js rename to node_modules/lodash/fp/valueOf.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/values.js b/node_modules/lodash/fp/values.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/values.js rename to node_modules/lodash/fp/values.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/valuesIn.js b/node_modules/lodash/fp/valuesIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/valuesIn.js rename to node_modules/lodash/fp/valuesIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/where.js b/node_modules/lodash/fp/where.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/where.js rename to node_modules/lodash/fp/where.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/whereEq.js b/node_modules/lodash/fp/whereEq.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/whereEq.js rename to node_modules/lodash/fp/whereEq.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/without.js b/node_modules/lodash/fp/without.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/without.js rename to node_modules/lodash/fp/without.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/words.js b/node_modules/lodash/fp/words.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/words.js rename to node_modules/lodash/fp/words.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/wrap.js b/node_modules/lodash/fp/wrap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/wrap.js rename to node_modules/lodash/fp/wrap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/wrapperAt.js b/node_modules/lodash/fp/wrapperAt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/wrapperAt.js rename to node_modules/lodash/fp/wrapperAt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/wrapperChain.js b/node_modules/lodash/fp/wrapperChain.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/wrapperChain.js rename to node_modules/lodash/fp/wrapperChain.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/wrapperLodash.js b/node_modules/lodash/fp/wrapperLodash.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/wrapperLodash.js rename to node_modules/lodash/fp/wrapperLodash.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/wrapperReverse.js b/node_modules/lodash/fp/wrapperReverse.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/wrapperReverse.js rename to node_modules/lodash/fp/wrapperReverse.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/wrapperValue.js b/node_modules/lodash/fp/wrapperValue.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/wrapperValue.js rename to node_modules/lodash/fp/wrapperValue.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/xor.js b/node_modules/lodash/fp/xor.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/xor.js rename to node_modules/lodash/fp/xor.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/xorBy.js b/node_modules/lodash/fp/xorBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/xorBy.js rename to node_modules/lodash/fp/xorBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/xorWith.js b/node_modules/lodash/fp/xorWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/xorWith.js rename to node_modules/lodash/fp/xorWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/zip.js b/node_modules/lodash/fp/zip.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/zip.js rename to node_modules/lodash/fp/zip.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/zipAll.js b/node_modules/lodash/fp/zipAll.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/zipAll.js rename to node_modules/lodash/fp/zipAll.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/zipObj.js b/node_modules/lodash/fp/zipObj.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/zipObj.js rename to node_modules/lodash/fp/zipObj.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/zipObject.js b/node_modules/lodash/fp/zipObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/zipObject.js rename to node_modules/lodash/fp/zipObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/zipObjectDeep.js b/node_modules/lodash/fp/zipObjectDeep.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/zipObjectDeep.js rename to node_modules/lodash/fp/zipObjectDeep.js diff --git a/node_modules/archiver-utils/node_modules/lodash/fp/zipWith.js b/node_modules/lodash/fp/zipWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/fp/zipWith.js rename to node_modules/lodash/fp/zipWith.js diff --git a/node_modules/lodash/fromPairs.js b/node_modules/lodash/fromPairs.js new file mode 100644 index 000000000..ee7940d24 --- /dev/null +++ b/node_modules/lodash/fromPairs.js @@ -0,0 +1,28 @@ +/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ +function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; +} + +module.exports = fromPairs; diff --git a/node_modules/archiver-utils/node_modules/lodash/function.js b/node_modules/lodash/function.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/function.js rename to node_modules/lodash/function.js diff --git a/node_modules/archiver-utils/node_modules/lodash/functions.js b/node_modules/lodash/functions.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/functions.js rename to node_modules/lodash/functions.js diff --git a/node_modules/archiver-utils/node_modules/lodash/functionsIn.js b/node_modules/lodash/functionsIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/functionsIn.js rename to node_modules/lodash/functionsIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/get.js b/node_modules/lodash/get.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/get.js rename to node_modules/lodash/get.js diff --git a/node_modules/lodash/groupBy.js b/node_modules/lodash/groupBy.js new file mode 100644 index 000000000..babf4f6ba --- /dev/null +++ b/node_modules/lodash/groupBy.js @@ -0,0 +1,41 @@ +var baseAssignValue = require('./_baseAssignValue'), + createAggregator = require('./_createAggregator'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } +}); + +module.exports = groupBy; diff --git a/node_modules/archiver-utils/node_modules/lodash/gt.js b/node_modules/lodash/gt.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/gt.js rename to node_modules/lodash/gt.js diff --git a/node_modules/archiver-utils/node_modules/lodash/gte.js b/node_modules/lodash/gte.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/gte.js rename to node_modules/lodash/gte.js diff --git a/node_modules/archiver-utils/node_modules/lodash/has.js b/node_modules/lodash/has.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/has.js rename to node_modules/lodash/has.js diff --git a/node_modules/archiver-utils/node_modules/lodash/hasIn.js b/node_modules/lodash/hasIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/hasIn.js rename to node_modules/lodash/hasIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/head.js b/node_modules/lodash/head.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/head.js rename to node_modules/lodash/head.js diff --git a/node_modules/archiver-utils/node_modules/lodash/identity.js b/node_modules/lodash/identity.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/identity.js rename to node_modules/lodash/identity.js diff --git a/node_modules/archiver-utils/node_modules/lodash/inRange.js b/node_modules/lodash/inRange.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/inRange.js rename to node_modules/lodash/inRange.js diff --git a/node_modules/archiver-utils/node_modules/lodash/includes.js b/node_modules/lodash/includes.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/includes.js rename to node_modules/lodash/includes.js diff --git a/node_modules/archiver-utils/node_modules/lodash/index.js b/node_modules/lodash/index.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/index.js rename to node_modules/lodash/index.js diff --git a/node_modules/lodash/indexOf.js b/node_modules/lodash/indexOf.js new file mode 100644 index 000000000..3c644af2e --- /dev/null +++ b/node_modules/lodash/indexOf.js @@ -0,0 +1,42 @@ +var baseIndexOf = require('./_baseIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ +function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); +} + +module.exports = indexOf; diff --git a/node_modules/lodash/initial.js b/node_modules/lodash/initial.js new file mode 100644 index 000000000..f47fc5092 --- /dev/null +++ b/node_modules/lodash/initial.js @@ -0,0 +1,22 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; +} + +module.exports = initial; diff --git a/node_modules/archiver-utils/node_modules/lodash/intersection.js b/node_modules/lodash/intersection.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/intersection.js rename to node_modules/lodash/intersection.js diff --git a/node_modules/archiver-utils/node_modules/lodash/intersectionBy.js b/node_modules/lodash/intersectionBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/intersectionBy.js rename to node_modules/lodash/intersectionBy.js diff --git a/node_modules/lodash/intersectionWith.js b/node_modules/lodash/intersectionWith.js new file mode 100644 index 000000000..63cabfaa4 --- /dev/null +++ b/node_modules/lodash/intersectionWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ +var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; +}); + +module.exports = intersectionWith; diff --git a/node_modules/archiver-utils/node_modules/lodash/invert.js b/node_modules/lodash/invert.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/invert.js rename to node_modules/lodash/invert.js diff --git a/node_modules/archiver-utils/node_modules/lodash/invertBy.js b/node_modules/lodash/invertBy.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/invertBy.js rename to node_modules/lodash/invertBy.js diff --git a/node_modules/archiver-utils/node_modules/lodash/invoke.js b/node_modules/lodash/invoke.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/invoke.js rename to node_modules/lodash/invoke.js diff --git a/node_modules/archiver-utils/node_modules/lodash/invokeMap.js b/node_modules/lodash/invokeMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/invokeMap.js rename to node_modules/lodash/invokeMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isArguments.js b/node_modules/lodash/isArguments.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isArguments.js rename to node_modules/lodash/isArguments.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isArray.js b/node_modules/lodash/isArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isArray.js rename to node_modules/lodash/isArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isArrayBuffer.js b/node_modules/lodash/isArrayBuffer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isArrayBuffer.js rename to node_modules/lodash/isArrayBuffer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isArrayLike.js b/node_modules/lodash/isArrayLike.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isArrayLike.js rename to node_modules/lodash/isArrayLike.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isArrayLikeObject.js b/node_modules/lodash/isArrayLikeObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isArrayLikeObject.js rename to node_modules/lodash/isArrayLikeObject.js diff --git a/node_modules/lodash/isBoolean.js b/node_modules/lodash/isBoolean.js new file mode 100644 index 000000000..a43ed4b8f --- /dev/null +++ b/node_modules/lodash/isBoolean.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); +} + +module.exports = isBoolean; diff --git a/node_modules/archiver-utils/node_modules/lodash/isBuffer.js b/node_modules/lodash/isBuffer.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isBuffer.js rename to node_modules/lodash/isBuffer.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isDate.js b/node_modules/lodash/isDate.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isDate.js rename to node_modules/lodash/isDate.js diff --git a/node_modules/lodash/isElement.js b/node_modules/lodash/isElement.js new file mode 100644 index 000000000..76ae29c3b --- /dev/null +++ b/node_modules/lodash/isElement.js @@ -0,0 +1,25 @@ +var isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ +function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +} + +module.exports = isElement; diff --git a/node_modules/lodash/isEmpty.js b/node_modules/lodash/isEmpty.js new file mode 100644 index 000000000..3597294a4 --- /dev/null +++ b/node_modules/lodash/isEmpty.js @@ -0,0 +1,77 @@ +var baseKeys = require('./_baseKeys'), + getTag = require('./_getTag'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('./isArrayLike'), + isBuffer = require('./isBuffer'), + isPrototype = require('./_isPrototype'), + isTypedArray = require('./isTypedArray'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + 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 false; + } + } + return true; +} + +module.exports = isEmpty; diff --git a/node_modules/archiver-utils/node_modules/lodash/isEqual.js b/node_modules/lodash/isEqual.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isEqual.js rename to node_modules/lodash/isEqual.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isEqualWith.js b/node_modules/lodash/isEqualWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isEqualWith.js rename to node_modules/lodash/isEqualWith.js diff --git a/node_modules/lodash/isError.js b/node_modules/lodash/isError.js new file mode 100644 index 000000000..b4f41e000 --- /dev/null +++ b/node_modules/lodash/isError.js @@ -0,0 +1,36 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** `Object#toString` result references. */ +var domExcTag = '[object DOMException]', + errorTag = '[object Error]'; + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +} + +module.exports = isError; diff --git a/node_modules/archiver-utils/node_modules/lodash/isFinite.js b/node_modules/lodash/isFinite.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isFinite.js rename to node_modules/lodash/isFinite.js diff --git a/node_modules/lodash/isFunction.js b/node_modules/lodash/isFunction.js new file mode 100644 index 000000000..907a8cd8b --- /dev/null +++ b/node_modules/lodash/isFunction.js @@ -0,0 +1,37 @@ +var baseGetTag = require('./_baseGetTag'), + isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; diff --git a/node_modules/archiver-utils/node_modules/lodash/isInteger.js b/node_modules/lodash/isInteger.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isInteger.js rename to node_modules/lodash/isInteger.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isLength.js b/node_modules/lodash/isLength.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isLength.js rename to node_modules/lodash/isLength.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isMap.js b/node_modules/lodash/isMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isMap.js rename to node_modules/lodash/isMap.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isMatch.js b/node_modules/lodash/isMatch.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isMatch.js rename to node_modules/lodash/isMatch.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isMatchWith.js b/node_modules/lodash/isMatchWith.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isMatchWith.js rename to node_modules/lodash/isMatchWith.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isNaN.js b/node_modules/lodash/isNaN.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isNaN.js rename to node_modules/lodash/isNaN.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isNative.js b/node_modules/lodash/isNative.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isNative.js rename to node_modules/lodash/isNative.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isNil.js b/node_modules/lodash/isNil.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isNil.js rename to node_modules/lodash/isNil.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isNull.js b/node_modules/lodash/isNull.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isNull.js rename to node_modules/lodash/isNull.js diff --git a/node_modules/lodash/isNumber.js b/node_modules/lodash/isNumber.js new file mode 100644 index 000000000..cd34ee464 --- /dev/null +++ b/node_modules/lodash/isNumber.js @@ -0,0 +1,38 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ +function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); +} + +module.exports = isNumber; diff --git a/node_modules/archiver-utils/node_modules/lodash/isObject.js b/node_modules/lodash/isObject.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isObject.js rename to node_modules/lodash/isObject.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isObjectLike.js b/node_modules/lodash/isObjectLike.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isObjectLike.js rename to node_modules/lodash/isObjectLike.js diff --git a/node_modules/lodash/isPlainObject.js b/node_modules/lodash/isPlainObject.js new file mode 100644 index 000000000..238737313 --- /dev/null +++ b/node_modules/lodash/isPlainObject.js @@ -0,0 +1,62 @@ +var baseGetTag = require('./_baseGetTag'), + getPrototype = require('./_getPrototype'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +module.exports = isPlainObject; diff --git a/node_modules/archiver-utils/node_modules/lodash/isRegExp.js b/node_modules/lodash/isRegExp.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isRegExp.js rename to node_modules/lodash/isRegExp.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isSafeInteger.js b/node_modules/lodash/isSafeInteger.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isSafeInteger.js rename to node_modules/lodash/isSafeInteger.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isSet.js b/node_modules/lodash/isSet.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isSet.js rename to node_modules/lodash/isSet.js diff --git a/node_modules/lodash/isString.js b/node_modules/lodash/isString.js new file mode 100644 index 000000000..627eb9c38 --- /dev/null +++ b/node_modules/lodash/isString.js @@ -0,0 +1,30 @@ +var baseGetTag = require('./_baseGetTag'), + isArray = require('./isArray'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +module.exports = isString; diff --git a/node_modules/lodash/isSymbol.js b/node_modules/lodash/isSymbol.js new file mode 100644 index 000000000..dfb60b97f --- /dev/null +++ b/node_modules/lodash/isSymbol.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; diff --git a/node_modules/archiver-utils/node_modules/lodash/isTypedArray.js b/node_modules/lodash/isTypedArray.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isTypedArray.js rename to node_modules/lodash/isTypedArray.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isUndefined.js b/node_modules/lodash/isUndefined.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isUndefined.js rename to node_modules/lodash/isUndefined.js diff --git a/node_modules/archiver-utils/node_modules/lodash/isWeakMap.js b/node_modules/lodash/isWeakMap.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/isWeakMap.js rename to node_modules/lodash/isWeakMap.js diff --git a/node_modules/lodash/isWeakSet.js b/node_modules/lodash/isWeakSet.js new file mode 100644 index 000000000..e628b261c --- /dev/null +++ b/node_modules/lodash/isWeakSet.js @@ -0,0 +1,28 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakSetTag = '[object WeakSet]'; + +/** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ +function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; +} + +module.exports = isWeakSet; diff --git a/node_modules/archiver-utils/node_modules/lodash/iteratee.js b/node_modules/lodash/iteratee.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/iteratee.js rename to node_modules/lodash/iteratee.js diff --git a/node_modules/lodash/join.js b/node_modules/lodash/join.js new file mode 100644 index 000000000..45de079ff --- /dev/null +++ b/node_modules/lodash/join.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeJoin = arrayProto.join; + +/** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ +function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); +} + +module.exports = join; diff --git a/node_modules/archiver-utils/node_modules/lodash/kebabCase.js b/node_modules/lodash/kebabCase.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/kebabCase.js rename to node_modules/lodash/kebabCase.js diff --git a/node_modules/lodash/keyBy.js b/node_modules/lodash/keyBy.js new file mode 100644 index 000000000..acc007a0a --- /dev/null +++ b/node_modules/lodash/keyBy.js @@ -0,0 +1,36 @@ +var baseAssignValue = require('./_baseAssignValue'), + createAggregator = require('./_createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ +var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); +}); + +module.exports = keyBy; diff --git a/node_modules/archiver-utils/node_modules/lodash/keys.js b/node_modules/lodash/keys.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/keys.js rename to node_modules/lodash/keys.js diff --git a/node_modules/archiver-utils/node_modules/lodash/keysIn.js b/node_modules/lodash/keysIn.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/keysIn.js rename to node_modules/lodash/keysIn.js diff --git a/node_modules/archiver-utils/node_modules/lodash/lang.js b/node_modules/lodash/lang.js similarity index 100% rename from node_modules/archiver-utils/node_modules/lodash/lang.js rename to node_modules/lodash/lang.js diff --git a/node_modules/lodash/last.js b/node_modules/lodash/last.js new file mode 100644 index 000000000..cad1eafaf --- /dev/null +++ b/node_modules/lodash/last.js @@ -0,0 +1,20 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/node_modules/lodash/lastIndexOf.js b/node_modules/lodash/lastIndexOf.js new file mode 100644 index 000000000..dabfb613a --- /dev/null +++ b/node_modules/lodash/lastIndexOf.js @@ -0,0 +1,46 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIsNaN = require('./_baseIsNaN'), + strictLastIndexOf = require('./_strictLastIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); +} + +module.exports = lastIndexOf; diff --git a/node_modules/lodash/lodash.js b/node_modules/lodash/lodash.js new file mode 100644 index 000000000..72f744fba --- /dev/null +++ b/node_modules/lodash/lodash.js @@ -0,0 +1,17018 @@ +/** + * @license + * lodash + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.16.6'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://github.com/es-shims.', + FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for function metadata. */ + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256, + FLIP_FLAG = 512; + + /** Used to compose bitmasks for comparison styles. */ + var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', ARY_FLAG], + ['bind', BIND_FLAG], + ['bindKey', BIND_KEY_FLAG], + ['curry', CURRY_FLAG], + ['curryRight', CURRY_RIGHT_FLAG], + ['flip', FLIP_FLAG], + ['partial', PARTIAL_FLAG], + ['partialRight', PARTIAL_RIGHT_FLAG], + ['rearg', REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var 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]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', + rsComboSymbolsRange = '\\u20d0-\\u20f0', + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)', + rsOrdUpper = '\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var 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' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + 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] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + 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] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + return freeProcess && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * Adds the key-value `pair` to `map`. + * + * @private + * @param {Object} map The map to modify. + * @param {Array} pair The key-value pair to add. + * @returns {Object} Returns `map`. + */ + function addMapEntry(map, pair) { + // Don't return `map.set` because it's not chainable in IE 11. + map.set(pair[0], pair[1]); + return map; + } + + /** + * Adds `value` to `set`. + * + * @private + * @param {Object} set The set to modify. + * @param {*} value The value to add. + * @returns {Object} Returns `set`. + */ + function addSetEntry(set, value) { + // Don't return `set.add` because it's not chainable in IE 11. + set.add(value); + return set; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + 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); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array of at least `200` elements + * and any iteratees accept only one argument. The heuristic for whether a + * section qualifies for shortcut fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + 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); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB). Change the following template settings to use + * alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + 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__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(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 || arrLength < LARGE_ARRAY_SIZE || + (arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(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; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + 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) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function assignInDefaults(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths of elements to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {boolean} [isFull] Specify a clone including symbols. + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, isFull, customizer, key, object, stack) { + var result; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + return copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, baseClone, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + value = Object(value); + return (symToStringTag && symToStringTag in value) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (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: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + if (!isKey(path, object)) { + path = castPath(path); + object = parent(object, path); + path = last(path); + } + var func = object == null ? object : object[toKey(path)]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + 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; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(object[key], srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = object[key], + srcValue = source[key], + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return basePickBy(object, props, function(value, key) { + return key in object; + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick from. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, props, predicate) { + var index = -1, + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index], + value = object[key]; + + if (predicate(value, key)) { + baseAssignValue(result, key, value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } + else if (!isKey(index, array)) { + var path = castPath(index), + object = parent(array, path); + + if (object != null) { + delete object[toKey(last(path))]; + } + } + else { + delete array[toKey(index)]; + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = isKey(path, object) ? [path] : castPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + object = parent(object, path); + + var key = toKey(last(path)); + return !(object != null && hasOwnProperty.call(object, key)) || delete object[key]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((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)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value) { + return isArray(value) ? value : stringToPath(value); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `map`. + * + * @private + * @param {Object} map The map to clone. + * @param {Function} cloneFunc The function to clone values. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned map. + */ + function cloneMap(map, isDeep, cloneFunc) { + var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); + return arrayReduce(array, addMapEntry, new map.constructor); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of `set`. + * + * @private + * @param {Object} set The set to clone. + * @param {Function} cloneFunc The function to clone values. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned set. + */ + function cloneSet(set, isDeep, cloneFunc) { + var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); + return arrayReduce(array, addSetEntry, new set.constructor); + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + 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; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbol properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + 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); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + 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; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + 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); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(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; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && + isArray(value) && value.length >= LARGE_ARRAY_SIZE) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), + isFlip = bitmask & FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (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; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = 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); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!(bitmask & CURRY_BOUND_FLAG)) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = nativeMin(toInteger(precision), 292); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] == null + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { + bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++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 (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, customizer, bitmask, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= UNORDERED_COMPARE_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbol properties of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; + + /** + * Creates an array of the own and inherited enumerable symbol properties + * of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((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; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++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); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {Function} cloneFunc The function to clone values. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, cloneFunc, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + 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 cloneMap(object, isDeep, cloneFunc); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return cloneSet(object, isDeep, cloneFunc); + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG); + + var isCombo = + ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || + ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + 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]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function mergeDefaults(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, mergeDefaults, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false}, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths of elements to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + isProp = isKey(path), + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined); + result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = BIND_FLAG | BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + result = wait - timeSinceLastCall; + + return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + 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); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + 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); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

    ' + func(text) + '

    '; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

    fred, barney, & pebbles

    ' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, false, true); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, false, true, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, true, true); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, true, true, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + 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 false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are **not** supported. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths of elements to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(args) { + args.push(undefined, assignInDefaults); + return apply(assignInWith, undefined, args); + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined, mergeDefaults); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable string keyed properties of `object` that are + * not omitted. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property identifiers to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, props) { + if (object == null) { + return {}; + } + props = arrayMap(props, toKey); + return basePick(object, baseDifference(getAllKeysIn(object), props)); + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property identifiers to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, props) { + return object == null ? {} : basePick(object, arrayMap(props, toKey)); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + return object == null ? {} : basePickBy(object, getAllKeysIn(object), getIteratee(predicate)); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + object = undefined; + length = 1; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (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); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = 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) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = baseClamp(toInteger(position), 0, string.length); + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + diff --git a/node_modules/sax/README.md b/node_modules/sax/README.md new file mode 100644 index 000000000..c9652420c --- /dev/null +++ b/node_modules/sax/README.md @@ -0,0 +1,216 @@ +# sax js + +A sax-style parser for XML and HTML. + +Designed with [node](http://nodejs.org/) in mind, but should work fine in +the browser or other CommonJS implementations. + +## What This Is + +* A very simple tool to parse through an XML string. +* A stepping stone to a streaming HTML parser. +* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML + docs. + +## What This Is (probably) Not + +* An HTML Parser - That's a fine goal, but this isn't it. It's just + XML. +* A DOM Builder - You can use it to build an object model out of XML, + but it doesn't do that out of the box. +* XSLT - No DOM = no querying. +* 100% Compliant with (some other SAX implementation) - Most SAX + implementations are in Java and do a lot more than this does. +* An XML Validator - It does a little validation when in strict mode, but + not much. +* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic + masochism. +* A DTD-aware Thing - Fetching DTDs is a much bigger job. + +## Regarding `Hello, world!').close(); + + // stream usage + // takes the same options as the parser + var saxStream = require("sax").createStream(strict, options) + saxStream.on("error", function (e) { + // unhandled errors will throw, since this is a proper node + // event emitter. + console.error("error!", e) + // clear the error + this._parser.error = null + this._parser.resume() + }) + saxStream.on("opentag", function (node) { + // same object as above + }) + // pipe is supported, and it's readable/writable + // same chunks coming in also go out. + fs.createReadStream("file.xml") + .pipe(saxStream) + .pipe(fs.createWriteStream("file-copy.xml")) + + + +## Arguments + +Pass the following arguments to the parser function. All are optional. + +`strict` - Boolean. Whether or not to be a jerk. Default: `false`. + +`opt` - Object bag of settings regarding string formatting. All default to `false`. + +Settings supported: + +* `trim` - Boolean. Whether or not to trim text and comment nodes. +* `normalize` - Boolean. If true, then turn any whitespace into a single + space. +* `lowercase` - Boolean. If true, then lowercase tag names and attribute names + in loose mode, rather than uppercasing them. +* `xmlns` - Boolean. If true, then namespaces are supported. +* `position` - Boolean. If false, then don't track line/col/position. + +## Methods + +`write` - Write bytes onto the stream. You don't have to do this all at +once. You can keep writing as much as you want. + +`close` - Close the stream. Once closed, no more data may be written until +it is done processing the buffer, which is signaled by the `end` event. + +`resume` - To gracefully handle errors, assign a listener to the `error` +event. Then, when the error is taken care of, you can call `resume` to +continue parsing. Otherwise, the parser will not continue while in an error +state. + +## Members + +At all times, the parser object will have the following members: + +`line`, `column`, `position` - Indications of the position in the XML +document where the parser currently is looking. + +`startTagPosition` - Indicates the position where the current tag starts. + +`closed` - Boolean indicating whether or not the parser can be written to. +If it's `true`, then wait for the `ready` event to write again. + +`strict` - Boolean indicating whether or not the parser is a jerk. + +`opt` - Any options passed into the constructor. + +`tag` - The current tag being dealt with. + +And a bunch of other stuff that you probably shouldn't touch. + +## Events + +All events emit with a single argument. To listen to an event, assign a +function to `on`. Functions get executed in the this-context of +the parser object. The list of supported events are also in the exported +`EVENTS` array. + +When using the stream interface, assign handlers using the EventEmitter +`on` function in the normal fashion. + +`error` - Indication that something bad happened. The error will be hanging +out on `parser.error`, and must be deleted before parsing can continue. By +listening to this event, you can keep an eye on that kind of stuff. Note: +this happens *much* more in strict mode. Argument: instance of `Error`. + +`text` - Text node. Argument: string of text. + +`doctype` - The ``. Argument: +object with `name` and `body` members. Attributes are not parsed, as +processing instructions have implementation dependent semantics. + +`sgmldeclaration` - Random SGML declarations. Stuff like `` +would trigger this kind of event. This is a weird thing to support, so it +might go away at some point. SAX isn't intended to be used to parse SGML, +after all. + +`opentag` - An opening tag. Argument: object with `name` and `attributes`. +In non-strict mode, tag names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, then it will contain +namespace binding information on the `ns` member, and will have a +`local`, `prefix`, and `uri` member. + +`closetag` - A closing tag. In loose mode, tags are auto-closed if their +parent closes. In strict mode, well-formedness is enforced. Note that +self-closing tags will have `closeTag` emitted immediately after `openTag`. +Argument: tag name. + +`attribute` - An attribute node. Argument: object with `name` and `value`. +In non-strict mode, attribute names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, it will also contains namespace +information. + +`comment` - A comment node. Argument: the string of the comment. + +`opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` +event, and their contents are not checked for special xml characters. +If you pass `noscript: true`, then this behavior is suppressed. + +## Reporting Problems + +It's best to write a failing test if you find an issue. I will always +accept pull requests with failing tests if they demonstrate intended +behavior, but it is very hard to figure out what issue you're describing +without a test. Writing a test is also the best way for you yourself +to figure out if you really understand the issue you think you have with +sax-js. diff --git a/node_modules/sax/examples/big-not-pretty.xml b/node_modules/sax/examples/big-not-pretty.xml new file mode 100644 index 000000000..fb5265dde --- /dev/null +++ b/node_modules/sax/examples/big-not-pretty.xml @@ -0,0 +1,8002 @@ + + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + + something blerm a bit down here + diff --git a/node_modules/sax/examples/example.js b/node_modules/sax/examples/example.js new file mode 100644 index 000000000..7b0246e9a --- /dev/null +++ b/node_modules/sax/examples/example.js @@ -0,0 +1,29 @@ + +var fs = require("fs"), + util = require("util"), + path = require("path"), + xml = fs.readFileSync(path.join(__dirname, "test.xml"), "utf8"), + sax = require("../lib/sax"), + strict = sax.parser(true), + loose = sax.parser(false, {trim:true}), + inspector = function (ev) { return function (data) { + console.error("%s %s %j", this.line+":"+this.column, ev, data); + }}; + +sax.EVENTS.forEach(function (ev) { + loose["on"+ev] = inspector(ev); +}); +loose.onend = function () { + console.error("end"); + console.error(loose); +}; + +// do this in random bits at a time to verify that it works. +(function () { + if (xml) { + var c = Math.ceil(Math.random() * 1000) + loose.write(xml.substr(0,c)); + xml = xml.substr(c); + process.nextTick(arguments.callee); + } else loose.close(); +})(); diff --git a/node_modules/sax/examples/get-products.js b/node_modules/sax/examples/get-products.js new file mode 100644 index 000000000..9e8d74aac --- /dev/null +++ b/node_modules/sax/examples/get-products.js @@ -0,0 +1,58 @@ +// pull out /GeneralSearchResponse/categories/category/items/product tags +// the rest we don't care about. + +var sax = require("../lib/sax.js") +var fs = require("fs") +var path = require("path") +var xmlFile = path.resolve(__dirname, "shopping.xml") +var util = require("util") +var http = require("http") + +fs.readFile(xmlFile, function (er, d) { + http.createServer(function (req, res) { + if (er) throw er + var xmlstr = d.toString("utf8") + + var parser = sax.parser(true) + var products = [] + var product = null + var currentTag = null + + parser.onclosetag = function (tagName) { + if (tagName === "product") { + products.push(product) + currentTag = product = null + return + } + if (currentTag && currentTag.parent) { + var p = currentTag.parent + delete currentTag.parent + currentTag = p + } + } + + parser.onopentag = function (tag) { + if (tag.name !== "product" && !product) return + if (tag.name === "product") { + product = tag + } + tag.parent = currentTag + tag.children = [] + tag.parent && tag.parent.children.push(tag) + currentTag = tag + } + + parser.ontext = function (text) { + if (currentTag) currentTag.children.push(text) + } + + parser.onend = function () { + var out = util.inspect(products, false, 3, true) + res.writeHead(200, {"content-type":"application/json"}) + res.end("{\"ok\":true}") + // res.end(JSON.stringify(products)) + } + + parser.write(xmlstr).end() + }).listen(1337) +}) diff --git a/node_modules/sax/examples/hello-world.js b/node_modules/sax/examples/hello-world.js new file mode 100644 index 000000000..cbfa5184e --- /dev/null +++ b/node_modules/sax/examples/hello-world.js @@ -0,0 +1,4 @@ +require("http").createServer(function (req, res) { + res.writeHead(200, {"content-type":"application/json"}) + res.end(JSON.stringify({ok: true})) +}).listen(1337) diff --git a/node_modules/sax/examples/not-pretty.xml b/node_modules/sax/examples/not-pretty.xml new file mode 100644 index 000000000..9592852d0 --- /dev/null +++ b/node_modules/sax/examples/not-pretty.xml @@ -0,0 +1,8 @@ + + something blerm a bit down here diff --git a/node_modules/sax/examples/pretty-print.js b/node_modules/sax/examples/pretty-print.js new file mode 100644 index 000000000..cd6aca9e1 --- /dev/null +++ b/node_modules/sax/examples/pretty-print.js @@ -0,0 +1,74 @@ +var sax = require("../lib/sax") + , printer = sax.createStream(false, {lowercasetags:true, trim:true}) + , fs = require("fs") + +function entity (str) { + return str.replace('"', '"') +} + +printer.tabstop = 2 +printer.level = 0 +printer.indent = function () { + print("\n") + for (var i = this.level; i > 0; i --) { + for (var j = this.tabstop; j > 0; j --) { + print(" ") + } + } +} +printer.on("opentag", function (tag) { + this.indent() + this.level ++ + print("<"+tag.name) + for (var i in tag.attributes) { + print(" "+i+"=\""+entity(tag.attributes[i])+"\"") + } + print(">") +}) + +printer.on("text", ontext) +printer.on("doctype", ontext) +function ontext (text) { + this.indent() + print(text) +} + +printer.on("closetag", function (tag) { + this.level -- + this.indent() + print("") +}) + +printer.on("cdata", function (data) { + this.indent() + print("") +}) + +printer.on("comment", function (comment) { + this.indent() + print("") +}) + +printer.on("error", function (error) { + console.error(error) + throw error +}) + +if (!process.argv[2]) { + throw new Error("Please provide an xml file to prettify\n"+ + "TODO: read from stdin or take a file") +} +var xmlfile = require("path").join(process.cwd(), process.argv[2]) +var fstr = fs.createReadStream(xmlfile, { encoding: "utf8" }) + +function print (c) { + if (!process.stdout.write(c)) { + fstr.pause() + } +} + +process.stdout.on("drain", function () { + fstr.resume() +}) + +fstr.pipe(printer) diff --git a/node_modules/sax/examples/shopping.xml b/node_modules/sax/examples/shopping.xml new file mode 100644 index 000000000..223c6c665 --- /dev/null +++ b/node_modules/sax/examples/shopping.xml @@ -0,0 +1,2 @@ + +sandbox3.1 r31.Kadu4DC.phase357782011.10.06 15:37:23 PSTp2.a121bc2aaf029435dce62011-10-21T18:38:45.982-04:00P0Y0M0DT0H0M0.169S1112You are currently using the SDC API sandbox environment! No clicks to merchant URLs from this response will be paid. Please change the host of your API requests to 'publisher.api.shopping.com' when you have finished development and testinghttp://statTest.dealtime.com/pixel/noscript?PV_EvnTyp=APPV&APPV_APITSP=10%2F21%2F11_06%3A38%3A45_PM&APPV_DSPRQSID=p2.a121bc2aaf029435dce6&APPV_IMGURL=http://img.shopping.com/sc/glb/sdc_logo_106x19.gif&APPV_LI_LNKINID=7000610&APPV_LI_SBMKYW=nikon&APPV_MTCTYP=1000&APPV_PRTID=2002&APPV_BrnID=14804http://www.shopping.com/digital-cameras/productsDigital CamerasDigital CamerasElectronicshttp://www.shopping.com/xCH-electronics-nikon~linkin_id-7000610?oq=nikonCameras and Photographyhttp://www.shopping.com/xCH-cameras_and_photography-nikon~linkin_id-7000610?oq=nikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610nikonnikonDigital Camerashttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610Nikon D3100 Digital Camera14.2 Megapixel, SLR Camera, 3 in. LCD Screen, With High Definition Video, Weight: 1 lb.The Nikon D3100 digital SLR camera speaks to the growing ranks of enthusiastic D-SLR users and aspiring photographers by providing an easy-to-use and affordable entrance to the world of Nikon D-SLR’s. The 14.2-megapixel D3100 has powerful features, such as the enhanced Guide Mode that makes it easy to unleash creative potential and capture memories with still images and full HD video. Like having a personal photo tutor at your fingertips, this unique feature provides a simple graphical interface on the camera’s LCD that guides users by suggesting and/or adjusting camera settings to achieve the desired end result images. The D3100 is also the world’s first D-SLR to introduce full time auto focus (AF) in Live View and D-Movie mode to effortlessly achieve the critical focus needed when shooting Full HD 1080p video.http://di1.shopping.com/images/pi/93/bc/04/101677489-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=1http://di1.shopping.com/images/pi/93/bc/04/101677489-606x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=194.56http://img.shopping.com/sc/pr/sdc_stars_sm_4.5.gifhttp://www.shopping.com/Nikon-D3100/reviews~linkin_id-7000610429.001360.00http://www.shopping.com/Nikon-D3100/prices~linkin_id-7000610http://www.shopping.com/Nikon-D3100/info~linkin_id-7000610Nikon D3100 Digital SLR Camera with 18-55mm NIKKOR VR LensThe Nikon D3100 Digital SLR Camera is an affordable compact and lightweight photographic power-house. It features the all-purpose 18-55mm VR lens a high-resolution 14.2 MP CMOS sensor along with a feature set that's comprehensive yet easy to navigate - the intuitive onboard learn-as-you grow guide mode allows the photographer to understand what the 3100 can do quickly and easily. Capture beautiful pictures and amazing Full HD 1080p movies with sound and full-time autofocus. Availabilty: In Stock!7185Nikonhttp://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di102.shopping.com/images/di/2d/5a/57/36424d5a717a366662532d61554c7767615f67-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFree Shipping with Any Purchase!529.000.00799.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=-ZW6BMZqz6fbS-aULwga_g%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F343.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+Digital+SLR+Camera+with+18-55mm+NIKKOR+VR+Lens&dlprc=529.0&crn=&istrsmrc=1&isathrsl=0&AR=1&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=1&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF343C5Nikon Nikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR, CamerasNikon D3100 14.2MP Digital SLR Camera with 18-55mm f/3.5-5.6 AF-S DX VR7185Nikonhttp://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/6d/64/31/65396c443876644f7534464851664a714b6e67-385x352-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock549.000.00549.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=779&BEFID=7185&aon=%5E1&MerchantID=305814&crawler_id=305814&dealId=md1e9lD8vdOu4FHQfJqKng%3D%3D&url=http%3A%2F%2Fwww.electronics-expo.com%2Findex.php%3Fpage%3Ditem%26id%3DNIKD3100%26source%3DSideCar%26scpid%3D8%26scid%3Dscsho318727%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Nikon+D3100+14.2MP+Digital+SLR+Camera+with+18-55mm+f%2F3.5-5.6+AF-S+DX+VR%2C+Cameras&dlprc=549.0&crn=&istrsmrc=1&isathrsl=0&AR=9&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=9&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=771&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Electronics Expohttp://img.shopping.com/cctool/merch_logos/305814.gif1-888-707-EXPO3713.90http://img.shopping.com/sc/mr/sdc_checks_4.gifhttp://www.shopping.com/xMR-store_electronics_expo~MRD-305814~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSNIKD3100Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, BlackSplit-second shutter response captures shots other cameras may have missed Helps eliminate the frustration of shutter delay! 14.2-megapixels for enlargements worth framing and hanging. Takes breathtaking 1080p HD movies. ISO sensitivity from 100-1600 for bright or dimly lit settings. 3.0in. color LCD for beautiful, wide-angle framing and viewing. In-camera image editing lets you retouch with no PC. Automatic scene modes include Child, Sports, Night Portrait and more. Accepts SDHC memory cards. Nikon D3100 14.2-Megapixel Digital SLR Camera With 18-55mm Zoom-Nikkor Lens, Black is one of many Digital SLR Cameras available through Office Depot. Made by Nikon.7185Nikonhttp://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/79/59/75/61586e4446744359377244556a6b5932616177-250x250-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock549.990.00699.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=698&BEFID=7185&aon=%5E1&MerchantID=467671&crawler_id=467671&dealId=yYuaXnDFtCY7rDUjkY2aaw%3D%3D&url=http%3A%2F%2Flink.mercent.com%2Fredirect.ashx%3Fmr%3AmerchantID%3DOfficeDepot%26mr%3AtrackingCode%3DCEC9669E-6ABC-E011-9F24-0019B9C043EB%26mr%3AtargetUrl%3Dhttp%3A%2F%2Fwww.officedepot.com%2Fa%2Fproducts%2F486292%2FNikon-D3100-142-Megapixel-Digital-SLR%2F%253fcm_mmc%253dMercent-_-Shopping-_-Cameras_and_Camcorders-_-486292&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+14.2-Megapixel+Digital+SLR+Camera+With+18-55mm+Zoom-Nikkor+Lens%2C+Black&dlprc=549.99&crn=&istrsmrc=1&isathrsl=0&AR=10&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=10&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=690&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Office Depothttp://img.shopping.com/cctool/merch_logos/467671.gif1-800-GO-DEPOT1352.37http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_office_depot_4158555~MRD-467671~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS486292Nikon® D3100™ 14.2MP Digital SLR with 18-55mm LensThe Nikon D3100 DSLR will surprise you with its simplicity and impress you with superb results.7185Nikonhttp://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di103.shopping.com/images/di/52/6c/35/36553743756954597348344d475a30326c7851-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock549.996.05549.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=Rl56U7CuiTYsH4MGZ02lxQ%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D903483107%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D3100%E2%84%A2+14.2MP+Digital+SLR+with+18-55mm+Lens&dlprc=549.99&crn=&istrsmrc=0&isathrsl=0&AR=11&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=11&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS9614867Nikon D3100 SLR w/Nikon 18-55mm VR & 55-200mm VR Lenses14.2 Megapixels3" LCDLive ViewHD 1080p Video w/ Sound & Autofocus11-point Autofocus3 Frames per Second ShootingISO 100 to 3200 (Expand to 12800-Hi2)Self Cleaning SensorEXPEED 2, Image Processing EngineScene Recognition System7185Nikonhttp://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di105.shopping.com/images/di/68/75/53/36785a4b444b614b4d544d5037316549364441-345x345-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stock695.000.00695.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=huS6xZKDKaKMTMP71eI6DA%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D32983%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D3100+SLR+w%2FNikon+18-55mm+VR+%26+55-200mm+VR+Lenses&dlprc=695.0&crn=&istrsmrc=0&isathrsl=0&AR=15&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=101677489&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=15&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS32983Nikon COOLPIX S203 Digital Camera10 Megapixel, Ultra-Compact Camera, 2.5 in. LCD Screen, 3x Optical Zoom, With Video Capability, Weight: 0.23 lb.With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.http://di1.shopping.com/images/pi/c4/ef/1b/95397883-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=2http://di1.shopping.com/images/pi/c4/ef/1b/95397883-500x499-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=20139.00139.00http://www.shopping.com/Nikon-Coolpix-S203/prices~linkin_id-7000610http://www.shopping.com/Nikon-Coolpix-S203/info~linkin_id-7000610Nikon Coolpix S203 Digital Camera (Red)With 10.34 mega pixel, electronic VR vibration reduction, 5-level brightness adjustment, 3x optical zoom, and TFT LCD, Nikon Coolpix s203 fulfills all the demands of any photographer. The digital camera has an inbuilt memory of 44MB and an external memory slot made for all kinds of SD (Secure Digital) cards.7185Nikonhttp://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di108.shopping.com/images/di/73/42/64/324a6e4945504d2d415f6c42414d31525a6751-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockFantastic prices with ease & comfort of Amazon.com!139.009.50139.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=sBd2JnIEPM-A_lBAM1RZgQ%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB002T964IM%2Fref%3Dasc_df_B002T964IM1751618%3Fsmid%3DA22UHVNXG98FAT%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB002T964IM&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S203+Digital+Camera+%28Red%29&dlprc=139.0&crn=&istrsmrc=0&isathrsl=0&AR=63&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=95397883&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=63&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=518&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB002T964IMNikon S3100 Digital Camera14.5 Megapixel, Compact Camera, 2.7 in. LCD Screen, 5x Optical Zoom, With High Definition Video, Weight: 0.23 lb.This digital camera features a wide-angle optical Zoom-NIKKOR glass lens that allows you to capture anything from landscapes to portraits to action shots. The high-definition movie mode with one-touch recording makes it easy to capture video clips.http://di1.shopping.com/images/pi/66/2d/33/106834268-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=3http://di1.shopping.com/images/pi/66/2d/33/106834268-507x387-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=312.00http://img.shopping.com/sc/pr/sdc_stars_sm_2.gifhttp://www.shopping.com/nikon-s3100/reviews~linkin_id-700061099.95134.95http://www.shopping.com/nikon-s3100/prices~linkin_id-7000610http://www.shopping.com/nikon-s3100/info~linkin_id-7000610CoolPix S3100 14 Megapixel Compact Digital Camera- RedNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - red7185Nikonhttp://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/55/55/79/476f71563872302d78726b6e2d726e474e6267-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=UUyGoqV8r0-xrkn-rnGNbg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJ3Yx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmDAJeU1oyGG0GcBdhGwUGCAVqYF9SO0xSN1sZdmA7dmMdBQAJB24qX1NbQxI6AjA2ME5dVFULPDsGPFcQTTdaLTA6SR0OFlQvPAwMDxYcYlxIVkcoLTcCDA%3D%3D%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=CoolPix+S3100+14+Megapixel+Compact+Digital+Camera-+Red&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=28&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=28&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337013000COOLPIX S3100 PinkNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - pink7185Nikonhttp://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di111.shopping.com/images/di/58/38/37/4177586c573164586f4d586b34515144546f51-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=X87AwXlW1dXoMXk4QQDToQ%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJxYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGsPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Pink&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=31&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=31&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337015000Nikon Coolpix S3100 14.0 MP Digital Camera - SilverNikon Coolpix S3100 14.0 MP Digital Camera - Silver7185Nikonhttp://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di109.shopping.com/images/di/6e/76/46/776e70664134726c413144626b736473613077-270x270-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock109.970.00109.97http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=803&BEFID=7185&aon=%5E&MerchantID=475774&crawler_id=475774&dealId=nvFwnpfA4rlA1Dbksdsa0w%3D%3D&url=http%3A%2F%2Fwww.thewiz.com%2Fcatalog%2Fproduct.jsp%3FmodelNo%3DS3100SILVER%26gdftrk%3DgdfV2677_a_7c996_a_7c4049_a_7c26262&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+Coolpix+S3100+14.0+MP+Digital+Camera+-+Silver&dlprc=109.97&crn=&istrsmrc=0&isathrsl=0&AR=33&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=33&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=797&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=TheWiz.comhttp://img.shopping.com/cctool/merch_logos/475774.gif877-542-69880http://img.shopping.com/sc/glb/flag/US.gifUS26262Nikon� COOLPIX� S3100 14MP Digital Camera (Silver)The Nikon COOLPIX S3100 is the easy way to share your life and stay connected.7185Nikonhttp://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di102.shopping.com/images/di/35/47/74/614e324e6572794b7770732d5365326c2d3467-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock119.996.05119.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=5GtaN2NeryKwps-Se2l-4g%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D848064082%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C3%AF%C2%BF%C2%BD+COOLPIX%C3%AF%C2%BF%C2%BD+S3100+14MP+Digital+Camera+%28Silver%29&dlprc=119.99&crn=&istrsmrc=0&isathrsl=0&AR=37&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=37&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=509&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10101095COOLPIX S3100 YellowNikon Coolpix S3100 - Digital camera - compact - 14.0 Mpix - optical zoom: 5 x - supported memory: SD, SDXC, SDHC - yellow7185Nikonhttp://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di107.shopping.com/images/di/61/34/33/6d305258756c5833387a436e516a5535396a77-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockGet 30 days FREE SHIPPING w/ ShipVantage119.956.95139.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=a43m0RXulX38zCnQjU59jw%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBJpFHJwYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcUFxDEGoPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=COOLPIX+S3100+Yellow&dlprc=119.95&crn=&istrsmrc=1&isathrsl=0&AR=38&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=106834268&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=38&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=0&code=&acode=583&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00337014000Nikon D90 Digital Camera12.3 Megapixel, Point and Shoot Camera, 3 in. LCD Screen, With Video Capability, Weight: 1.36 lb.Untitled Document Nikon D90 SLR Digital Camera With 28-80mm 75-300mm Lens Kit The Nikon D90 SLR Digital Camera, with its 12.3-megapixel DX-format CMOS, 3" High resolution LCD display, Scene Recognition System, Picture Control, Active D-Lighting, and one-button Live View, provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera.http://di1.shopping.com/images/pi/52/fb/d3/99671132-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=4http://di1.shopping.com/images/pi/52/fb/d3/99671132-499x255-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=475.00http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-270mm-Lens/reviews~linkin_id-7000610689.002299.00http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-270mm-Lens/info~linkin_id-7000610Nikon® D90 12.3MP Digital SLR Camera (Body Only)The Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di106.shopping.com/images/di/47/55/35/4a4a6b70554178653548756a4237666b774141-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock1015.996.051015.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=GU5JJkpUAxe5HujB7fkwAA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D851830266%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=1015.99&crn=&istrsmrc=0&isathrsl=0&AR=14&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=14&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS10148659Nikon D90 SLR Digital Camera (Camera Body)The Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CCD 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View provides photo enthusiasts with the image quality and performance they need to pursue their own vision while still being intuitive enough for use as an everyday camera. In addition the D90 introduces the D-Movie mode allowing for the first time an interchangeable lens SLR camera that is capable of recording 720p HD movie clips. Availabilty: In Stock7185Nikonhttp://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di109.shopping.com/images/di/58/68/55/527553432d73704262544944666f3471667a51-350x350-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stockFree Shipping with Any Purchase!689.000.00900.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=647&BEFID=7185&aon=%5E1&MerchantID=475674&crawler_id=475674&dealId=XhURuSC-spBbTIDfo4qfzQ%3D%3D&url=http%3A%2F%2Fwww.fumfie.com%2Fproduct%2F169.5%2Fshopping-com%3F&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+Digital+Camera+%28Camera+Body%29&dlprc=689.0&crn=&istrsmrc=1&isathrsl=0&AR=16&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=16&cid=&semid1=&semid2=&IsLps=0&CC=1&SL=1&FS=1&code=&acode=658&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=FumFiehttp://img.shopping.com/cctool/merch_logos/475674.gif866 666 91985604.27http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_fumfie~MRD-475674~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSF169C5Nikon D90 SLR w/Nikon 18-105mm VR & 55-200mm VR Lenses12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di101.shopping.com/images/di/6f/30/50/785f584c5744627278415952793372436d7951-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stock1189.000.001189.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=o0Px_XLWDbrxAYRy3rCmyQ%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30619%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+%26+55-200mm+VR+Lenses&dlprc=1189.0&crn=&istrsmrc=0&isathrsl=0&AR=20&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=20&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS30619Nikon D90 12.3 Megapixel Digital SLR Camera (Body Only)Fusing 12.3 megapixel image quality and a cinematic 24fps D-Movie Mode, the Nikon D90 exceeds the demands of passionate photographers. Coupled with Nikon's EXPEED image processing technologies and NIKKOR optics, breathtaking image fidelity is assured. Combined with fast 0.15ms power-up and split-second 65ms shooting lag, dramatic action and decisive moments are captured easily. Effective 4-frequency, ultrasonic sensor cleaning frees image degrading dust particles from the sensor's optical low pass filter.7185Nikonhttp://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di110.shopping.com/images/di/34/48/67/62574a534a3873736749663842304d58497741-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stockFREE FEDEX 2-3 DAY DELIVERY899.950.00899.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=269&BEFID=7185&aon=%5E&MerchantID=9296&crawler_id=811558&dealId=4HgbWJSJ8ssgIf8B0MXIwA%3D%3D&url=http%3A%2F%2Fwww.pcnation.com%2Foptics-gallery%2Fdetails.asp%3Faffid%3D305%26item%3D2N145P&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3+Megapixel+Digital+SLR+Camera+%28Body+Only%29&dlprc=899.95&crn=&istrsmrc=1&isathrsl=0&AR=21&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=21&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=257&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=PCNationhttp://img.shopping.com/cctool/merch_logos/9296.gif800-470-707916224.43http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_pcnation_9689~MRD-9296~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS2N145PNikon D90 12.3MP Digital SLR Camera (Body Only)Fusing 12.3-megapixel image quality inherited from the award-winning D300 with groundbreaking features, the D90's breathtaking, low-noise image quality is further advanced with EXPEED image processing. Split-second shutter response and continuous shooting at up to 4.5 frames-per-second provide the power to capture fast action and precise moments perfectly, while Nikon's exclusive Scene Recognition System contributes to faster 11-area autofocus performance, finer white balance detection and more. The D90 delivers the control passionate photographers demand, utilizing comprehensive exposure functions and the intelligence of 3D Color Matrix Metering II. Stunning results come to life on a 3-inch 920,000-dot color LCD monitor, providing accurate image review, Live View composition and brilliant playback of the D90's cinematic-quality 24-fps HD D-Movie mode.7185Nikonhttp://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di102.shopping.com/images/di/55/4e/44/6133754d445a584f6e76445f377354494c5967-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockFantastic prices with ease & comfort of Amazon.com!780.000.00780.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=566&BEFID=7185&aon=%5E1&MerchantID=301531&crawler_id=1903313&dealId=UNDa3uMDZXOnvD_7sTILYg%3D%3D&url=http%3A%2F%2Fwww.amazon.com%2Fdp%2FB001ET5U92%2Fref%3Dasc_df_B001ET5U921751618%3Fsmid%3DAHF4SYKP09WBH%26tag%3Ddealtime-ce-mp01feed-20%26linkCode%3Dasn%26creative%3D395105%26creativeASIN%3DB001ET5U92&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+12.3MP+Digital+SLR+Camera+%28Body+Only%29&dlprc=780.0&crn=&istrsmrc=0&isathrsl=0&AR=29&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=99671132&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=29&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=520&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Amazon Marketplacehttp://img.shopping.com/cctool/merch_logos/301531.gif2132.73http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_amazon_marketplace_9689~MRD-301531~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUSB001ET5U92Nikon D90 Digital Camera with 18-105mm lens12.9 Megapixel, SLR Camera, 3 in. LCD Screen, 5.8x Optical Zoom, With Video Capability, Weight: 2.3 lb.Its 12.3 megapixel DX-format CMOS image sensor and EXPEED image processing system offer outstanding image quality across a wide ISO light sensitivity range. Live View mode lets you compose and shoot via the high-resolution 3-inch LCD monitor, and an advanced Scene Recognition System and autofocus performance help capture images with astounding accuracy. Movies can be shot in Motion JPEG format using the D-Movie function. The camera’s large image sensor ensures exceptional movie image quality and you can create dramatic effects by shooting with a wide range of interchangeable NIKKOR lenses, from wide-angle to macro to fisheye, or by adjusting the lens aperture and experimenting with depth-of-field. The D90 – designed to fuel your passion for photography.http://di1.shopping.com/images/pi/57/6a/4f/70621646-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5http://di1.shopping.com/images/pi/57/6a/4f/70621646-490x489-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=2&c=1&l=7000610&t=111021183845&r=5324.81http://img.shopping.com/sc/pr/sdc_stars_sm_5.gifhttp://www.shopping.com/Nikon-D90-with-18-105mm-lens/reviews~linkin_id-7000610849.951599.95http://www.shopping.com/Nikon-D90-with-18-105mm-lens/prices~linkin_id-7000610http://www.shopping.com/Nikon-D90-with-18-105mm-lens/info~linkin_id-7000610Nikon D90 18-105mm VR LensThe Nikon D90 SLR Digital Camera with its 12.3-megapixel DX-format CMOS 3" High resolution LCD display Scene Recognition System Picture Control Active D-Lighting and one-button Live View prov7185Nikonhttp://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1http://di111.shopping.com/images/di/33/6f/35/6531566768674a5066684c7654314a464b5441-260x260-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=1in-stock849.950.00849.95http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=419&BEFID=7185&aon=%5E1&MerchantID=9390&crawler_id=1905054&dealId=3o5e1VghgJPfhLvT1JFKTA%3D%3D&url=http%3A%2F%2Fwww.ajrichard.com%2FNikon-D90-18-105mm-VR-Lens%2Fp-292%3Frefid%3DShopping%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+18-105mm+VR+Lens&dlprc=849.95&crn=&istrsmrc=0&isathrsl=0&AR=2&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=2&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=425&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=AJRichardhttp://img.shopping.com/cctool/merch_logos/9390.gif1-888-871-125631244.48http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_ajrichard~MRD-9390~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS292Nikon D90 SLR w/Nikon 18-105mm VR Lens12.3 MegapixelDX Format CMOS Sensor3" VGA LCD DisplayLive ViewSelf Cleaning SensorD-Movie ModeHigh Sensitivity (ISO 3200)4.5 fps BurstIn-Camera Image Editing7185Nikonhttp://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2http://di108.shopping.com/images/di/5f/6c/59/576a5f6a62776673536b666377556344757777-500x500-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=2in-stock909.000.00909.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=371&BEFID=7185&aon=%5E1&MerchantID=487342&crawler_id=487342&dealId=_lYWj_jbwfsSkfcwUcDuww%3D%3D&url=http%3A%2F%2Fwww.rythercamera.com%2Fcatalog%2Fproduct_info.php%3Fcsv%3Dsh%26products_id%3D30971%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+SLR+w%2FNikon+18-105mm+VR+Lens&dlprc=909.0&crn=&istrsmrc=0&isathrsl=0&AR=3&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=3&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=1&code=&acode=379&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RytherCamera.comhttp://img.shopping.com/cctool/merch_logos/487342.gif1-877-644-75930http://img.shopping.com/sc/glb/flag/US.gifUS3097125448/D90 12.3 Megapixel Digital Camera 18-105mm Zoom Lens w/ 3" Screen - BlackNikon D90 - Digital camera - SLR - 12.3 Mpix - Nikon AF-S DX 18-105mm lens - optical zoom: 5.8 x - supported memory: SD, SDHC7185Nikonhttp://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3http://di110.shopping.com/images/di/31/4b/43/636c4347755776747932584b5539736b616467-400x400-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=3in-stockGet 30 days FREE SHIPPING w/ ShipVantage1199.008.201199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=578&BEFID=7185&aon=%5E1&MerchantID=485615&crawler_id=485615&dealId=1KCclCGuWvty2XKU9skadg%3D%3D&url=http%3A%2F%2Fsears.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1NbQBRtFXpzYx0CTAICI2BbH1lEFmgKP3QvUVpEREdlfUAUHAQPLVpFTVdtJzxAHUNYW3AhQBM0QhFvEXAbYh8EAAVmb2JcVlhCGGkPc3QDEkFZVQ0WFhdRW0MWbgYWDlxzdGMdAVQWRi0xDAwPFhw9TSobb05eWVVYKzsLTFVVQi5RICs3SA8MU1s2MQQKD1wf%26nAID%3D13736960%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=25448%2FD90+12.3+Megapixel+Digital+Camera+18-105mm+Zoom+Lens+w%2F+3%22+Screen+-+Black&dlprc=1199.0&crn=&istrsmrc=1&isathrsl=0&AR=4&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=4&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=586&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=Searshttp://img.shopping.com/cctool/merch_logos/485615.gif1-800-349-43588882.85http://img.shopping.com/sc/mr/sdc_checks_3.gifhttp://www.shopping.com/xMR-store_sears_4189479~MRD-485615~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS00353197000Nikon® D90 12.3MP Digital SLR with 18-105mm LensThe Nikon D90 will make you rethink what a digital SLR camera can achieve.7185Nikonhttp://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4http://di101.shopping.com/images/di/33/2d/56/4f53665656354a6f37486c41346b4a74616e41-220x220-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=4in-stock1350.996.051350.99http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=504&BEFID=7185&aon=%5E1&MerchantID=332477&crawler_id=332477&dealId=3-VOSfVV5Jo7HlA4kJtanA%3D%3D&url=http%3A%2F%2Ftracking.searchmarketing.com%2Fgsic.asp%3Faid%3D982673361%26&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon%C2%AE+D90+12.3MP+Digital+SLR+with+18-105mm+Lens&dlprc=1350.99&crn=&istrsmrc=0&isathrsl=0&AR=5&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=5&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=0&FS=0&code=&acode=496&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=RadioShackhttp://img.shopping.com/cctool/merch_logos/332477.gif242.25http://img.shopping.com/sc/mr/sdc_checks_25.gifhttp://www.shopping.com/xMR-store_radioshack_9689~MRD-332477~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS11148905Nikon D90 Kit 12.3-megapixel Digital SLR with 18-105mm VR LensPhotographers, take your passion further!Now is the time for new creativity, and to rethink what a digital SLR camera can achieve. It's time for the D90, a camera with everything you would expect from Nikon's next-generation D-SLRs, and some unexpected surprises, as well. The stunning image quality is inherited from the D300, Nikon's DX-format flagship. The D90 also has Nikon's unmatched ergonomics and high performance, and now takes high-quality movies with beautifully cinematic results. The world of photography has changed, and with the D90 in your hands, it's time to make your own rules.AF-S DX NIKKOR 18-105mm f/3.5-5.6G ED VR LensWide-ratio 5.8x zoom Compact, versatile and ideal for a broad range of shooting situations, ranging from interiors and landscapes to beautiful portraits� a perfect everyday zoom. Nikon VR (Vibration Reduction) image stabilization Vibration Reduction is engineered specifically for each VR NIKKOR lens and enables handheld shooting at up to 3 shutter speeds slower than would7185Nikonhttp://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-100x100-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-200x200-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x300-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://img.shopping.com/sc/ds/no_image_100X100.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5http://di110.shopping.com/images/di/6b/51/6e/4236725334416a4e3564783568325f36333167-300x232-0-0.jpg?p=p2.a121bc2aaf029435dce6&a=1&c=1&l=7000610&t=111021183845&r=5in-stockShipping Included!1050.000.001199.00http://statTest.dealtime.com/DealFrame/DealFrame.cmp?bm=135&BEFID=7185&aon=%5E1&MerchantID=313162&crawler_id=313162&dealId=kQnB6rS4AjN5dx5h2_631g%3D%3D&url=http%3A%2F%2Fonecall.rdr.channelintelligence.com%2Fgo.asp%3FfVhzOGNRAAQIASNiE1pZSxNoWHFwLx8GTAICa2ZeH1sPXTZLNzRpAh1HR0BxPQEGCBJNMhFHUElsFCFCVkVTTHAcBggEHQ4aHXNpGERGH3RQODsbAgdechJtbBt8fx8JAwhtZFAzJj1oGgIWCxRlNyFOUV9UUGIxBgo0T0IyTSYqJ0RWHw4QPCIBAAQXRGMDICg6TllZVBhh%26nAID%3D13736960&linkin_id=7000610&Issdt=111021183845&searchID=p2.a121bc2aaf029435dce6&DealName=Nikon+D90+Kit+12.3-megapixel+Digital+SLR+with+18-105mm+VR+Lens&dlprc=1050.0&crn=&istrsmrc=1&isathrsl=0&AR=6&NG=20&NDP=200&PN=1&ST=7&DB=sdcprod&MT=phx-pkadudc2&FPT=DSP&NDS=&NMS=&MRS=&PD=70621646&brnId=14804&IsFtr=0&IsSmart=0&DMT=&op=&CM=&DlLng=1&RR=6&cid=&semid1=&semid2=&IsLps=0&CC=0&SL=1&FS=1&code=&acode=143&category=&HasLink=&frameId=&ND=&MN=&PT=&prjID=&GR=&lnkId=&VK=OneCallhttp://img.shopping.com/cctool/merch_logos/313162.gif1.800.398.07661804.44http://img.shopping.com/sc/mr/sdc_checks_45.gifhttp://www.shopping.com/xMR-store_onecall_9689~MRD-313162~S-1~linkin_id-7000610http://img.shopping.com/sc/glb/flag/US.gifUS92826Price rangehttp://www.shopping.com/digital-cameras/nikon/products?oq=nikon&linkin_id=7000610$24 - $4012http://www.shopping.com/digital-cameras/nikon/products?minPrice=24&maxPrice=4012&linkin_id=7000610$4012 - $7999http://www.shopping.com/digital-cameras/nikon/products?minPrice=4012&maxPrice=7999&linkin_id=7000610Brandhttp://www.shopping.com/digital-cameras/nikon/products~all-9688-brand~MS-1?oq=nikon&linkin_id=7000610Nikonhttp://www.shopping.com/digital-cameras/nikon+brand-nikon/products~linkin_id-7000610Cranehttp://www.shopping.com/digital-cameras/nikon+9688-brand-crane/products~linkin_id-7000610Ikelitehttp://www.shopping.com/digital-cameras/nikon+ikelite/products~linkin_id-7000610Bowerhttp://www.shopping.com/digital-cameras/nikon+bower/products~linkin_id-7000610FUJIFILMhttp://www.shopping.com/digital-cameras/nikon+brand-fuji/products~linkin_id-7000610Storehttp://www.shopping.com/digital-cameras/nikon/products~all-store~MS-1?oq=nikon&linkin_id=7000610Amazon Marketplacehttp://www.shopping.com/digital-cameras/nikon+store-amazon-marketplace-9689/products~linkin_id-7000610Amazonhttp://www.shopping.com/digital-cameras/nikon+store-amazon/products~linkin_id-7000610Adoramahttp://www.shopping.com/digital-cameras/nikon+store-adorama/products~linkin_id-7000610J&R Music and Computer Worldhttp://www.shopping.com/digital-cameras/nikon+store-j-r-music-and-computer-world/products~linkin_id-7000610RytherCamera.comhttp://www.shopping.com/digital-cameras/nikon+store-rythercamera-com/products~linkin_id-7000610Resolutionhttp://www.shopping.com/digital-cameras/nikon/products~all-21885-resolution~MS-1?oq=nikon&linkin_id=7000610Under 4 Megapixelhttp://www.shopping.com/digital-cameras/nikon+under-4-megapixel/products~linkin_id-7000610At least 5 Megapixelhttp://www.shopping.com/digital-cameras/nikon+5-megapixel-digital-cameras/products~linkin_id-7000610At least 6 Megapixelhttp://www.shopping.com/digital-cameras/nikon+6-megapixel-digital-cameras/products~linkin_id-7000610At least 7 Megapixelhttp://www.shopping.com/digital-cameras/nikon+7-megapixel-digital-cameras/products~linkin_id-7000610At least 8 Megapixelhttp://www.shopping.com/digital-cameras/nikon+8-megapixel-digital-cameras/products~linkin_id-7000610Featureshttp://www.shopping.com/digital-cameras/nikon/products~all-32804-features~MS-1?oq=nikon&linkin_id=7000610Shockproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-shockproof/products~linkin_id-7000610Waterproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-waterproof/products~linkin_id-7000610Freezeproofhttp://www.shopping.com/digital-cameras/nikon+32804-features-freezeproof/products~linkin_id-7000610Dust proofhttp://www.shopping.com/digital-cameras/nikon+32804-features-dust-proof/products~linkin_id-7000610Image Stabilizationhttp://www.shopping.com/digital-cameras/nikon+32804-features-image-stabilization/products~linkin_id-7000610hybriddigital camerag1sonycameracanonnikonkodak digital camerakodaksony cybershotkodak easyshare digital cameranikon coolpixolympuspink digital cameracanon powershot \ No newline at end of file diff --git a/node_modules/sax/examples/strict.dtd b/node_modules/sax/examples/strict.dtd new file mode 100644 index 000000000..b27455943 --- /dev/null +++ b/node_modules/sax/examples/strict.dtd @@ -0,0 +1,870 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +%HTMLlat1; + + +%HTMLsymbol; + + +%HTMLspecial; + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/sax/examples/test.html b/node_modules/sax/examples/test.html new file mode 100644 index 000000000..61f8f1ab9 --- /dev/null +++ b/node_modules/sax/examples/test.html @@ -0,0 +1,15 @@ + + + + + testing the parser + + + +

    hello + + + + diff --git a/node_modules/sax/examples/test.xml b/node_modules/sax/examples/test.xml new file mode 100644 index 000000000..801292d7f --- /dev/null +++ b/node_modules/sax/examples/test.xml @@ -0,0 +1,1254 @@ + + +]> + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + + Some Text + + + + + + + are ok in here. ]]> + + Pre-Text & Inlined text Post-text. +  + + \ No newline at end of file diff --git a/node_modules/sax/lib/sax.js b/node_modules/sax/lib/sax.js new file mode 100644 index 000000000..410a50748 --- /dev/null +++ b/node_modules/sax/lib/sax.js @@ -0,0 +1,1410 @@ +// wrapper for non-node envs +;(function (sax) { + +sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } +sax.SAXParser = SAXParser +sax.SAXStream = SAXStream +sax.createStream = createStream + +// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. +// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), +// since that's the earliest that a buffer overrun could occur. This way, checks are +// as rare as required, but as often as necessary to ensure never crossing this bound. +// Furthermore, buffers are only tested at most once per write(), so passing a very +// large string into write() might have undesirable effects, but this is manageable by +// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme +// edge case, result in creating at most one complete copy of the string passed in. +// Set to Infinity to have unlimited buffers. +sax.MAX_BUFFER_LENGTH = 64 * 1024 + +var buffers = [ + "comment", "sgmlDecl", "textNode", "tagName", "doctype", + "procInstName", "procInstBody", "entity", "attribName", + "attribValue", "cdata", "script" +] + +sax.EVENTS = // for discoverability. + [ "text" + , "processinginstruction" + , "sgmldeclaration" + , "doctype" + , "comment" + , "attribute" + , "opentag" + , "closetag" + , "opencdata" + , "cdata" + , "closecdata" + , "error" + , "end" + , "ready" + , "script" + , "opennamespace" + , "closenamespace" + ] + +function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) return new SAXParser(strict, opt) + + var parser = this + clearBuffers(parser) + parser.q = parser.c = "" + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags + parser.looseCase = parser.opt.lowercase ? "toLowerCase" : "toUpperCase" + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.ENTITIES = Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) parser.ns = Object.create(rootNS) + + // mostly just for error reporting + parser.trackPosition = parser.opt.position !== false + if (parser.trackPosition) { + parser.position = parser.line = parser.column = 0 + } + emit(parser, "onready") +} + +if (!Object.create) Object.create = function (o) { + function f () { this.__proto__ = o } + f.prototype = o + return new f +} + +if (!Object.getPrototypeOf) Object.getPrototypeOf = function (o) { + return o.__proto__ +} + +if (!Object.keys) Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a +} + +function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + , maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i ++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case "textNode": + closeText(parser) + break + + case "cdata": + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + break + + case "script": + emitNode(parser, "onscript", parser.script) + parser.script = "" + break + + default: + error(parser, "Max buffer length exceeded: "+buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + parser.bufferCheckPosition = (sax.MAX_BUFFER_LENGTH - maxActual) + + parser.position +} + +function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i ++) { + parser[buffers[i]] = "" + } +} + +function flushBuffers (parser) { + closeText(parser) + if (parser.cdata !== "") { + emitNode(parser, "oncdata", parser.cdata) + parser.cdata = "" + } + if (parser.script !== "") { + emitNode(parser, "onscript", parser.script) + parser.script = "" + } +} + +SAXParser.prototype = + { end: function () { end(this) } + , write: write + , resume: function () { this.error = null; return this } + , close: function () { return this.write(null) } + , flush: function () { flushBuffers(this) } + } + +try { + var Stream = require("stream").Stream +} catch (ex) { + var Stream = function () {} +} + + +var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== "error" && ev !== "end" +}) + +function createStream (strict, opt) { + return new SAXStream(strict, opt) +} + +function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) return new SAXStream(strict, opt) + + Stream.apply(this) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + + var me = this + + this._parser.onend = function () { + me.emit("end") + } + + this._parser.onerror = function (er) { + me.emit("error", er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + this._decoder = null; + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, "on" + ev, { + get: function () { return me._parser["on" + ev] }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + return me._parser["on"+ev] = h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) +} + +SAXStream.prototype = Object.create(Stream.prototype, + { constructor: { value: SAXStream } }) + +SAXStream.prototype.write = function (data) { + if (typeof Buffer === 'function' && + typeof Buffer.isBuffer === 'function' && + Buffer.isBuffer(data)) { + if (!this._decoder) { + var SD = require('string_decoder').StringDecoder + this._decoder = new SD('utf8') + } + data = this._decoder.write(data); + } + + this._parser.write(data.toString()) + this.emit("data", data) + return true +} + +SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) this.write(chunk) + this._parser.end() + return true +} + +SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser["on"+ev] && streamWraps.indexOf(ev) !== -1) { + me._parser["on"+ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] + : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) +} + + + +// character classes and tokens +var whitespace = "\r\n\t " + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + , number = "0124356789" + , letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + // (Letter | "_" | ":") + , quote = "'\"" + , entity = number+letter+"#" + , attribEnd = whitespace + ">" + , CDATA = "[CDATA[" + , DOCTYPE = "DOCTYPE" + , XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace" + , XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/" + , rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + +// turn all the string character sets into character class objects. +whitespace = charClass(whitespace) +number = charClass(number) +letter = charClass(letter) + +// http://www.w3.org/TR/REC-xml/#NT-NameStartChar +// This implementation works on strings, a single character at a time +// as such, it cannot ever support astral-plane characters (10000-EFFFF) +// without a significant breaking change to either this parser, or the +// JavaScript language. Implementation of an emoji-capable xml parser +// is left as an exercise for the reader. +var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + +var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + +quote = charClass(quote) +entity = charClass(entity) +attribEnd = charClass(attribEnd) + +function charClass (str) { + return str.split("").reduce(function (s, c) { + s[c] = true + return s + }, {}) +} + +function isRegExp (c) { + return Object.prototype.toString.call(c) === '[object RegExp]' +} + +function is (charclass, c) { + return isRegExp(charclass) ? !!c.match(charclass) : charclass[c] +} + +function not (charclass, c) { + return !is(charclass, c) +} + +var S = 0 +sax.STATE = +{ BEGIN : S++ +, TEXT : S++ // general stuff +, TEXT_ENTITY : S++ // & and such. +, OPEN_WAKA : S++ // < +, SGML_DECL : S++ // +, SCRIPT : S++ // " + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "text", "hello world" ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + +require(__dirname).test + ( { xml : "" + , expect : + [ [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "script", attributes: {}, isSelfClosing: false } ] + , [ "opencdata", undefined ] + , [ "cdata", "hello world" ] + , [ "closecdata", undefined ] + , [ "closetag", "script" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) + diff --git a/node_modules/sax/test/issue-84.js b/node_modules/sax/test/issue-84.js new file mode 100644 index 000000000..0e7ee699a --- /dev/null +++ b/node_modules/sax/test/issue-84.js @@ -0,0 +1,13 @@ +// https://github.com/isaacs/sax-js/issues/49 +require(__dirname).test + ( { xml : "body" + , expect : + [ [ "processinginstruction", { name: "has", body: "unbalanced \"quotes" } ], + [ "opentag", { name: "xml", attributes: {}, isSelfClosing: false } ] + , [ "text", "body" ] + , [ "closetag", "xml" ] + ] + , strict : false + , opt : { lowercasetags: true, noscript: true } + } + ) diff --git a/node_modules/sax/test/parser-position.js b/node_modules/sax/test/parser-position.js new file mode 100644 index 000000000..e4a68b1e9 --- /dev/null +++ b/node_modules/sax/test/parser-position.js @@ -0,0 +1,28 @@ +var sax = require("../lib/sax"), + assert = require("assert") + +function testPosition(chunks, expectedEvents) { + var parser = sax.parser(); + expectedEvents.forEach(function(expectation) { + parser['on' + expectation[0]] = function() { + for (var prop in expectation[1]) { + assert.equal(parser[prop], expectation[1][prop]); + } + } + }); + chunks.forEach(function(chunk) { + parser.write(chunk); + }); +}; + +testPosition(['

    abcdefgh
    '], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); + +testPosition(['
    abcde','fgh
    '], + [ ['opentag', { position: 5, startTagPosition: 1 }] + , ['text', { position: 19, startTagPosition: 14 }] + , ['closetag', { position: 19, startTagPosition: 14 }] + ]); diff --git a/node_modules/sax/test/script-close-better.js b/node_modules/sax/test/script-close-better.js new file mode 100644 index 000000000..f4887b9a0 --- /dev/null +++ b/node_modules/sax/test/script-close-better.js @@ -0,0 +1,12 @@ +require(__dirname).test({ + xml : "", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "HEAD","attributes": {}, isSelfClosing: false}], + ["opentag", {"name": "SCRIPT","attributes": {}, isSelfClosing: false}], + ["script", "'
    foo
    ", + expect : [ + ["opentag", {"name": "HTML","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "HEAD","attributes": {}, "isSelfClosing": false}], + ["opentag", {"name": "SCRIPT","attributes": {}, "isSelfClosing": false}], + ["script", "if (1 < 0) { console.log('elo there'); }"], + ["closetag", "SCRIPT"], + ["closetag", "HEAD"], + ["closetag", "HTML"] + ] +}); diff --git a/node_modules/sax/test/self-closing-child-strict.js b/node_modules/sax/test/self-closing-child-strict.js new file mode 100644 index 000000000..3d6e98520 --- /dev/null +++ b/node_modules/sax/test/self-closing-child-strict.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "root", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "child", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "haha", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "haha"], + ["closetag", "child"], + ["opentag", { + "name": "monkey", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "monkey"], + ["closetag", "root"], + ["end"], + ["ready"] + ], + strict : true, + opt : {} +}); + diff --git a/node_modules/sax/test/self-closing-child.js b/node_modules/sax/test/self-closing-child.js new file mode 100644 index 000000000..f31c36646 --- /dev/null +++ b/node_modules/sax/test/self-closing-child.js @@ -0,0 +1,44 @@ + +require(__dirname).test({ + xml : + ""+ + "" + + "" + + "" + + "" + + "=(|)" + + "" + + "", + expect : [ + ["opentag", { + "name": "ROOT", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "CHILD", + "attributes": {}, + "isSelfClosing": false + }], + ["opentag", { + "name": "HAHA", + "attributes": {}, + "isSelfClosing": true + }], + ["closetag", "HAHA"], + ["closetag", "CHILD"], + ["opentag", { + "name": "MONKEY", + "attributes": {}, + "isSelfClosing": false + }], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); + diff --git a/node_modules/sax/test/self-closing-tag.js b/node_modules/sax/test/self-closing-tag.js new file mode 100644 index 000000000..d1d8b7c82 --- /dev/null +++ b/node_modules/sax/test/self-closing-tag.js @@ -0,0 +1,25 @@ + +require(__dirname).test({ + xml : + " "+ + " "+ + " "+ + " "+ + "=(|) "+ + ""+ + " ", + expect : [ + ["opentag", {name:"ROOT", attributes:{}, isSelfClosing: false}], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + ["opentag", {name:"HAHA", attributes:{}, isSelfClosing: true}], + ["closetag", "HAHA"], + // ["opentag", {name:"HAHA", attributes:{}}], + // ["closetag", "HAHA"], + ["opentag", {name:"MONKEY", attributes:{}, isSelfClosing: false}], + ["text", "=(|)"], + ["closetag", "MONKEY"], + ["closetag", "ROOT"] + ], + opt : { trim : true } +}); \ No newline at end of file diff --git a/node_modules/sax/test/stray-ending.js b/node_modules/sax/test/stray-ending.js new file mode 100644 index 000000000..bec467b22 --- /dev/null +++ b/node_modules/sax/test/stray-ending.js @@ -0,0 +1,17 @@ +// stray ending tags should just be ignored in non-strict mode. +// https://github.com/isaacs/sax-js/issues/32 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "A", attributes: {}, isSelfClosing: false } ] + , [ "opentag", { name: "B", attributes: {}, isSelfClosing: false } ] + , [ "text", "" ] + , [ "closetag", "B" ] + , [ "closetag", "A" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/node_modules/sax/test/trailing-attribute-no-value.js b/node_modules/sax/test/trailing-attribute-no-value.js new file mode 100644 index 000000000..222837f8f --- /dev/null +++ b/node_modules/sax/test/trailing-attribute-no-value.js @@ -0,0 +1,10 @@ + +require(__dirname).test({ + xml : + "", + expect : [ + ["attribute", {name:"ATTRIB", value:"attrib"}], + ["opentag", {name:"ROOT", attributes:{"ATTRIB":"attrib"}, isSelfClosing: false}] + ], + opt : { trim : true } +}); diff --git a/node_modules/sax/test/trailing-non-whitespace.js b/node_modules/sax/test/trailing-non-whitespace.js new file mode 100644 index 000000000..619578b17 --- /dev/null +++ b/node_modules/sax/test/trailing-non-whitespace.js @@ -0,0 +1,18 @@ + +require(__dirname).test({ + xml : "Welcome, to monkey land", + expect : [ + ["opentag", { + "name": "SPAN", + "attributes": {}, + isSelfClosing: false + }], + ["text", "Welcome,"], + ["closetag", "SPAN"], + ["text", " to monkey land"], + ["end"], + ["ready"] + ], + strict : false, + opt : {} +}); diff --git a/node_modules/sax/test/unclosed-root.js b/node_modules/sax/test/unclosed-root.js new file mode 100644 index 000000000..f4eeac61b --- /dev/null +++ b/node_modules/sax/test/unclosed-root.js @@ -0,0 +1,11 @@ +require(__dirname).test + ( { xml : "" + + , expect : + [ [ "opentag", { name: "root", attributes: {}, isSelfClosing: false } ] + , [ "error", "Unclosed root tag\nLine: 0\nColumn: 6\nChar: " ] + ] + , strict : true + , opt : {} + } + ) diff --git a/node_modules/sax/test/unquoted.js b/node_modules/sax/test/unquoted.js new file mode 100644 index 000000000..b3a9a8122 --- /dev/null +++ b/node_modules/sax/test/unquoted.js @@ -0,0 +1,18 @@ +// unquoted attributes should be ok in non-strict mode +// https://github.com/isaacs/sax-js/issues/31 +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "attribute", { name: "CLASS", value: "test" } ] + , [ "attribute", { name: "HELLO", value: "world" } ] + , [ "opentag", { name: "SPAN", + attributes: { CLASS: "test", HELLO: "world" }, + isSelfClosing: false } ] + , [ "closetag", "SPAN" ] + ] + , strict : false + , opt : {} + } + ) + diff --git a/node_modules/sax/test/utf8-split.js b/node_modules/sax/test/utf8-split.js new file mode 100644 index 000000000..e22bc1004 --- /dev/null +++ b/node_modules/sax/test/utf8-split.js @@ -0,0 +1,32 @@ +var assert = require('assert') +var saxStream = require('../lib/sax').createStream() + +var b = new Buffer('误') + +saxStream.on('text', function(text) { + assert.equal(text, b.toString()) +}) + +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 1)) +saxStream.write(b.slice(1)) +saxStream.write(new Buffer('')) +saxStream.write(b.slice(0, 2)) +saxStream.write(b.slice(2)) +saxStream.write(new Buffer('')) +saxStream.write(b) +saxStream.write(new Buffer('')) +saxStream.write(Buffer.concat([new Buffer(''), b.slice(0, 1)])) +saxStream.end(Buffer.concat([b.slice(1), new Buffer('')])) + +var saxStream2 = require('../lib/sax').createStream() + +saxStream2.on('text', function(text) { + assert.equal(text, '�') +}); + +saxStream2.write(new Buffer('')); +saxStream2.write(new Buffer([0xC0])); +saxStream2.write(new Buffer('')); +saxStream2.write(Buffer.concat([new Buffer(''), b.slice(0,1)])); +saxStream2.end(); diff --git a/node_modules/sax/test/xmlns-as-tag-name.js b/node_modules/sax/test/xmlns-as-tag-name.js new file mode 100644 index 000000000..99142ca69 --- /dev/null +++ b/node_modules/sax/test/xmlns-as-tag-name.js @@ -0,0 +1,15 @@ + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opentag", { name: "xmlns", uri: "", prefix: "", local: "xmlns", + attributes: {}, ns: {}, + isSelfClosing: true} + ], + ["closetag", "xmlns"] + ] + , strict : true + , opt : { xmlns: true } + } + ); diff --git a/node_modules/sax/test/xmlns-issue-41.js b/node_modules/sax/test/xmlns-issue-41.js new file mode 100644 index 000000000..17ab45a0f --- /dev/null +++ b/node_modules/sax/test/xmlns-issue-41.js @@ -0,0 +1,68 @@ +var t = require(__dirname) + + , xmls = // should be the same both ways. + [ "" + , "" ] + + , ex1 = + [ [ "opennamespace" + , { prefix: "a" + , uri: "http://ATTRIBUTE" + } + ] + , [ "attribute" + , { name: "xmlns:a" + , value: "http://ATTRIBUTE" + , prefix: "xmlns" + , local: "a" + , uri: "http://www.w3.org/2000/xmlns/" + } + ] + , [ "attribute" + , { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + ] + , [ "opentag" + , { name: "parent" + , uri: "" + , prefix: "" + , local: "parent" + , attributes: + { "a:attr": + { name: "a:attr" + , local: "attr" + , prefix: "a" + , uri: "http://ATTRIBUTE" + , value: "value" + } + , "xmlns:a": + { name: "xmlns:a" + , local: "a" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "http://ATTRIBUTE" + } + } + , ns: {"a": "http://ATTRIBUTE"} + , isSelfClosing: true + } + ] + , ["closetag", "parent"] + , ["closenamespace", { prefix: "a", uri: "http://ATTRIBUTE" }] + ] + + // swap the order of elements 2 and 1 + , ex2 = [ex1[0], ex1[2], ex1[1]].concat(ex1.slice(3)) + , expected = [ex1, ex2] + +xmls.forEach(function (x, i) { + t.test({ xml: x + , expect: expected[i] + , strict: true + , opt: { xmlns: true } + }) +}) diff --git a/node_modules/sax/test/xmlns-rebinding.js b/node_modules/sax/test/xmlns-rebinding.js new file mode 100644 index 000000000..07e042553 --- /dev/null +++ b/node_modules/sax/test/xmlns-rebinding.js @@ -0,0 +1,63 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opennamespace", { prefix: "x", uri: "x1" } ] + , [ "opennamespace", { prefix: "y", uri: "y1" } ] + , [ "attribute", { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "attribute", { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } ] + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } + , "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y" } + , "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: false } ] + + , [ "opennamespace", { prefix: "x", uri: "x2" } ] + , [ "attribute", { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } ] + , [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", + attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x" } }, + ns: { x: 'x2' }, + isSelfClosing: false } ] + + , [ "attribute", { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x2' }, + isSelfClosing: true } ] + + , [ "closetag", "check" ] + + , [ "closetag", "rebind" ] + , [ "closenamespace", { prefix: "x", uri: "x2" } ] + + , [ "attribute", { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } ] + , [ "attribute", { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } ] + , [ "opentag", { name: "check", uri: "", prefix: "", local: "check", + attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a" } + , "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a" } }, + ns: { x: 'x1', y: 'y1' }, + isSelfClosing: true } ] + , [ "closetag", "check" ] + + , [ "closetag", "root" ] + , [ "closenamespace", { prefix: "x", uri: "x1" } ] + , [ "closenamespace", { prefix: "y", uri: "y1" } ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/node_modules/sax/test/xmlns-strict.js b/node_modules/sax/test/xmlns-strict.js new file mode 100644 index 000000000..b5e3e5188 --- /dev/null +++ b/node_modules/sax/test/xmlns-strict.js @@ -0,0 +1,74 @@ + +require(__dirname).test + ( { xml : + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + ""+ + "" + + , expect : + [ [ "opentag", { name: "root", prefix: "", local: "root", uri: "", + attributes: {}, ns: {}, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", uri: "", prefix: "", local: "attr", uri: "" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "opennamespace", { prefix: "", uri: "uri:default" } ] + + , [ "attribute", { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } ] + , [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", + attributes: { "xmlns": { name: "xmlns", value: "uri:default", prefix: "xmlns", local: "", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { "": "uri:default" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: { '': 'uri:default' }, + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "closetag", "ns1" ] + + , [ "closenamespace", { prefix: "", uri: "uri:default" } ] + + , [ "opennamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } ] + + , [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", + attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/" } }, + ns: { a: "uri:nsa" }, isSelfClosing: false } ] + + , [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } ] + , [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", + attributes: { "attr": { name: "attr", value: "normal", prefix: "", local: "attr", uri: "" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "plain" ] + + , [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } ] + , [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", + attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa" } }, + ns: { a: 'uri:nsa' }, + isSelfClosing: true } ] + , [ "closetag", "a:ns" ] + + , [ "closetag", "ns2" ] + + , [ "closenamespace", { prefix: "a", uri: "uri:nsa" } ] + + , [ "closetag", "root" ] + ] + , strict : true + , opt : { xmlns: true } + } + ) + diff --git a/node_modules/sax/test/xmlns-unbound-element.js b/node_modules/sax/test/xmlns-unbound-element.js new file mode 100644 index 000000000..9d031a2bd --- /dev/null +++ b/node_modules/sax/test/xmlns-unbound-element.js @@ -0,0 +1,33 @@ +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "error", "Unbound namespace prefix: \"unbound:root\"\nLine: 0\nColumn: 15\nChar: >"] + , [ "opentag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root" + , attributes: {}, ns: {}, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + ] + } +).write(""); + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ [ "opennamespace", { prefix: "unbound", uri: "someuri" } ] + , [ "attribute", { name: 'xmlns:unbound', value: 'someuri' + , prefix: 'xmlns', local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } ] + , [ "opentag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root" + , attributes: { 'xmlns:unbound': { + name: 'xmlns:unbound' + , value: 'someuri' + , prefix: 'xmlns' + , local: 'unbound' + , uri: 'http://www.w3.org/2000/xmlns/' } } + , ns: { "unbound": "someuri" }, isSelfClosing: true } ] + , [ "closetag", "unbound:root" ] + , [ "closenamespace", { prefix: 'unbound', uri: 'someuri' }] + ] + } +).write(""); diff --git a/node_modules/sax/test/xmlns-unbound.js b/node_modules/sax/test/xmlns-unbound.js new file mode 100644 index 000000000..b740e2612 --- /dev/null +++ b/node_modules/sax/test/xmlns-unbound.js @@ -0,0 +1,15 @@ + +require(__dirname).test( + { strict : true + , opt : { xmlns: true } + , expect : + [ ["error", "Unbound namespace prefix: \"unbound\"\nLine: 0\nColumn: 28\nChar: >"] + + , [ "attribute", { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } ] + , [ "opentag", { name: "root", uri: "", prefix: "", local: "root", + attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr" } }, + ns: {}, isSelfClosing: true } ] + , [ "closetag", "root" ] + ] + } +).write("") diff --git a/node_modules/sax/test/xmlns-xml-default-ns.js b/node_modules/sax/test/xmlns-xml-default-ns.js new file mode 100644 index 000000000..b1984d255 --- /dev/null +++ b/node_modules/sax/test/xmlns-xml-default-ns.js @@ -0,0 +1,31 @@ +var xmlns_attr = +{ + name: "xmlns", value: "http://foo", prefix: "xmlns", + local: "", uri : "http://www.w3.org/2000/xmlns/" +}; + +var attr_attr = +{ + name: "attr", value: "bar", prefix: "", + local : "attr", uri : "" +}; + + +require(__dirname).test + ( { xml : + "" + , expect : + [ [ "opennamespace", { prefix: "", uri: "http://foo" } ] + , [ "attribute", xmlns_attr ] + , [ "attribute", attr_attr ] + , [ "opentag", { name: "elm", prefix: "", local: "elm", uri : "http://foo", + ns : { "" : "http://foo" }, + attributes: { xmlns: xmlns_attr, attr: attr_attr }, + isSelfClosing: true } ] + , [ "closetag", "elm" ] + , [ "closenamespace", { prefix: "", uri: "http://foo"} ] + ] + , strict : true + , opt : {xmlns: true} + } + ) diff --git a/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js b/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js new file mode 100644 index 000000000..e41f21875 --- /dev/null +++ b/node_modules/sax/test/xmlns-xml-default-prefix-attribute.js @@ -0,0 +1,36 @@ +require(__dirname).test( + { xml : "" + , expect : + [ [ "attribute" + , { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + ] + , [ "opentag" + , { name: "root" + , uri: "" + , prefix: "" + , local: "root" + , attributes: + { "xml:lang": + { name: "xml:lang" + , local: "lang" + , prefix: "xml" + , uri: "http://www.w3.org/XML/1998/namespace" + , value: "en" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/node_modules/sax/test/xmlns-xml-default-prefix.js b/node_modules/sax/test/xmlns-xml-default-prefix.js new file mode 100644 index 000000000..a85b4787f --- /dev/null +++ b/node_modules/sax/test/xmlns-xml-default-prefix.js @@ -0,0 +1,21 @@ +require(__dirname).test( + { xml : "" + , expect : + [ + [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: {} + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/node_modules/sax/test/xmlns-xml-default-redefine.js b/node_modules/sax/test/xmlns-xml-default-redefine.js new file mode 100644 index 000000000..d35d5a0cb --- /dev/null +++ b/node_modules/sax/test/xmlns-xml-default-redefine.js @@ -0,0 +1,41 @@ +require(__dirname).test( + { xml : "" + , expect : + [ ["error" + , "xml: prefix must be bound to http://www.w3.org/XML/1998/namespace\n" + + "Actual: ERROR\n" + + "Line: 0\nColumn: 27\nChar: '" + ] + , [ "attribute" + , { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + ] + , [ "opentag" + , { name: "xml:root" + , uri: "http://www.w3.org/XML/1998/namespace" + , prefix: "xml" + , local: "root" + , attributes: + { "xmlns:xml": + { name: "xmlns:xml" + , local: "xml" + , prefix: "xmlns" + , uri: "http://www.w3.org/2000/xmlns/" + , value: "ERROR" + } + } + , ns: {} + , isSelfClosing: true + } + ] + , ["closetag", "xml:root"] + ] + , strict : true + , opt : { xmlns: true } + } +) + diff --git a/node_modules/selenium-webdriver/.npmignore b/node_modules/selenium-webdriver/.npmignore new file mode 100644 index 000000000..d5700888a --- /dev/null +++ b/node_modules/selenium-webdriver/.npmignore @@ -0,0 +1,2 @@ +node_modules/ + diff --git a/node_modules/selenium-webdriver/CHANGES.md b/node_modules/selenium-webdriver/CHANGES.md new file mode 100644 index 000000000..614f905b4 --- /dev/null +++ b/node_modules/selenium-webdriver/CHANGES.md @@ -0,0 +1,660 @@ +## v3.0.0-beta-3 + +* Fixed a bug where the promise manager would silently drop callbacks after + recovering from an unhandled promise rejection. +* Added the `firefox.ServiceBuilder` class, which may be used to customize the + geckodriver used for `firefox.Driver` instances. +* Added support for Safari 10 safaridriver. safaridriver may be disabled + via tha API, `safari.Options#useLegacyDriver`, to use the safari + extension driver. +* Updated the `lib/proxy` module to support configuring a SOCKS proxy. +* For the `promise.ControlFlow`, fire the "uncaughtException" event in a new + turn of the JS event loop. As a result of this change, any errors thrown by + an event listener will propagate to the global error handler. Previously, + this event was fired with in the context of a (native) promise callback, + causing errors to be silently suppressed in the promise chain. + +### API Changes + +* Added `remote.DriverService.Builder` as a base class for configuring + DriverService instances that run in a child-process. The + `chrome.ServiceBuilder`, `edge.ServiceBuilder`, and `opera.ServiceBuilder` + classes now all extend this base class with browser-specific options. +* For each of the ServiceBuilder clases, renamed `usingPort` and + `withEnvironment` to `setPort` and `setEnvironment`, respectively. +* Renamed `chrome.ServiceBuilder#setUrlBasePath` to `#setPath` +* Changed the signature of the `firefox.Driver` from `(config, flow, executor)` + to `(config, executor, flow)`. +* Exposed the `Condition` and `WebElementCondition` classes from the top-level + `selenium-webdriver` module (these were previously only available from + `lib/webdriver`). + + +### Changes for W3C WebDriver Spec Compliance + +* Updated command mappings for [getting](https://w3c.github.io/webdriver/webdriver-spec.html#get-window-position) + and [setting](https://w3c.github.io/webdriver/webdriver-spec.html#set-window-position) + the window position. + + +## v3.0.0-beta-2 + +### API Changes + +* Moved the `builder.Builder` class into the main module (`selenium-webdriver`). +* Removed the `builder` module. +* Fix `webdriver.WebDriver#setFileDetector` when driving Chrome or Firefox on a + remote machine. + + +## v3.0.0-beta-1 + +* Allow users to set the agent used for HTTP connections through + `builder.Builder#usingHttpAgent()` +* Added new wait conditions: `until.urlIs()`, `until.urlContains()`, + `until.urlMatches()` +* Added work around for [GeckoDriver bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1274924) + raising a type conversion error +* Internal cleanup replacing uses of managed promises with native promises +* Removed the mandatory use of Firefox Dev Edition, when using Marionette driver +* Fixed timeouts' URL +* Properly send HTTP requests when using a WebDriver server proxy +* Properly configure proxies when using the geckodriver +* `http.Executor` now accepts a promised client. The `builder.Builder` class + will now use this instead of a `command.DeferredExecutor` when creating + WebDriver instances. +* For Chrome and Firefox, the `builder.Builder` class will always return an + instanceof `chrome.Driver` and `firefox.Driver`, respectively, even when + configured to use a remote server (from `builder.Builder#usingServer(url)`, + `SELENIUM_REMOTE_URL`, etc). + +### API Changes + +* `promise.Deferred` is no longer a thenable object. +* `Options#addCookie()` now takes a record object instead of 7 individual + parameters. A TypeError will be thrown if addCookie() is called with invalid + arguments. +* When adding cookies, the desired expiry must be provided as a Date or in + _seconds_ since epoch. When retrieving cookies, the expiration is always + returned in seconds. +* Renamed `firefox.Options#useMarionette` to `firefox.Options#useGeckoDriver` +* Removed deprecated modules: + - `selenium-webdriver/error` (use `selenium-webdriver/lib/error`,\ + or the `error` property exported by `selenium-webdriver`) + - `selenium-webdriver/executors` — this was not previously deprecated, but + is no longer used. +* Removed deprecated types: + - `command.DeferredExecutor` — this was not previously deprecated, but is no + longer used. It can be trivially implemented by clients should it be + needed. + - `error.InvalidSessionIdError` (use `error.NoSuchSessionError`) + - `executors.DeferredExecutor` + - `until.Condition` (use `webdriver.Condition`) + - `until.WebElementCondition` (use `webdriver.WebElementCondition`) + - `webdriver.UnhandledAlertError` (use `error.UnexpectedAlertOpenError`) +* Removed deprecated functions: + - `Deferred#cancel()` + - `Deferred#catch()` + - `Deferred#finally()` + - `Deferred#isPending()` + - `Deferred#then()` + - `Promise#thenCatch()` + - `Promise#thenFinally()` + - `WebDriver#isElementPresent()` + - `WebElement#getInnerHtml()` + - `WebElement#getOuterHtml()` + - `WebElement#getRawId()` + - `WebElement#isElementPresent()` +* Removed deprecated properties: + - `WebDriverError#code` + + +## v2.53.2 + +* Changed `io.exists()` to return a rejected promise if the input path is not + a string +* Deprecated `Promise#thenFinally()` - use `Promise#finally()`. The thenFinally + shim added to the promise module in v2.53.0 will be removed in v3.0 + Sorry for the churn! +* FIXED: capabilities serialization now properly handles undefined vs. + false-like values. +* FIXED: properly handle responses from the remote end in + `WebDriver.attachToSession` + +## v2.53.1 + +* FIXED: for consistency with the other language bindings, `remote.FileDetector` + will ignore paths that refer to a directory. + +## v2.53.0 + +### Change Summary + +* Added preliminary support for Marionette, Mozilla's WebDriver implementation + for Firefox. Marionette may be enabled via the API, + `firefox.Options#useMarionette`, or by setting the `SELENIUM_MARIONETTE` + environment variable. +* Moved all logic for parsing and interpreting responses from the remote end + into the individual `command.Executor` implementations. +* For consistency with the other Selenium language bindings, + `WebDriver#isElementPresent()` and `WebElement#isElementPresent()` have + been deprecated. These methods will be removed in v3.0. Use the findElements + command to test for the presence of an element: + + driver.findElements(By.css('.foo')).then(found => !!found.length); +* Added support for W3C-spec compliant servers. +* For consistent naming, deprecating `error.InvalidSessionIdError` in favor of + `error.NoSuchSessionError`. +* Moved the `error` module to `lib/error` so all core modules are co-located. + The top-level `error` module will be removed in v3.0. +* Moved `until.Condition` and `until.WebElementCondition` to the webdriver + module to break a circular dependency. +* Added support for setting the username and password in basic auth pop-up + dialogs (currently IE only). +* Deprecated `WebElement#getInnerHtml()` and `WebEleemnt#getOuterHtml()` +* Deprecated `Promise#thenCatch()` - use `Promise#catch()` instead +* Deprecated `Promise#thenFinally()` - use `promise.thenFinally()` instead +* FIXED: `io.findInPath()` will no longer match against directories that have + the same basename as the target file. +* FIXED: `phantomjs.Driver` now takes a third argument that defines the path to + a log file to use for the phantomjs executable's output. This may be quickly + set at runtime with the `SELENIUM_PHANTOMJS_LOG` environment variable. + +### Changes for W3C WebDriver Spec Compliance + +* Changed `element.sendKeys(...)` to send the key sequence as an array where + each element defines a single key. The legacy wire protocol permits arrays + where each element is a string of arbitrary length. This change is solely + at the protocol level and should have no user-visible effect. + + +## v2.52.0 + +### Notice + +Starting with v2.52.0, each release of selenium-webdriver will support the +latest _minor_ LTS and stable Node releases. All releases between the LTS and +stable release will have best effort support. Further details are available in +the selenium-webdriver package README. + +### Change Summary + +* Add support for Microsoft's Edge web browser +* Added `webdriver.Builder#buildAsync()`, which returns a promise that will be + fulfilled with the newly created WebDriver instance once the associated + browser has been full initialized. This is purely a convenient alternative + to the existing build() method as the WebDriver class will always defer + commands until it has a fully created browser. +* Added `firefox.Profile#setHost()` which may be used to set the host that + the FirefoxDriver's server listens for commands on. The server uses + "localhost" by default. +* Added `promise.Promise#catch()` for API compatibility with native Promises. + `promise.Promise#thenCatch()` is not yet deprecated, but it simply + delegates to `catch`. +* Changed some `io` operations to use native promises. +* Changed `command.Executor#execute()` and `HttpClient#send()` to return + promises instead of using callback passing. +* Replaced the `Serializable` class with an internal, Symbol-defined method. +* Changed the `Capabilities` class to extend the native `Map` type. +* Changed the `Capabilities.has(key)` to only test if a capability has been set + (Map semantics). To check whether the value is true, use `get(key)`. +* Deprecated `executors.DeferredExecutor` in favor of + `lib/command.DeferredExecutor`. +* API documentation is no longer distributed with the npm package, but remains + available at +* Rewrote the `error` module to export an Error subtype for each type of error + defined in the [W3C WebDriver spec](https://w3c.github.io/webdriver/webdriver-spec.html#handling-errors). +* Changed the `http.Request` and `http.Response` classes to store headers in + maps instead of object literals. +* Updated `ws` dependency to version `1.0.1`. +* Removed fluent predicates "is" and "not" from the experimental + `testing/assert` module. +* Wait conditions that locate an element, or that wait on an element's state, + will return a WebElementPromise. +* Lots of internal clean-up to break selenium-webdriver's long standing + dependency on Google's Closure library. + +### Changes for W3C WebDriver Spec Compliance + +* Updated the `By` locators that are not in the W3C spec to delegated to using + CSS selectors: `By.className`, `By.id`, `By.name`, and `By.tagName`. + + +## v2.49-51 + +* _Releases skipped to stay in sync with the rest of the Selenium project_ + + +## v2.48.2 + +* Added `WebElement#takeScreenshot()`. +* More adjustments to promise callback tracking. + +## v2.48.1 + +* FIXED: Adjusted how the control flow tracks promise callbacks to avoid a + potential deadlock. + +## v2.48.0 + +* Node v0.12.x users must run with --harmony. _This is the last release that + will support v0.12.x_ +* FIXED: (Promise/A+ compliance) When a promise is rejected with a thenable, + the promise adopts the thenable as its rejection reason instead of waiting + for it to settle. The previous (incorrect) behavior was hidden by bugs in + the `promises-aplus-tests` compliance test suite that were fixed in version + `2.1.1`. +* FIXED: the `webdriver.promise.ControlFlow` now has a consistent execution + order for tasks/callbacks scheduled in different turns of the JS event loop. + Refer to the `webdriver.promise` documentation for more details. +* FIXED: do not drop user auth from the WebDriver server URL. +* FIXED: a single `firefox.Binary` instance may be used to configure and + launch multiple FirefoxDriver sessions. + + var binary = new firefox.Binary(); + var options = new firefox.Options().setBinary(binary); + var builder = new Builder().setFirefoxOptions(options); + + var driver1 = builder.build(); + var driver2 = builder.build(); + +* FIXED: zip files created for transfer to a remote WebDriver server are no + longer compressed. If the zip contained a file that was already compressed, + the server would return an "invalid code lengths set" error. +* FIXED: Surfaced the `loopback` option to `remote/SeleniumServer`. When set, + the server will be accessed using the current host's loopback address. + +## v2.47.0 + +### Notice + +This is the last release for `selenium-webdriver` that will support ES5. +Subsequent releases will depend on ES6 features that are enabled by +[default](https://nodejs.org/en/docs/es6/) in Node v4.0.0. Node v0.12.x will +continue to be supported, but will require setting the `--harmony` flag. + +### Change Summary + +* Add support for [Node v4.0.0](https://nodejs.org/en/blog/release/v4.0.0/) + * Updated `ws` dependency from `0.7.1` to `0.8.0` +* Bumped the minimum supported version of Node from `0.10.x` to `0.12.x`. This + is in accordance with the Node support policy established in `v2.45.0`. + +## v2.46.1 + +* Fixed internal module loading on Windows. +* Fixed error message format on timeouts for `until.elementLocated()` + and `until.elementsLocated()`. + +## v2.46.0 + +* Exposed a new logging API via the `webdriver.logging` module. For usage, see + `example/logging.js`. +* Added support for using a proxy server for WebDriver commands. + See `Builder#usingWebDriverProxy()` for more info. +* Removed deprecated functions: + * Capabilities#toJSON() + * UnhandledAlertError#getAlert() + * chrome.createDriver() + * phantomjs.createDriver() + * promise.ControlFlow#annotateError() + * promise.ControlFlow#await() + * promise.ControlFlow#clearHistory() + * promise.ControlFlow#getHistory() +* Removed deprecated enum values: `ErrorCode.NO_MODAL_DIALOG_OPEN` and + `ErrorCode.MODAL_DIALOG_OPENED`. Use `ErrorCode.NO_SUCH_ALERT` and + `ErrorCode.UNEXPECTED_ALERT_OPEN`, respectively. +* FIXED: The `promise.ControlFlow` will maintain state for promise chains + generated in a loop. +* FIXED: Correct serialize target elements used in an action sequence. +* FIXED: `promise.ControlFlow#wait()` now has consistent semantics for an + omitted or 0-timeout: it will wait indefinitely. +* FIXED: `remote.DriverService#start()` will now fail if the child process dies + while waiting for the server to start accepting requests. Previously, start + would continue to poll the server address until the timeout expired. +* FIXED: Skip launching Firefox with the `-silent` flag to preheat the profile. + Starting with Firefox 38, this would cause the browser to crash. This step, + which was first introduced for Selenium's java client back with Firefox 2, + no longer appears to be required. +* FIXED: 8564: `firefox.Driver#quit()` will wait for the Firefox process to + terminate before deleting the temporary webdriver profile. This eliminates a + race condition where Firefox would write profile data during shutdown, + causing the `rm -rf` operation on the profile directory to fail. + +## v2.45.1 + +* FIXED: 8548: Task callbacks are once again dropped if the task was cancelled + due to a previously uncaught error within the frame. +* FIXED: 8496: Extended the `chrome.Options` API to cover all configuration + options (e.g. mobile emulation and performance logging) documented on the + ChromeDriver [project site](https://sites.google.com/a/chromium.org/chromedriver/capabilities). + +## v2.45.0 + +### Important Policy Change + +Starting with the 2.45.0 release, selenium-webdriver will support the last +two stable minor releases for Node. For 2.45.0, this means Selenium will +support Node 0.10.x and 0.12.x. Support for the intermediate, un-stable release +(0.11.x) is "best-effort". This policy will be re-evaluated once Node has a +major version release (i.e. 1.0.0). + +### Change Summary + +* Added native browser support for Internet Explorer, Opera 26+, and Safari +* With the release of [Node 0.12.0](http://blog.nodejs.org/2015/02/06/node-v0-12-0-stable/) + (finally!), the minimum supported version of Node is now `0.10.x`. +* The `promise` module is now [Promises/A+](https://promisesaplus.com/) + compliant. The biggest compliance change is that promise callbacks are now + invoked in a future turn of the JS event loop. For example: + + var promise = require('selenium-webdriver').promise; + console.log('start'); + promise.fulfilled().then(function() { + console.log('middle'); + }); + console.log('end'); + + // Output in selenium-webdriver@2.44.0 + // start + // middle + // end + // + // Output in selenium-webdriver@2.45.0 + // start + // end + // middle + + The `promise.ControlFlow` class has been updated to track the asynchronous + breaks required by Promises/A+, so there are no changes to task execution + order. +* Updated how errors are annotated on failures. When a task fails, the + stacktrace from when that task was scheduled is appended to the rejection + reason with a `From: ` prefix (if it is an Error object). For example: + + var driver = new webdriver.Builder().forBrowser('chrome').build(); + driver.get('http://www.google.com/ncr'); + driver.call(function() { + driver.wait(function() { + return driver.isElementPresent(webdriver.By.id('not-there')); + }, 2000, 'element not found'); + }); + + This code will fail an error like: + + Error: element not found + Wait timed out after 2002ms + at + From: Task: element not found + at + From: Task: WebDriver.call(function) + at + +* Changed the format of strings returned by `promise.ControlFlow#getSchedule`. + This function now accepts a boolean to control whether the returned string + should include the stacktraces for when each task was scheduled. +* Deprecating `promise.ControlFlow#getHistory`, + `promise.ControlFlow#clearHistory`, and `promise.ControlFlow#annotateError`. + These functions were all intended for internal use and are no longer + necessary, so they have been made no-ops. +* `WebDriver.wait()` may now be used to wait for a promise to resolve, with + an optional timeout. Refer to the API documentation for more information. +* Added support for copying files to a remote Selenium via `sendKeys` to test + file uploads. Refer to the API documentation for more information. Sample + usage included in `test/upload_test.js` +* Expanded the interactions API to include touch actions. + See `WebDriver.touchActions()`. +* FIXED: 8380: `firefox.Driver` will delete its temporary profile on `quit`. +* FIXED: 8306: Stack overflow in promise callbacks eliminated. +* FIXED: 8221: Added support for defining custom command mappings. Includes + support for PhantomJS's `executePhantomJS` (requires PhantomJS 1.9.7 or + GhostDriver 1.1.0). +* FIXED: 8128: When the FirefoxDriver marshals an object to the page for + `executeScript`, it defines additional properties (required by the driver's + implementation). These properties will no longer be enumerable and should + be omitted (i.e. they won't show up in JSON.stringify output). +* FIXED: 8094: The control flow will no longer deadlock when a task returns + a promise that depends on the completion of sub-tasks. + +## v2.44.0 + +* Added the `until` module, which defines common explicit wait conditions. + Sample usage: + + var firefox = require('selenium-webdriver/firefox'), + until = require('selenium-webdriver/until'); + + var driver = new firefox.Driver(); + driver.get('http://www.google.com/ncr'); + driver.wait(until.titleIs('Google Search'), 1000); + +* FIXED: 8000: `Builder.forBrowser()` now accepts an empty string since some + WebDriver implementations ignore the value. A value must still be specified, + however, since it is a required field in WebDriver's wire protocol. +* FIXED: 7994: The `stacktrace` module will not modify stack traces if the + initial parse fails (e.g. the user defined `Error.prepareStackTrace`) +* FIXED: 5855: Added a module (`until`) that defines several common conditions + for use with explicit waits. See updated examples for usage. + +## v2.43.5 + +* FIXED: 7905: `Builder.usingServer(url)` once again returns `this` for + chaining. + +## v2.43.2-4 + +* No changes; version bumps while attempting to work around an issue with + publishing to npm (a version string may only be used once). + +## v2.43.1 + +* Fixed an issue with flakiness when setting up the Firefox profile that could + prevent the driver from initializing properly. + +## v2.43.0 + +* Added native support for Firefox - the Java Selenium server is no longer + required. +* Added support for generator functions to `ControlFlow#execute` and + `ControlFlow#wait`. For more information, see documentation on + `webdriver.promise.consume`. Requires harmony support (run with + `node --harmony-generators` in `v0.11.x`). +* Various improvements to the `Builder` API. Notably, the `build()` function + will no longer default to attempting to use a server at + `http://localhost:4444/wd/hub` if it cannot start a browser directly - + you must specify the WebDriver server with `usingServer(url)`. You can + also set the target browser and WebDriver server through a pair of + environment variables. See the documentation on the `Builder` constructor + for more information. +* For consistency with the other language bindings, added browser specific + classes that can be used to start a browser without the builder. + + var webdriver = require('selenium-webdriver') + chrome = require('selenium-webdriver/chrome'); + + // The following are equivalent. + var driver1 = new webdriver.Builder().forBrowser('chrome').build(); + var driver2 = new chrome.Driver(); + +* Promise A+ compliance: a promise may no longer resolve to itself. +* For consistency with other language bindings, deprecated + `UnhandledAlertError#getAlert` and added `#getAlertText`. + `getAlert` will be removed in `2.45.0`. +* FIXED: 7641: Deprecated `ErrorCode.NO_MODAL_DIALOG_OPEN` and + `ErrorCode.MODAL_DIALOG_OPENED` in favor of the new + `ErrorCode.NO_SUCH_ALERT` and `ErrorCode.UNEXPECTED_ALERT_OPEN`, + respectively. +* FIXED: 7563: Mocha integration no longer disables timeouts. Default Mocha + timeouts apply (2000 ms) and may be changed using `this.timeout(ms)`. +* FIXED: 7470: Make it easier to create WebDriver instances in custom flows for + parallel execution. + +## v2.42.1 + +* FIXED: 7465: Fixed `net.getLoopbackAddress` on Windows +* FIXED: 7277: Support `done` callback in Mocha's BDD interface +* FIXED: 7156: `Promise#thenFinally` should not suppress original error + +## v2.42.0 + +* Removed deprecated functions `Promise#addCallback()`, + `Promise#addCallbacks()`, `Promise#addErrback()`, and `Promise#addBoth()`. +* Fail with a more descriptive error if the server returns a malformed redirect +* FIXED: 7300: Connect to ChromeDriver using the loopback address since + ChromeDriver 2.10.267517 binds to localhost by default. +* FIXED: 7339: Preserve wrapped test function's string representation for + Mocha's BDD interface. + +## v2.41.0 + +* FIXED: 7138: export logging API from webdriver module. +* FIXED: 7105: beforeEach/it/afterEach properly bind `this` for Mocha tests. + +## v2.40.0 + +* API documentation is now included in the docs directory. +* Added utility functions for working with an array of promises: + `promise.all`, `promise.map`, and `promise.filter` +* Introduced `Promise#thenCatch()` and `Promise#thenFinally()`. +* Deprecated `Promise#addCallback()`, `Promise#addCallbacks()`, + `Promise#addErrback()`, and `Promise#addBoth()`. +* Removed deprecated function `webdriver.WebDriver#getCapability`. +* FIXED: 6826: Added support for custom locators. + +## v2.39.0 + +* Version bump to stay in sync with the Selenium project. + +## v2.38.1 + +* FIXED: 6686: Changed `webdriver.promise.Deferred#cancel()` to silently no-op + if the deferred has already been resolved. + +## v2.38.0 + +* When a promise is rejected, always annotate the stacktrace with the parent + flow state so users can identify the source of an error. +* Updated tests to reflect features not working correctly in the SafariDriver + (cookie management and proxy support; see issues 5051, 5212, and 5503) +* FIXED: 6284: For mouse moves, correctly omit the x/y offsets if not + specified as a function argument (instead of passing (0,0)). +* FIXED: 6471: Updated documentation on `webdriver.WebElement#getAttribute` +* FIXED: 6612: On Unix, use the default IANA ephemeral port range if unable to + retrieve the current system's port range. +* FIXED: 6617: Avoid triggering the node debugger when initializing the + stacktrace module. +* FIXED: 6627: Safely rebuild chrome.Options from a partial JSON spec. + +## v2.37.0 + +* FIXED: 6346: The remote.SeleniumServer class now accepts JVM arguments using + the `jvmArgs` option. + +## v2.36.0 + +* _Release skipped to stay in sync with main Selenium project._ + +## v2.35.2 + +* FIXED: 6200: Pass arguments to the Selenium server instead of to the JVM. + +## v2.35.1 + +* FIXED: 6090: Changed example scripts to use chromedriver. + +## v2.35.0 + +* Version bump to stay in sync with the Selenium project. + +## v2.34.1 + +* FIXED: 6079: The parent process should not wait for spawn driver service + processes (chromedriver, phantomjs, etc.) + +## v2.34.0 + +* Added the `selenium-webdriver/testing/assert` module. This module + simplifies writing assertions against promised values (see + example in module documentation). +* Added the `webdriver.Capabilities` class. +* Added native support for the ChromeDriver. When using the `Builder`, + requesting chrome without specifying a remote server URL will default to + the native ChromeDriver implementation. The + [ChromeDriver server](https://code.google.com/p/chromedriver/downloads/list) + must be downloaded separately. + + // Will start ChromeDriver locally. + var driver = new webdriver.Builder(). + withCapabilities(webdriver.Capabilities.chrome()). + build(); + + // Will start ChromeDriver using the remote server. + var driver = new webdriver.Builder(). + withCapabilities(webdriver.Capabilities.chrome()). + usingServer('http://server:1234/wd/hub'). + build(); + +* Added support for configuring proxies through the builder. For examples, see + `selenium-webdriver/test/proxy_test`. +* Added native support for PhantomJS. +* Changed signature of `SeleniumServer` to `SeleniumServer(jar, options)`. +* Tests are now included in the npm published package. See `README.md` for + execution instructions +* Removed the deprecated `webdriver.Deferred#resolve` and + `webdriver.promise.resolved` functions. +* Removed the ability to connect to an existing session from the Builder. This + feature is intended for use with the browser-based client. + +## v2.33.0 + +* Added support for WebDriver's logging API +* FIXED: 5511: Added webdriver.manage().timeouts().pageLoadTimeout(ms) + +## v2.32.1 + +* FIXED: 5541: Added missing return statement for windows in + `portprober.findFreePort()` + +## v2.32.0 + +* Added the `selenium-webdriver/testing` package, which provides a basic + framework for writing tests using Mocha. See + `selenium-webdriver/example/google_search_test.js` for usage. +* For Promises/A+ compatibility, backing out the change in 2.30.0 that ensured + rejections were always Error objects. Rejection reasons are now left as is. +* Removed deprecated functions originally scheduled for removal in 2.31.0 + * promise.Application.getInstance() + * promise.ControlFlow#schedule() + * promise.ControlFlow#scheduleTimeout() + * promise.ControlFlow#scheduleWait() +* Renamed some functions for consistency with Promises/A+ terminology. The + original functions have been deprecated and will be removed in 2.34.0: + * promise.resolved() -> promise.fulfilled() + * promise.Deferred#resolve() -> promise.Deferred#fulfill() +* FIXED: remote.SeleniumServer#stop now shuts down within the active control + flow, allowing scripts to finish. Use #kill to shutdown immediately. +* FIXED: 5321: cookie deletion commands + +## v2.31.0 + +* Added an example script. +* Added a class for controlling the standalone Selenium server (server +available separately) +* Added a portprober for finding free ports +* FIXED: WebElements now belong to the same flow as their parent driver. + +## v2.30.0 + +* Ensures promise rejections are always Error values. +* Version bump to keep in sync with the Selenium project. + +## v2.29.1 + +* Fixed a bug that could lead to an infinite loop. +* Added a README.md + +## v2.29.0 + +* Initial release for npm: + + npm install selenium-webdriver diff --git a/node_modules/selenium-webdriver/LICENSE b/node_modules/selenium-webdriver/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/node_modules/selenium-webdriver/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/selenium-webdriver/NOTICE b/node_modules/selenium-webdriver/NOTICE new file mode 100644 index 000000000..274450355 --- /dev/null +++ b/node_modules/selenium-webdriver/NOTICE @@ -0,0 +1,2 @@ +Copyright 2011-2016 Software Freedom Conservancy +Copyright 2004-2011 Selenium committers diff --git a/node_modules/selenium-webdriver/README.md b/node_modules/selenium-webdriver/README.md new file mode 100644 index 000000000..0b70aeddc --- /dev/null +++ b/node_modules/selenium-webdriver/README.md @@ -0,0 +1,239 @@ +# selenium-webdriver + +Selenium is a browser automation library. Most often used for testing +web-applications, Selenium may be used for any task that requires automating +interaction with the browser. + +## Installation + +Selenium may be installed via npm with + + npm install selenium-webdriver + +You will need to download additional components to work with each of the major +browsers. The drivers for Chrome, Firefox, Safari, PhantomJS, Opera, and +Microsoft's IE and Edge web browsers are all standalone executables that should +be placed on your system [PATH]. Apple's safaridriver is shipped with +Safari 10 in macOS Sierra. You will need to enable Remote Automation in +the Develop menu of Safari 10 before testing. + +> **NOTE:** Mozilla's [geckodriver] is only required for Firefox 47+. +> Everything you need for Firefox 38-46 is included with this package. + +> **NOTE:** Apple's [safaridriver] is preferred for testing Safari 10+. +> To test versions of Safari prior to Safari 10, The +> [SafariDriver.safariextz][release] browser extension should be +> installed in your browser before using Selenium. We recommend +> disabling the extension when using the browser without Selenium +> or installing the extension in a profile only used for testing. + + +| Browser | Component | +| ----------------- | ---------------------------------- | +| Chrome | [chromedriver(.exe)][chrome] | +| Internet Explorer | [IEDriverServer.exe][release] | +| Edge | [MicrosoftWebDriver.msi][edge] | +| Firefox 47+ | [geckodriver(.exe)][geckodriver] | +| PhantomJS | [phantomjs(.exe)][phantomjs] | +| Opera | [operadriver(.exe)][opera] | +| Safari | [safaridriver] | + +## Usage + +The sample below and others are included in the `example` directory. You may +also find the tests for selenium-webdriver informative. + + var webdriver = require('selenium-webdriver'), + By = webdriver.By, + until = webdriver.until; + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + + driver.get('http://www.google.com/ncr'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + driver.quit(); + +### Using the Builder API + +The `Builder` class is your one-stop shop for configuring new WebDriver +instances. Rather than clutter your code with branches for the various browsers, +the builder lets you set all options in one flow. When you call +`Builder#build()`, all options irrelevant to the selected browser are dropped: + + var webdriver = require('selenium-webdriver'), + chrome = require('selenium-webdriver/chrome'), + firefox = require('selenium-webdriver/firefox'); + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .setChromeOptions(/* ... */) + .setFirefoxOptions(/* ... */) + .build(); + +Why would you want to configure options irrelevant to the target browser? The +`Builder`'s API defines your _default_ configuration. You can change the target +browser at runtime through the `SELENIUM_BROWSER` environment variable. For +example, the `example/google_search.js` script is configured to run against +Firefox. You can run the example against other browsers just by changing the +runtime environment + + # cd node_modules/selenium-webdriver + node example/google_search + SELENIUM_BROWSER=chrome node example/google_search + SELENIUM_BROWSER=safari node example/google_search + +### The Standalone Selenium Server + +The standalone Selenium Server acts as a proxy between your script and the +browser-specific drivers. The server may be used when running locally, but it's +not recommend as it introduces an extra hop for each request and will slow +things down. The server is required, however, to use a browser on a remote host +(most browser drivers, like the IEDriverServer, do not accept remote +connections). + +To use the Selenium Server, you will need to install the +[JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html) and +download the latest server from [Selenium][release]. Once downloaded, run the +server with + + java -jar selenium-server-standalone-2.45.0.jar + +You may configure your tests to run against a remote server through the Builder +API: + + var driver = new webdriver.Builder() + .forBrowser('firefox') + .usingServer('http://localhost:4444/wd/hub') + .build(); + +Or change the Builder's configuration at runtime with the `SELENIUM_REMOTE_URL` +environment variable: + + SELENIUM_REMOTE_URL="http://localhost:4444/wd/hub" node script.js + +You can experiment with these options using the `example/google_search.js` +script provided with `selenium-webdriver`. + +## Documentation + +API documentation is available online from the [Selenium project][api]. +Additional resources include + +- the #selenium channel on freenode IRC +- the [selenium-users@googlegroups.com][users] list +- [SeleniumHQ](http://www.seleniumhq.org/docs/) documentation + +## Contributing + +Contributions are accepted either through [GitHub][gh] pull requests or patches +via the [Selenium issue tracker][issues]. You must sign our +[Contributor License Agreement][cla] before your changes will be accepted. + +## Node Support Policy + +Each version of selenium-webdriver will support the latest _semver-minor_ +version of the [LTS] and stable Node releases. All _semver-major_ & +_semver-minor_ versions between the LTS and stable release will have "best +effort" support. Following a Selenium release, any _semver-minor_ Node releases +will also have "best effort" support. Releases older than the latest LTS, +_semver-major_ releases, and all unstable release branches (e.g. "v.Next") +are considered strictly unsupported. + +For example, suppose the current LTS and stable releases are v4.2.4 and v5.4.1, +respectively. Then a Selenium release would have the following support levels: + +| Version | Support | +| ------- | ------------- | +| <= 4.1 | _unsupported_ | +| 4.2 | supported | +| 5.0-3 | best effort | +| 5.4 | supported | +| >= 5.5 | best effort | +| v.Next | _unsupported_ | + +### Support Level Definitions + +- _supported:_ A selenium-webdriver release will be API compatible with the + platform API, without the use of runtime flags. + +- _best effort:_ Bugs will be investigated as time permits. API compatibility is + only guaranteed where required by a _supported_ release. This effectively + means the adoption of new JS features, such as ES2015 modules, will depend + on what is supported in Node's LTS. + +- _unsupported:_ Bug submissions will be closed as will-not-fix and API + compatibility is not guaranteed. + +### Projected Support Schedule + +If Node releases a new [LTS] each October and a new major version every 6 +months, the support window for selenium-webdriver will be roughly: + +| Date | LTS | Stable | +| --------- | ---: | -----: | +| (current) | 4.2 | 5.0 | +| 2016-04 | 4.2 | 6.0 | +| 2016-10 | 6.0 | 7.0 | +| 2017-04 | 6.0 | 8.0 | +| 2017-10 | 8.0 | 9.0 | + +## Issues + +Please report any issues using the [Selenium issue tracker][issues]. When using +the issue tracker + +- __Do__ include a detailed description of the problem. +- __Do__ include a link to a [gist](http://gist.github.com/) with any + interesting stack traces/logs (you may also attach these directly to the bug + report). +- __Do__ include a [reduced test case][reduction]. Reporting "unable to find + element on the page" is _not_ a valid report - there's nothing for us to + look into. Expect your bug report to be closed if you do not provide enough + information for us to investigate. +- __Do not__ use the issue tracker to submit basic help requests. All help + inquiries should be directed to the [user forum][users] or #selenium IRC + channel. +- __Do not__ post empty "I see this too" or "Any updates?" comments. These + provide no additional information and clutter the log. +- __Do not__ report regressions on closed bugs as they are not actively + monitored for upates (especially bugs that are >6 months old). Please open a + new issue and reference the original bug in your report. + +## License + +Licensed to the Software Freedom Conservancy (SFC) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The SFC licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +[LTS]: https://github.com/nodejs/LTS +[PATH]: http://en.wikipedia.org/wiki/PATH_%28variable%29 +[api]: http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/ +[cla]: http://goo.gl/qC50R +[chrome]: http://chromedriver.storage.googleapis.com/index.html +[gh]: https://github.com/SeleniumHQ/selenium/ +[issues]: https://github.com/SeleniumHQ/selenium/issues +[opera]: https://github.com/operasoftware/operachromiumdriver/releases +[phantomjs]: http://phantomjs.org/ +[edge]: http://go.microsoft.com/fwlink/?LinkId=619687 +[geckodriver]: https://github.com/mozilla/geckodriver/releases/ +[reduction]: http://www.webkit.org/quality/reduction.html +[release]: http://selenium-release.storage.googleapis.com/index.html +[users]: https://groups.google.com/forum/#!forum/selenium-users +[safaridriver]: https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_0.html#//apple_ref/doc/uid/TP40014305-CH11-DontLinkElementID_28 diff --git a/node_modules/selenium-webdriver/chrome.js b/node_modules/selenium-webdriver/chrome.js new file mode 100644 index 000000000..13d7b7bbf --- /dev/null +++ b/node_modules/selenium-webdriver/chrome.js @@ -0,0 +1,749 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for the Chrome + * web browser. Before using this module, you must download the latest + * [ChromeDriver release] and ensure it can be found on your system [PATH]. + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link selenium-webdriver/remote.DriverService remote.DriverService} + * that manages the [ChromeDriver] child process. + * + * 2. {@linkplain Options}: defines configuration options for each new Chrome + * session, such as which {@linkplain Options#setProxy proxy} to use, + * what {@linkplain Options#addExtensions extensions} to install, or + * what {@linkplain Options#addArguments command-line switches} to use when + * starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session with a clean user profile (unless otherwise + * configured through the {@link Options} class). + * + * __Customizing the ChromeDriver Server__ + * + * By default, every Chrome session will use a single driver service, which is + * started the first time a {@link Driver} instance is created and terminated + * when this process exits. The default service will inherit its environment + * from the current process and direct all output to /dev/null. You may obtain + * a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * let chrome = require('selenium-webdriver/chrome'); + * + * let service = new chrome.ServiceBuilder() + * .loggingTo('/my/log/file.txt') + * .enableVerboseLogging() + * .build(); + * + * let options = new chrome.Options(); + * // configure browser options ... + * + * let driver = new chrome.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start Chrome using the + * {@link selenium-webdriver.Builder}. + * + * __Working with Android__ + * + * The [ChromeDriver][android] supports running tests on the Chrome browser as + * well as [WebView apps][webview] starting in Android 4.4 (KitKat). In order to + * work with Android, you must first start the adb + * + * adb start-server + * + * By default, adb will start on port 5037. You may change this port, but this + * will require configuring a [custom server](#custom-server) that will connect + * to adb on the {@linkplain ServiceBuilder#setAdbPort correct port}: + * + * let service = new chrome.ServiceBuilder() + * .setAdbPort(1234) + * build(); + * // etc. + * + * The ChromeDriver may be configured to launch Chrome on Android using + * {@link Options#androidChrome()}: + * + * let driver = new Builder() + * .forBrowser('chrome') + * .setChromeOptions(new chrome.Options().androidChrome()) + * .build(); + * + * Alternatively, you can configure the ChromeDriver to launch an app with a + * Chrome-WebView by setting the {@linkplain Options#androidActivity + * androidActivity} option: + * + * let driver = new Builder() + * .forBrowser('chrome') + * .setChromeOptions(new chrome.Options() + * .androidPackage('com.example') + * .androidActivity('com.example.Activity')) + * .build(); + * + * [Refer to the ChromeDriver site] for more information on using the + * [ChromeDriver with Android][android]. + * + * [ChromeDriver]: https://sites.google.com/a/chromium.org/chromedriver/ + * [ChromeDriver release]: http://chromedriver.storage.googleapis.com/index.html + * [PATH]: http://en.wikipedia.org/wiki/PATH_%28variable%29 + * [android]: https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android + * [webview]: https://developer.chrome.com/multidevice/webview/overview + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const http = require('./http'), + io = require('./io'), + Capabilities = require('./lib/capabilities').Capabilities, + Capability = require('./lib/capabilities').Capability, + command = require('./lib/command'), + logging = require('./lib/logging'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +/** + * Name of the ChromeDriver executable. + * @type {string} + * @const + */ +const CHROMEDRIVER_EXE = + process.platform === 'win32' ? 'chromedriver.exe' : 'chromedriver'; + + +/** + * Custom command names supported by ChromeDriver. + * @enum {string} + */ +const Command = { + LAUNCH_APP: 'launchApp' +}; + + +/** + * Creates a command executor with support for ChromeDriver's custom commands. + * @param {!Promise} url The server's URL. + * @return {!command.Executor} The new command executor. + */ +function createExecutor(url) { + let client = url.then(url => new http.HttpClient(url)); + let executor = new http.Executor(client); + configureExecutor(executor); + return executor; +} + + +/** + * Configures the given executor with Chrome-specific commands. + * @param {!http.Executor} executor the executor to configure. + */ +function configureExecutor(executor) { + executor.defineCommand( + Command.LAUNCH_APP, + 'POST', + '/session/:sessionId/chromium/launch_app'); +} + + +/** + * Creates {@link selenium-webdriver/remote.DriverService} instances that manage + * a [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) + * server in a child process. + */ +class ServiceBuilder extends remote.DriverService.Builder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the chromedriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the chromedriver + * cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(CHROMEDRIVER_EXE, true); + if (!exe) { + throw Error( + 'The ChromeDriver could not be found on the current PATH. Please ' + + 'download the latest version of the ChromeDriver from ' + + 'http://chromedriver.storage.googleapis.com/index.html and ensure ' + + 'it can be found on your PATH.'); + } + + super(exe); + this.setLoopback(true); // Required + } + + /** + * Sets which port adb is listening to. _The ChromeDriver will connect to adb + * if an {@linkplain Options#androidPackage Android session} is requested, but + * adb **must** be started beforehand._ + * + * @param {number} port Which port adb is running on. + * @return {!ServiceBuilder} A self reference. + */ + setAdbPort(port) { + return this.addArguments('--adb-port=' + port); + } + + /** + * Sets the path of the log file the driver should log to. If a log file is + * not specified, the driver will log to stderr. + * @param {string} path Path of the log file to use. + * @return {!ServiceBuilder} A self reference. + */ + loggingTo(path) { + return this.addArguments('--log-path=' + path); + } + + /** + * Enables verbose logging. + * @return {!ServiceBuilder} A self reference. + */ + enableVerboseLogging() { + return this.addArguments('--verbose'); + } + + /** + * Sets the number of threads the driver should use to manage HTTP requests. + * By default, the driver will use 4 threads. + * @param {number} n The number of threads to use. + * @return {!ServiceBuilder} A self reference. + */ + setNumHttpThreads(n) { + return this.addArguments('--http-threads=' + n); + } + + /** + * @override + */ + setPath(path) { + super.setPath(path); + return this.addArguments('--url-base=' + path); + } +} + + + +/** @type {remote.DriverService} */ +let defaultService = null; + + +/** + * Sets the default service to use for new ChromeDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured ChromeDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default ChromeDriver service. If such a service has not been + * configured, one will be constructed using the default configuration for + * a ChromeDriver executable found on the system PATH. + * @return {!remote.DriverService} The default ChromeDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * @type {string} + * @const + */ +let OPTIONS_CAPABILITY_KEY = 'chromeOptions'; + + +/** + * Class for managing ChromeDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object} */ + this.options_ = {}; + + /** @private {!Array<(string|!Buffer)>} */ + this.extensions_ = []; + + /** @private {?logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?./lib/capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the ChromeDriver specific options from the given capabilities + * object. + * @param {!Capabilities} caps The capabilities object. + * @return {!Options} The ChromeDriver options. + */ + static fromCapabilities(caps) { + let options = new Options(); + + let o = caps.get(OPTIONS_CAPABILITY_KEY); + if (o instanceof Options) { + options = o; + } else if (o) { + options. + addArguments(o.args || []). + addExtensions(o.extensions || []). + detachDriver(o.detach). + excludeSwitches(o.excludeSwitches || []). + setChromeBinaryPath(o.binary). + setChromeLogFile(o.logPath). + setChromeMinidumpPath(o.minidumpPath). + setLocalState(o.localState). + setMobileEmulation(o.mobileEmulation). + setUserPreferences(o.prefs). + setPerfLoggingPrefs(o.perfLoggingPrefs); + } + + if (caps.has(Capability.PROXY)) { + options.setProxy(caps.get(Capability.PROXY)); + } + + if (caps.has(Capability.LOGGING_PREFS)) { + options.setLoggingPrefs( + caps.get(Capability.LOGGING_PREFS)); + } + + return options; + } + + /** + * Add additional command line arguments to use when launching the Chrome + * browser. Each argument may be specified with or without the "--" prefix + * (e.g. "--foo" and "foo"). Arguments with an associated value should be + * delimited by an "=": "foo=bar". + * @param {...(string|!Array)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + let args = this.options_.args || []; + args = args.concat.apply(args, arguments); + if (args.length) { + this.options_.args = args; + } + return this; + } + + /** + * List of Chrome command line switches to exclude that ChromeDriver by default + * passes when starting Chrome. Do not prefix switches with "--". + * + * @param {...(string|!Array)} var_args The switches to exclude. + * @return {!Options} A self reference. + */ + excludeSwitches(var_args) { + let switches = this.options_.excludeSwitches || []; + switches = switches.concat.apply(switches, arguments); + if (switches.length) { + this.options_.excludeSwitches = switches; + } + return this; + } + + /** + * Add additional extensions to install when launching Chrome. Each extension + * should be specified as the path to the packed CRX file, or a Buffer for an + * extension. + * @param {...(string|!Buffer|!Array<(string|!Buffer)>)} var_args The + * extensions to add. + * @return {!Options} A self reference. + */ + addExtensions(var_args) { + this.extensions_ = + this.extensions_.concat.apply(this.extensions_, arguments); + return this; + } + + /** + * Sets the path to the Chrome binary to use. On Mac OS X, this path should + * reference the actual Chrome executable, not just the application binary + * (e.g. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"). + * + * The binary path be absolute or relative to the chromedriver server + * executable, but it must exist on the machine that will launch Chrome. + * + * @param {string} path The path to the Chrome binary to use. + * @return {!Options} A self reference. + */ + setChromeBinaryPath(path) { + this.options_.binary = path; + return this; + } + + /** + * Sets whether to leave the started Chrome browser running if the controlling + * ChromeDriver service is killed before {@link webdriver.WebDriver#quit()} is + * called. + * @param {boolean} detach Whether to leave the browser running if the + * chromedriver service is killed before the session. + * @return {!Options} A self reference. + */ + detachDriver(detach) { + this.options_.detach = detach; + return this; + } + + /** + * Sets the user preferences for Chrome's user profile. See the "Preferences" + * file in Chrome's user data directory for examples. + * @param {!Object} prefs Dictionary of user preferences to use. + * @return {!Options} A self reference. + */ + setUserPreferences(prefs) { + this.options_.prefs = prefs; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {!logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPrefs(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the performance logging preferences. Options include: + * + * - `enableNetwork`: Whether or not to collect events from Network domain. + * - `enablePage`: Whether or not to collect events from Page domain. + * - `enableTimeline`: Whether or not to collect events from Timeline domain. + * Note: when tracing is enabled, Timeline domain is implicitly disabled, + * unless `enableTimeline` is explicitly set to true. + * - `tracingCategories`: A comma-separated string of Chrome tracing + * categories for which trace events should be collected. An unspecified + * or empty string disables tracing. + * - `bufferUsageReportingInterval`: The requested number of milliseconds + * between DevTools trace buffer usage events. For example, if 1000, then + * once per second, DevTools will report how full the trace buffer is. If + * a report indicates the buffer usage is 100%, a warning will be issued. + * + * @param {{enableNetwork: boolean, + * enablePage: boolean, + * enableTimeline: boolean, + * tracingCategories: string, + * bufferUsageReportingInterval: number}} prefs The performance + * logging preferences. + * @return {!Options} A self reference. + */ + setPerfLoggingPrefs(prefs) { + this.options_.perfLoggingPrefs = prefs; + return this; + } + + /** + * Sets preferences for the "Local State" file in Chrome's user data + * directory. + * @param {!Object} state Dictionary of local state preferences. + * @return {!Options} A self reference. + */ + setLocalState(state) { + this.options_.localState = state; + return this; + } + + /** + * Sets the name of the activity hosting a Chrome-based Android WebView. This + * option must be set to connect to an [Android WebView]( + * https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android) + * + * @param {string} name The activity name. + * @return {!Options} A self reference. + */ + androidActivity(name) { + this.options_.androidActivity = name; + return this; + } + + /** + * Sets the device serial number to connect to via ADB. If not specified, the + * ChromeDriver will select an unused device at random. An error will be + * returned if all devices already have active sessions. + * + * @param {string} serial The device serial number to connect to. + * @return {!Options} A self reference. + */ + androidDeviceSerial(serial) { + this.options_.androidDeviceSerial = serial; + return this; + } + + /** + * Configures the ChromeDriver to launch Chrome on Android via adb. This + * function is shorthand for + * {@link #androidPackage options.androidPackage('com.android.chrome')}. + * @return {!Options} A self reference. + */ + androidChrome() { + return this.androidPackage('com.android.chrome'); + } + + /** + * Sets the package name of the Chrome or WebView app. + * + * @param {?string} pkg The package to connect to, or `null` to disable Android + * and switch back to using desktop Chrome. + * @return {!Options} A self reference. + */ + androidPackage(pkg) { + this.options_.androidPackage = pkg; + return this; + } + + /** + * Sets the process name of the Activity hosting the WebView (as given by + * `ps`). If not specified, the process name is assumed to be the same as + * {@link #androidPackage}. + * + * @param {string} processName The main activity name. + * @return {!Options} A self reference. + */ + androidProcess(processName) { + this.options_.androidProcess = processName; + return this; + } + + /** + * Sets whether to connect to an already-running instead of the specified + * {@linkplain #androidProcess app} instead of launching the app with a clean + * data directory. + * + * @param {boolean} useRunning Whether to connect to a running instance. + * @return {!Options} A self reference. + */ + androidUseRunningApp(useRunning) { + this.options_.androidUseRunningApp = useRunning; + return this; + } + + /** + * Sets the path to Chrome's log file. This path should exist on the machine + * that will launch Chrome. + * @param {string} path Path to the log file to use. + * @return {!Options} A self reference. + */ + setChromeLogFile(path) { + this.options_.logPath = path; + return this; + } + + /** + * Sets the directory to store Chrome minidumps in. This option is only + * supported when ChromeDriver is running on Linux. + * @param {string} path The directory path. + * @return {!Options} A self reference. + */ + setChromeMinidumpPath(path) { + this.options_.minidumpPath = path; + return this; + } + + /** + * Configures Chrome to emulate a mobile device. For more information, refer + * to the ChromeDriver project page on [mobile emulation][em]. Configuration + * options include: + * + * - `deviceName`: The name of a pre-configured [emulated device][devem] + * - `width`: screen width, in pixels + * - `height`: screen height, in pixels + * - `pixelRatio`: screen pixel ratio + * + * __Example 1: Using a Pre-configured Device__ + * + * let options = new chrome.Options().setMobileEmulation( + * {deviceName: 'Google Nexus 5'}); + * + * let driver = new chrome.Driver(options); + * + * __Example 2: Using Custom Screen Configuration__ + * + * let options = new chrome.Options().setMobileEmulation({ + * width: 360, + * height: 640, + * pixelRatio: 3.0 + * }); + * + * let driver = new chrome.Driver(options); + * + * + * [em]: https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation + * [devem]: https://developer.chrome.com/devtools/docs/device-mode + * + * @param {?({deviceName: string}| + * {width: number, height: number, pixelRatio: number})} config The + * mobile emulation configuration, or `null` to disable emulation. + * @return {!Options} A self reference. + */ + setMobileEmulation(config) { + this.options_.mobileEmulation = config; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {./lib/capabilities.ProxyConfig} proxy The proxy configuration to + * use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link Capabilities} object. + * @param {Capabilities=} opt_capabilities The capabilities to merge + * these options into, if any. + * @return {!Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + let caps = opt_capabilities || Capabilities.chrome(); + caps. + set(Capability.PROXY, this.proxy_). + set(Capability.LOGGING_PREFS, this.logPrefs_). + set(OPTIONS_CAPABILITY_KEY, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {!Object} The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + let json = {}; + for (let key in this.options_) { + if (this.options_[key] != null) { + json[key] = this.options_[key]; + } + } + if (this.extensions_.length) { + json.extensions = this.extensions_.map(function(extension) { + if (Buffer.isBuffer(extension)) { + return extension.toString('base64'); + } + return io.read(/** @type {string} */(extension)) + .then(buffer => buffer.toString('base64')); + }); + } + return json; + } +} + + +/** + * Creates a new WebDriver client for Chrome. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@linkplain #getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + * @param {http.Executor=} opt_executor A pre-configured command executor that + * should be used to send commands to the remote end. The provided + * executor should not be reused with other clients as its internal + * command mappings will be updated to support Chrome-specific commands. + * + * You may provide either a custom executor or a driver service, but not both. + * + * @throws {Error} if both `opt_service` and `opt_executor` are provided. + */ + constructor(opt_config, opt_service, opt_flow, opt_executor) { + if (opt_service && opt_executor) { + throw Error( + 'Either a DriverService or Executor may be provided, but not both'); + } + + let executor; + if (opt_executor) { + executor = opt_executor; + configureExecutor(executor); + } else { + let service = opt_service || getDefaultService(); + executor = createExecutor(service.start()); + } + + let caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || Capabilities.chrome()); + + let driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} + + /** + * Schedules a command to launch Chrome App with given ID. + * @param {string} id ID of the App to launch. + * @return {!promise.Promise} A promise that will be resolved + * when app is launched. + */ + launchApp(id) { + return this.schedule( + new command.Command(Command.LAUNCH_APP).setParameter('id', id), + 'Driver.launchApp()'); + } +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/node_modules/selenium-webdriver/edge.js b/node_modules/selenium-webdriver/edge.js new file mode 100644 index 000000000..9685a2c21 --- /dev/null +++ b/node_modules/selenium-webdriver/edge.js @@ -0,0 +1,305 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for + * Microsoft's Edge web browser. Before using this module, + * you must download and install the latest + * [MicrosoftEdgeDriver](http://go.microsoft.com/fwlink/?LinkId=619687) server. + * Ensure that the MicrosoftEdgeDriver is on your + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). + * + * There are three primary classes exported by this module: + * + * 1. {@linkplain ServiceBuilder}: configures the + * {@link ./remote.DriverService remote.DriverService} + * that manages the [MicrosoftEdgeDriver] child process. + * + * 2. {@linkplain Options}: defines configuration options for each new + * MicrosoftEdgeDriver session, such as which + * {@linkplain Options#setProxy proxy} to use when starting the browser. + * + * 3. {@linkplain Driver}: the WebDriver client; each new instance will control + * a unique browser session. + * + * __Customizing the MicrosoftEdgeDriver Server__ + * + * By default, every MicrosoftEdge session will use a single driver service, + * which is started the first time a {@link Driver} instance is created and + * terminated when this process exits. The default service will inherit its + * environment from the current process. + * You may obtain a handle to this default service using + * {@link #getDefaultService getDefaultService()} and change its configuration + * with {@link #setDefaultService setDefaultService()}. + * + * You may also create a {@link Driver} with its own driver service. This is + * useful if you need to capture the server's log output for a specific session: + * + * var edge = require('selenium-webdriver/edge'); + * + * var service = new edge.ServiceBuilder() + * .setPort(55555) + * .build(); + * + * var options = new edge.Options(); + * // configure browser options ... + * + * var driver = new edge.Driver(options, service); + * + * Users should only instantiate the {@link Driver} class directly when they + * need a custom driver service configuration (as shown above). For normal + * operation, users should start MicrosoftEdge using the + * {@link ./builder.Builder selenium-webdriver.Builder}. + * + * [MicrosoftEdgeDriver]: https://msdn.microsoft.com/en-us/library/mt188085(v=vs.85).aspx + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const http = require('./http'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + Symbols = require('./lib/symbols'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + +const EDGEDRIVER_EXE = 'MicrosoftWebDriver.exe'; + + +/** + * Option keys. + * @enum {string} + */ +const CAPABILITY_KEY = { + PAGE_LOAD_STRATEGY: 'pageLoadStrategy' +}; + + +/** + * Class for managing MicrosoftEdgeDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object} */ + this.options_ = {}; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + } + + /** + * Extracts the MicrosoftEdgeDriver specific options from the given + * capabilities object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The MicrosoftEdgeDriver options. + */ + static fromCapabilities(caps) { + var options = new Options(); + var map = options.options_; + + Object.keys(CAPABILITY_KEY).forEach(function(key) { + key = CAPABILITY_KEY[key]; + if (caps.has(key)) { + map[key] = caps.get(key); + } + }); + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + return options; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Sets the page load strategy for Edge. + * Supported values are "normal", "eager", and "none"; + * + * @param {string} pageLoadStrategy The page load strategy to use. + * @return {!Options} A self reference. + */ + setPageLoadStrategy(pageLoadStrategy) { + this.options_[CAPABILITY_KEY.PAGE_LOAD_STRATEGY] = + pageLoadStrategy.toLowerCase(); + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.edge(); + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + Object.keys(this.options_).forEach(function(key) { + caps.set(key, this.options_[key]); + }, this); + return caps; + } + + /** + * Converts this instance to its JSON wire protocol representation. Note this + * function is an implementation not intended for general use. + * @return {{pageLoadStrategy: (string|undefined)}} + * The JSON wire protocol representation of this instance. + */ + [Symbols.serialize]() { + var json = {}; + for (var key in this.options_) { + if (this.options_[key] != null) { + json[key] = this.options_[key]; + } + } + return json; + } +} + + +/** + * Creates {@link remote.DriverService} instances that manage a + * MicrosoftEdgeDriver server in a child process. + */ +class ServiceBuilder extends remote.DriverService.Builder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the MicrosoftEdgeDriver on the current + * PATH. + * @throws {Error} If provided executable does not exist, or the + * MicrosoftEdgeDriver cannot be found on the PATH. + */ + constructor(opt_exe) { + let exe = opt_exe || io.findInPath(EDGEDRIVER_EXE, true); + if (!exe) { + throw Error( + 'The ' + EDGEDRIVER_EXE + ' could not be found on the current PATH. ' + + 'Please download the latest version of the MicrosoftEdgeDriver from ' + + 'https://www.microsoft.com/en-us/download/details.aspx?id=48212 and ' + + 'ensure it can be found on your PATH.'); + } + + super(exe); + + // Binding to the loopback address will fail if not running with + // administrator privileges. Since we cannot test for that in script + // (or can we?), force the DriverService to use "localhost". + this.setHostname('localhost'); + } +} + + +/** @type {remote.DriverService} */ +var defaultService = null; + + +/** + * Sets the default service to use for new MicrosoftEdgeDriver instances. + * @param {!remote.DriverService} service The service to use. + * @throws {Error} If the default service is currently running. + */ +function setDefaultService(service) { + if (defaultService && defaultService.isRunning()) { + throw Error( + 'The previously configured EdgeDriver service is still running. ' + + 'You must shut it down before you may adjust its configuration.'); + } + defaultService = service; +} + + +/** + * Returns the default MicrosoftEdgeDriver service. If such a service has + * not been configured, one will be constructed using the default configuration + * for an MicrosoftEdgeDriver executable found on the system PATH. + * @return {!remote.DriverService} The default MicrosoftEdgeDriver service. + */ +function getDefaultService() { + if (!defaultService) { + defaultService = new ServiceBuilder().build(); + } + return defaultService; +} + + +/** + * Creates a new WebDriver client for Microsoft's Edge. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {remote.DriverService=} opt_service The session to use; will use + * the {@linkplain #getDefaultService default service} by default. + * @param {promise.ControlFlow=} opt_flow The control flow to use, or + * {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_service, opt_flow) { + var service = opt_service || getDefaultService(); + var client = service.start().then(url => new http.HttpClient(url)); + var executor = new http.Executor(client); + + var caps = + opt_config instanceof Options ? opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.edge()); + + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + super(driver.getSession(), executor, driver.controlFlow()); + + var boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().finally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.ServiceBuilder = ServiceBuilder; +exports.getDefaultService = getDefaultService; +exports.setDefaultService = setDefaultService; diff --git a/node_modules/selenium-webdriver/example/chrome_android.js b/node_modules/selenium-webdriver/example/chrome_android.js new file mode 100644 index 000000000..990a4c445 --- /dev/null +++ b/node_modules/selenium-webdriver/example/chrome_android.js @@ -0,0 +1,38 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview A basic example of working with Chrome on Android. Before + * running this example, you must start adb and connect a device (or start an + * AVD). + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + chrome = require('../chrome'); + +var driver = new webdriver.Builder() + .forBrowser('chrome') + .setChromeOptions(new chrome.Options().androidChrome()) + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js b/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js new file mode 100644 index 000000000..d3081127d --- /dev/null +++ b/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js @@ -0,0 +1,39 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview This is an example of emulating a mobile device using the + * ChromeDriver. + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + chrome = require('../chrome'); + + +var driver = new webdriver.Builder() + .forBrowser('chrome') + .setChromeOptions(new chrome.Options() + .setMobileEmulation({deviceName: 'Google Nexus 5'})) + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/node_modules/selenium-webdriver/example/google_search.js b/node_modules/selenium-webdriver/example/google_search.js new file mode 100644 index 000000000..22d0d21ce --- /dev/null +++ b/node_modules/selenium-webdriver/example/google_search.js @@ -0,0 +1,50 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example WebDriver script. This requires the chromedriver + * to be present on the system PATH. + * + * Usage: + * // Default behavior + * node selenium-webdriver/example/google_search.js + * + * // Target Chrome locally; the chromedriver must be on your PATH + * SELENIUM_BROWSER=chrome node selenium-webdriver/example/google_search.js + * + * // Use a local copy of the standalone Selenium server + * SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar \ + * node selenium-webdriver/example/google_search.js + * + * // Target a remote Selenium server + * SELENIUM_REMOTE_URL=http://www.example.com:4444/wd/hub \ + * node selenium-webdriver/example/google_search.js + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); +driver.findElement(By.name('q')).sendKeys('webdriver'); +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); \ No newline at end of file diff --git a/node_modules/selenium-webdriver/example/google_search_generator.js b/node_modules/selenium-webdriver/example/google_search_generator.js new file mode 100644 index 000000000..983c8d84f --- /dev/null +++ b/node_modules/selenium-webdriver/example/google_search_generator.js @@ -0,0 +1,45 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example WebDriver script using generator functions. + * + * Usage: node selenium-webdriver/example/google_search_generator.js + */ + +var webdriver = require('..'), + By = webdriver.By; + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); +driver.call(function* () { + var query = yield driver.findElement(By.name('q')); + query.sendKeys('webdriver'); + + var submit = yield driver.findElement(By.name('btnG')); + submit.click(); +}); + +driver.wait(function* () { + var title = yield driver.getTitle(); + return 'webdriver - Google Search' === title; +}, 1000); + +driver.quit(); diff --git a/node_modules/selenium-webdriver/example/google_search_test.js b/node_modules/selenium-webdriver/example/google_search_test.js new file mode 100644 index 000000000..823e2c578 --- /dev/null +++ b/node_modules/selenium-webdriver/example/google_search_test.js @@ -0,0 +1,47 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example test that may be run using Mocha. + * Usage: mocha -t 10000 selenium-webdriver/example/google_search_test.js + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until, + test = require('../testing'); + +test.describe('Google Search', function() { + var driver; + + test.before(function() { + driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + }); + + test.it('should append query to title', function() { + driver.get('http://www.google.com'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + }); + + test.after(function() { + driver.quit(); + }); +}); diff --git a/node_modules/selenium-webdriver/example/logging.js b/node_modules/selenium-webdriver/example/logging.js new file mode 100644 index 000000000..ae1d4cc2a --- /dev/null +++ b/node_modules/selenium-webdriver/example/logging.js @@ -0,0 +1,43 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Demonstrates how to use WebDriver's logging sysem. + */ + +'use strict'; + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +webdriver.logging.installConsoleHandler(); +webdriver.logging.getLogger('webdriver.http') + .setLevel(webdriver.logging.Level.ALL); + +var driver = new webdriver.Builder() + .forBrowser('firefox') + .build(); + +driver.get('http://www.google.com/ncr'); + +var searchBox = driver.wait(until.elementLocated(By.name('q')), 3000); +searchBox.sendKeys('webdriver'); + +driver.findElement(By.name('btnG')).click(); +driver.wait(until.titleIs('webdriver - Google Search'), 1000); +driver.quit(); diff --git a/node_modules/selenium-webdriver/example/parallel_flows.js b/node_modules/selenium-webdriver/example/parallel_flows.js new file mode 100644 index 000000000..f41692234 --- /dev/null +++ b/node_modules/selenium-webdriver/example/parallel_flows.js @@ -0,0 +1,51 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview An example of starting multiple WebDriver clients that run + * in parallel in separate control flows. + */ + +var webdriver = require('..'), + By = webdriver.By, + until = webdriver.until; + +for (var i = 0; i < 3; i++) { + (function(n) { + var flow = new webdriver.promise.ControlFlow() + .on('uncaughtException', function(e) { + console.log('uncaughtException in flow %d: %s', n, e); + }); + + var driver = new webdriver.Builder(). + forBrowser('firefox'). + setControlFlow(flow). // Comment out this line to see the difference. + build(); + + // Position and resize window so it's easy to see them running together. + driver.manage().window().setSize(600, 400); + driver.manage().window().setPosition(300 * i, 400 * i); + + driver.get('http://www.google.com'); + driver.findElement(By.name('q')).sendKeys('webdriver'); + driver.findElement(By.name('btnG')).click(); + driver.wait(until.titleIs('webdriver - Google Search'), 1000); + + driver.quit(); + })(i); +} + diff --git a/node_modules/selenium-webdriver/firefox/binary.js b/node_modules/selenium-webdriver/firefox/binary.js new file mode 100644 index 000000000..f31440b4e --- /dev/null +++ b/node_modules/selenium-webdriver/firefox/binary.js @@ -0,0 +1,270 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Manages Firefox binaries. This module is considered internal; + * users should use {@link ./firefox selenium-webdriver/firefox}. + */ + +'use strict'; + +const child = require('child_process'), + fs = require('fs'), + path = require('path'), + util = require('util'); + +const isDevMode = require('../lib/devmode'), + Symbols = require('../lib/symbols'), + io = require('../io'), + exec = require('../io/exec'); + + + +/** @const */ +const NO_FOCUS_LIB_X86 = isDevMode ? + path.join(__dirname, '../../../../cpp/prebuilt/i386/libnoblur.so') : + path.join(__dirname, '../lib/firefox/i386/libnoblur.so') ; + +/** @const */ +const NO_FOCUS_LIB_AMD64 = isDevMode ? + path.join(__dirname, '../../../../cpp/prebuilt/amd64/libnoblur64.so') : + path.join(__dirname, '../lib/firefox/amd64/libnoblur64.so') ; + +const X_IGNORE_NO_FOCUS_LIB = 'x_ignore_nofocus.so'; + + +let foundBinary = null; +let foundDevBinary = null; + + +/** + * Checks the default Windows Firefox locations in Program Files. + * + * @param {boolean=} opt_dev Whether to find the Developer Edition. + * @return {!Promise} A promise for the located executable. + * The promise will resolve to {@code null} if Firefox was not found. + */ +function defaultWindowsLocation(opt_dev) { + var files = [ + process.env['PROGRAMFILES'] || 'C:\\Program Files', + process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)' + ].map(function(prefix) { + if (opt_dev) { + return path.join(prefix, 'Firefox Developer Edition\\firefox.exe'); + } + return path.join(prefix, 'Mozilla Firefox\\firefox.exe'); + }); + return io.exists(files[0]).then(function(exists) { + return exists ? files[0] : io.exists(files[1]).then(function(exists) { + return exists ? files[1] : null; + }); + }); +} + + +/** + * Locates the Firefox binary for the current system. + * + * @param {boolean=} opt_dev Whether to find the Developer Edition. This only + * used on Windows and OSX. + * @return {!Promise} A promise for the located binary. The promise will + * be rejected if Firefox cannot be located. + */ +function findFirefox(opt_dev) { + if (opt_dev && foundDevBinary) { + return foundDevBinary; + } + + if (!opt_dev && foundBinary) { + return foundBinary; + } + + let found; + if (process.platform === 'darwin') { + let exe = opt_dev + ? '/Applications/FirefoxDeveloperEdition.app/Contents/MacOS/firefox-bin' + : '/Applications/Firefox.app/Contents/MacOS/firefox-bin'; + found = io.exists(exe).then(exists => exists ? exe : null); + + } else if (process.platform === 'win32') { + found = defaultWindowsLocation(opt_dev); + + } else { + found = Promise.resolve(io.findInPath('firefox')); + } + + found = found.then(found => { + if (found) { + return found; + } + throw Error('Could not locate Firefox on the current system'); + }); + + if (opt_dev) { + return foundDevBinary = found; + } else { + return foundBinary = found; + } +} + + +/** + * Copies the no focus libs into the given profile directory. + * @param {string} profileDir Path to the profile directory to install into. + * @return {!Promise} The LD_LIBRARY_PATH prefix string to use + * for the installed libs. + */ +function installNoFocusLibs(profileDir) { + var x86 = path.join(profileDir, 'x86'); + var amd64 = path.join(profileDir, 'amd64'); + + return io.mkdir(x86) + .then(() => copyLib(NO_FOCUS_LIB_X86, x86)) + .then(() => io.mkdir(amd64)) + .then(() => copyLib(NO_FOCUS_LIB_AMD64, amd64)) + .then(function() { + return x86 + ':' + amd64; + }); + + function copyLib(src, dir) { + return io.copy(src, path.join(dir, X_IGNORE_NO_FOCUS_LIB)); + } +} + + +/** + * Provides a mechanism to configure and launch Firefox in a subprocess for + * use with WebDriver. + * + * If created _without_ a path for the Firefox binary to use, this class will + * attempt to find Firefox when {@link #launch()} is called. For OSX and + * Windows, this class will look for Firefox in the current platform's default + * installation location (e.g. /Applications/Firefox.app on OSX). For all other + * platforms, the Firefox executable must be available on your system `PATH`. + * + * @final + */ +class Binary { + /** + * @param {string=} opt_exe Path to the Firefox binary to use. + */ + constructor(opt_exe) { + /** @private {(string|undefined)} */ + this.exe_ = opt_exe; + + /** @private {!Array.} */ + this.args_ = []; + + /** @private {!Object} */ + this.env_ = {}; + Object.assign(this.env_, process.env, { + MOZ_CRASHREPORTER_DISABLE: '1', + MOZ_NO_REMOTE: '1', + NO_EM_RESTART: '1' + }); + + /** @private {boolean} */ + this.devEdition_ = false; + } + + /** + * Add arguments to the command line used to start Firefox. + * @param {...(string|!Array.)} var_args Either the arguments to add + * as varargs, or the arguments as an array. + */ + addArguments(var_args) { + for (var i = 0; i < arguments.length; i++) { + if (Array.isArray(arguments[i])) { + this.args_ = this.args_.concat(arguments[i]); + } else { + this.args_.push(arguments[i]); + } + } + } + + /** + * Specifies whether to use Firefox Developer Edition instead of the normal + * stable channel. Setting this option has no effect if this instance was + * created with a path to a specific Firefox binary. + * + * This method has no effect on Unix systems where the Firefox application + * has the same (default) name regardless of version. + * + * @param {boolean=} opt_use Whether to use the developer edition. Defaults to + * true. + */ + useDevEdition(opt_use) { + this.devEdition_ = opt_use === undefined || !!opt_use; + } + + /** + * Returns a promise for the Firefox executable used by this instance. The + * returned promise will be immediately resolved if the user supplied an + * executable path when this instance was created. Otherwise, an attempt will + * be made to find Firefox on the current system. + * + * @return {!Promise} a promise for the path to the Firefox executable + * used by this instance. + */ + locate() { + return Promise.resolve(this.exe_ || findFirefox(this.devEdition_)); + } + + /** + * Launches Firefox and returns a promise that will be fulfilled when the + * process terminates. + * @param {string} profile Path to the profile directory to use. + * @return {!Promise} A promise for the handle to the started + * subprocess. + */ + launch(profile) { + let env = {}; + Object.assign(env, this.env_, {XRE_PROFILE_PATH: profile}); + + let args = ['-foreground'].concat(this.args_); + + return this.locate().then(function(firefox) { + if (process.platform === 'win32' || process.platform === 'darwin') { + return exec(firefox, {args: args, env: env}); + } + return installNoFocusLibs(profile).then(function(ldLibraryPath) { + env['LD_LIBRARY_PATH'] = ldLibraryPath + ':' + env['LD_LIBRARY_PATH']; + env['LD_PRELOAD'] = X_IGNORE_NO_FOCUS_LIB; + return exec(firefox, {args: args, env: env}); + }); + }); + } + + /** + * Returns a promise for the wire representation of this binary. Note: the + * FirefoxDriver only supports passing the path to the binary executable over + * the wire; all command line arguments and environment variables will be + * discarded. + * + * @return {!Promise} A promise for this binary's wire representation. + */ + [Symbols.serialize]() { + return this.locate(); + } +} + + +// PUBLIC API + + +exports.Binary = Binary; + diff --git a/node_modules/selenium-webdriver/firefox/extension.js b/node_modules/selenium-webdriver/firefox/extension.js new file mode 100644 index 000000000..60abb06b8 --- /dev/null +++ b/node_modules/selenium-webdriver/firefox/extension.js @@ -0,0 +1,187 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** @fileoverview Utilities for working with Firefox extensions. */ + +'use strict'; + +const AdmZip = require('adm-zip'), + fs = require('fs'), + path = require('path'), + xml = require('xml2js'); + +const io = require('../io'); + + +/** + * Thrown when there an add-on is malformed. + */ +class AddonFormatError extends Error { + /** @param {string} msg The error message. */ + constructor(msg) { + super(msg); + /** @override */ + this.name = this.constructor.name; + } +} + + + +/** + * Installs an extension to the given directory. + * @param {string} extension Path to the extension to install, as either a xpi + * file or a directory. + * @param {string} dir Path to the directory to install the extension in. + * @return {!Promise} A promise for the add-on ID once + * installed. + */ +function install(extension, dir) { + return getDetails(extension).then(function(details) { + var dst = path.join(dir, details.id); + if (extension.slice(-4) === '.xpi') { + if (!details.unpack) { + return io.copy(extension, dst + '.xpi').then(() => details.id); + } else { + return Promise.resolve().then(function() { + // TODO: find an async library for inflating a zip archive. + new AdmZip(extension).extractAllTo(dst, true); + return details.id; + }); + } + } else { + return io.copyDir(extension, dst).then(() => details.id); + } + }); +} + + +/** + * Describes a Firefox add-on. + * @typedef {{id: string, name: string, version: string, unpack: boolean}} + */ +var AddonDetails; + +/** @typedef {{$: !Object}} */ +var RdfRoot; + + + +/** + * Extracts the details needed to install an add-on. + * @param {string} addonPath Path to the extension directory. + * @return {!Promise} A promise for the add-on details. + */ +function getDetails(addonPath) { + return readManifest(addonPath).then(function(doc) { + var em = getNamespaceId(doc, 'http://www.mozilla.org/2004/em-rdf#'); + var rdf = getNamespaceId( + doc, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); + + var description = doc[rdf + 'RDF'][rdf + 'Description'][0]; + var details = { + id: getNodeText(description, em + 'id'), + name: getNodeText(description, em + 'name'), + version: getNodeText(description, em + 'version'), + unpack: getNodeText(description, em + 'unpack') || false + }; + + if (typeof details.unpack === 'string') { + details.unpack = details.unpack.toLowerCase() === 'true'; + } + + if (!details.id) { + throw new AddonFormatError('Could not find add-on ID for ' + addonPath); + } + + return details; + }); + + function getNodeText(node, name) { + return node[name] && node[name][0] || ''; + } + + function getNamespaceId(doc, url) { + var keys = Object.keys(doc); + if (keys.length !== 1) { + throw new AddonFormatError('Malformed manifest for add-on ' + addonPath); + } + + var namespaces = /** @type {!RdfRoot} */(doc[keys[0]]).$; + var id = ''; + Object.keys(namespaces).some(function(ns) { + if (namespaces[ns] !== url) { + return false; + } + + if (ns.indexOf(':') != -1) { + id = ns.split(':')[1] + ':'; + } + return true; + }); + return id; + } +} + + +/** + * Reads the manifest for a Firefox add-on. + * @param {string} addonPath Path to a Firefox add-on as a xpi or an extension. + * @return {!Promise} A promise for the parsed manifest. + */ +function readManifest(addonPath) { + var manifest; + + if (addonPath.slice(-4) === '.xpi') { + manifest = new Promise((resolve, reject) => { + let zip = new AdmZip(addonPath); + + if (!zip.getEntry('install.rdf')) { + reject(new AddonFormatError( + 'Could not find install.rdf in ' + addonPath)); + return; + } + + zip.readAsTextAsync('install.rdf', resolve); + }); + } else { + manifest = io.stat(addonPath).then(function(stats) { + if (!stats.isDirectory()) { + throw Error( + 'Add-on path is niether a xpi nor a directory: ' + addonPath); + } + return io.read(path.join(addonPath, 'install.rdf')); + }); + } + + return manifest.then(function(content) { + return new Promise((resolve, reject) => { + xml.parseString(content, (err, data) => { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); + }); +} + + +// PUBLIC API + + +exports.install = install; diff --git a/node_modules/selenium-webdriver/firefox/index.js b/node_modules/selenium-webdriver/firefox/index.js new file mode 100644 index 000000000..0adc97093 --- /dev/null +++ b/node_modules/selenium-webdriver/firefox/index.js @@ -0,0 +1,679 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines the {@linkplain Driver WebDriver} client for Firefox. + * Before using this module, you must download the latest + * [geckodriver release] and ensure it can be found on your system [PATH]. + * + * Each FirefoxDriver instance will be created with an anonymous profile, + * ensuring browser historys do not share session data (cookies, history, cache, + * offline storage, etc.) + * + * __Customizing the Firefox Profile__ + * + * The {@link Profile} class may be used to configure the browser profile used + * with WebDriver, with functions to install additional + * {@linkplain Profile#addExtension extensions}, configure browser + * {@linkplain Profile#setPreference preferences}, and more. For example, you + * may wish to include Firebug: + * + * var firefox = require('selenium-webdriver/firefox'); + * + * var profile = new firefox.Profile(); + * profile.addExtension('/path/to/firebug.xpi'); + * profile.setPreference('extensions.firebug.showChromeErrors', true); + * + * var options = new firefox.Options().setProfile(profile); + * var driver = new firefox.Driver(options); + * + * The {@link Profile} class may also be used to configure WebDriver based on a + * pre-existing browser profile: + * + * var profile = new firefox.Profile( + * '/usr/local/home/bob/.mozilla/firefox/3fgog75h.testing'); + * var options = new firefox.Options().setProfile(profile); + * var driver = new firefox.Driver(options); + * + * The FirefoxDriver will _never_ modify a pre-existing profile; instead it will + * create a copy for it to modify. By extension, there are certain browser + * preferences that are required for WebDriver to function properly and they + * will always be overwritten. + * + * __Using a Custom Firefox Binary__ + * + * On Windows and OSX, the FirefoxDriver will search for Firefox in its + * default installation location: + * + * * Windows: C:\Program Files and C:\Program Files (x86). + * * Mac OS X: /Applications/Firefox.app + * + * For Linux, Firefox will be located on the PATH: `$(where firefox)`. + * + * You can configure WebDriver to start use a custom Firefox installation with + * the {@link Binary} class: + * + * var firefox = require('selenium-webdriver/firefox'); + * var binary = new firefox.Binary('/my/firefox/install/dir/firefox-bin'); + * var options = new firefox.Options().setBinary(binary); + * var driver = new firefox.Driver(options); + * + * __Remote Testing__ + * + * You may customize the Firefox binary and profile when running against a + * remote Selenium server. Your custom profile will be packaged as a zip and + * transfered to the remote host for use. The profile will be transferred + * _once for each new session_. The performance impact should be minimal if + * you've only configured a few extra browser preferences. If you have a large + * profile with several extensions, you should consider installing it on the + * remote host and defining its path via the {@link Options} class. Custom + * binaries are never copied to remote machines and must be referenced by + * installation path. + * + * var options = new firefox.Options() + * .setProfile('/profile/path/on/remote/host') + * .setBinary('/install/dir/on/remote/host/firefox-bin'); + * + * var driver = new (require('selenium-webdriver')).Builder() + * .forBrowser('firefox') + * .usingServer('http://127.0.0.1:4444/wd/hub') + * .setFirefoxOptions(options) + * .build(); + * + * __Testing Older Versions of Firefox__ + * + * To test versions of Firefox prior to Firefox 47, you must disable the use of + * the geckodriver using the {@link Options} class. + * + * var options = new firefox.Options().useGeckoDriver(false); + * var driver = new firefox.Driver(options); + * + * Alternatively, you may disable the geckodriver at runtime by setting the + * environment variable `SELENIUM_MARIONETTE=false`. + * + * [geckodriver release]: https://github.com/mozilla/geckodriver/releases/ + * [PATH]: http://en.wikipedia.org/wiki/PATH_%28variable%29 + */ + +'use strict'; + +const url = require('url'); + +const Binary = require('./binary').Binary, + Profile = require('./profile').Profile, + decodeProfile = require('./profile').decode, + http = require('../http'), + httpUtil = require('../http/util'), + io = require('../io'), + capabilities = require('../lib/capabilities'), + command = require('../lib/command'), + logging = require('../lib/logging'), + promise = require('../lib/promise'), + webdriver = require('../lib/webdriver'), + net = require('../net'), + portprober = require('../net/portprober'), + remote = require('../remote'); + + +/** + * Firefox-specific capability keys. Users should use the {@linkplain Options} + * class instead of referencing these keys directly. _These keys are considered + * implementation details and may be removed or changed at any time._ + * + * @enum {string} + */ +const Capability = { + /** + * Defines the Firefox binary to use. May be set to either a + * {@linkplain Binary} instance, or a string path to the Firefox executable. + */ + BINARY: 'firefox_binary', + + /** + * Specifies whether to use Mozilla's Marionette, or the legacy FirefoxDriver + * from the Selenium project. Defaults to false. + */ + MARIONETTE: 'marionette', + + /** + * Defines the Firefox profile to use. May be set to either a + * {@linkplain Profile} instance, or to a base-64 encoded zip of a profile + * directory. + */ + PROFILE: 'firefox_profile' +}; + + +/** + * Configuration options for the FirefoxDriver. + */ +class Options { + constructor() { + /** @private {Profile} */ + this.profile_ = null; + + /** @private {Binary} */ + this.binary_ = null; + + /** @private {logging.Preferences} */ + this.logPrefs_ = null; + + /** @private {?capabilities.ProxyConfig} */ + this.proxy_ = null; + + /** @private {boolean} */ + this.marionette_ = true; + } + + /** + * Sets the profile to use. The profile may be specified as a + * {@link Profile} object or as the path to an existing Firefox profile to use + * as a template. + * + * @param {(string|!Profile)} profile The profile to use. + * @return {!Options} A self reference. + */ + setProfile(profile) { + if (typeof profile === 'string') { + profile = new Profile(profile); + } + this.profile_ = profile; + return this; + } + + /** + * Sets the binary to use. The binary may be specified as the path to a Firefox + * executable, or as a {@link Binary} object. + * + * @param {(string|!Binary)} binary The binary to use. + * @return {!Options} A self reference. + */ + setBinary(binary) { + if (typeof binary === 'string') { + binary = new Binary(binary); + } + this.binary_ = binary; + return this; + } + + /** + * Sets the logging preferences for the new session. + * @param {logging.Preferences} prefs The logging preferences. + * @return {!Options} A self reference. + */ + setLoggingPreferences(prefs) { + this.logPrefs_ = prefs; + return this; + } + + /** + * Sets the proxy to use. + * + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Sets whether to use Mozilla's geckodriver to drive the browser. This option + * is enabled by default and required for Firefox 47+. + * + * @param {boolean} enable Whether to enable the geckodriver. + * @see https://github.com/mozilla/geckodriver + */ + useGeckoDriver(enable) { + this.marionette_ = enable; + return this; + } + + /** + * Converts these options to a {@link capabilities.Capabilities} instance. + * + * @return {!capabilities.Capabilities} A new capabilities object. + */ + toCapabilities() { + var caps = capabilities.Capabilities.firefox(); + if (this.logPrefs_) { + caps.set(capabilities.Capability.LOGGING_PREFS, this.logPrefs_); + } + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + if (this.binary_) { + caps.set(Capability.BINARY, this.binary_); + } + if (this.profile_) { + caps.set(Capability.PROFILE, this.profile_); + } + caps.set(Capability.MARIONETTE, this.marionette_); + return caps; + } +} + + +/** + * Enum of available command contexts. + * + * Command contexts are specific to Marionette, and may be used with the + * {@link #context=} method. Contexts allow you to direct all subsequent + * commands to either "content" (default) or "chrome". The latter gives + * you elevated security permissions. + * + * @enum {string} + */ +const Context = { + CONTENT: "content", + CHROME: "chrome", +}; + + +const GECKO_DRIVER_EXE = + process.platform === 'win32' ? 'geckodriver.exe' : 'geckodriver'; + + +/** + * @return {string} . + * @throws {Error} + */ +function findGeckoDriver() { + let exe = io.findInPath(GECKO_DRIVER_EXE, true); + if (!exe) { + throw Error( + 'The ' + GECKO_DRIVER_EXE + ' executable could not be found on the current ' + + 'PATH. Please download the latest version from ' + + 'https://github.com/mozilla/geckodriver/releases/' + + 'WebDriver and ensure it can be found on your PATH.'); + } + return exe; +} + + +/** + * @param {(Profile|string)} profile The profile to prepare. + * @param {number} port The port the FirefoxDriver should listen on. + * @return {!Promise} a promise for the path to the profile directory. + */ +function prepareProfile(profile, port) { + if (typeof profile === 'string') { + return decodeProfile(/** @type {string} */(profile)).then(dir => { + profile = new Profile(dir); + profile.setPreference('webdriver_firefox_port', port); + return profile.writeToDisk(); + }); + } + + profile = profile || new Profile; + profile.setPreference('webdriver_firefox_port', port); + return profile.writeToDisk(); +} + + +function normalizeProxyConfiguration(config) { + if ('manual' === config.proxyType) { + if (config.ftpProxy && !config.ftpProxyPort) { + let hostAndPort = net.splitHostAndPort(config.ftpProxy); + config.ftpProxy = hostAndPort.host; + config.ftpProxyPort = hostAndPort.port; + } + + if (config.httpProxy && !config.httpProxyPort) { + let hostAndPort = net.splitHostAndPort(config.httpProxy); + config.httpProxy = hostAndPort.host; + config.httpProxyPort = hostAndPort.port; + } + + if (config.sslProxy && !config.sslProxyPort) { + let hostAndPort = net.splitHostAndPort(config.sslProxy); + config.sslProxy = hostAndPort.host; + config.sslProxyPort = hostAndPort.port; + } + + if (config.socksProxy && !config.socksProxyPort) { + let hostAndPort = net.splitHostAndPort(config.socksProxy); + config.socksProxy = hostAndPort.host; + config.socksProxyPort = hostAndPort.port; + } + } else if ('pac' === config.proxyType) { + if (config.proxyAutoconfigUrl && !config.pacUrl) { + config.pacUrl = config.proxyAutoconfigUrl; + } + } + return config; +} + + +/** @enum {string} */ +const ExtensionCommand = { + GET_CONTEXT: 'getContext', + SET_CONTEXT: 'setContext', +}; + + +/** + * Creates a command executor with support for Marionette's custom commands. + * @param {!Promise} serverUrl The server's URL. + * @return {!command.Executor} The new command executor. + */ +function createExecutor(serverUrl) { + let client = serverUrl.then(url => new http.HttpClient(url)); + let executor = new http.Executor(client); + configureExecutor(executor); + return executor; +} + + +/** + * Configures the given executor with Firefox-specific commands. + * @param {!http.Executor} executor the executor to configure. + */ +function configureExecutor(executor) { + executor.defineCommand( + ExtensionCommand.GET_CONTEXT, + 'GET', + '/session/:sessionId/moz/context'); + + executor.defineCommand( + ExtensionCommand.SET_CONTEXT, + 'POST', + '/session/:sessionId/moz/context'); +} + + +/** + * Creates {@link selenium-webdriver/remote.DriverService} instances that manage + * a [geckodriver](https://github.com/mozilla/geckodriver) server in a child + * process. + */ +class ServiceBuilder extends remote.DriverService.Builder { + /** + * @param {string=} opt_exe Path to the server executable to use. If omitted, + * the builder will attempt to locate the geckodriver on the system PATH. + */ + constructor(opt_exe) { + super(opt_exe || findGeckoDriver()); + this.setLoopback(true); // Required. + } + + /** + * Enables verbose logging. + * + * @param {boolean=} opt_trace Whether to enable trace-level logging. By + * default, only debug logging is enabled. + * @return {!ServiceBuilder} A self reference. + */ + enableVerboseLogging(opt_trace) { + return this.addArguments(opt_trace ? '-vv' : '-v'); + } + + /** + * Sets the path to the executable Firefox binary that the geckodriver should + * use. If this method is not called, this builder will attempt to locate + * Firefox in the default installation location for the current platform. + * + * @param {(string|!Binary)} binary Path to the executable Firefox binary to use. + * @return {!ServiceBuilder} A self reference. + * @see Binary#locate() + */ + setFirefoxBinary(binary) { + let exe = typeof binary === 'string' + ? Promise.resolve(binary) : binary.locate(); + return this.addArguments('-b', exe); + } +} + + +/** + * @typedef {{driver: !webdriver.WebDriver, onQuit: function()}} + */ +var DriverSpec; + + +/** + * @param {(http.Executor|remote.DriverService|undefined)} executor + * @param {!capabilities.Capabilities} caps + * @param {Profile} profile + * @param {Binary} binary + * @param {(promise.ControlFlow|undefined)} flow + * @return {DriverSpec} + */ +function createGeckoDriver( + executor, caps, profile, binary, flow) { + if (profile) { + caps.set(Capability.PROFILE, profile.encode()); + } + + let sessionCaps = caps; + if (caps.has(capabilities.Capability.PROXY)) { + let proxy = normalizeProxyConfiguration( + caps.get(capabilities.Capability.PROXY)); + + // Marionette requires proxy settings to be specified as required + // capabilities. See mozilla/geckodriver#97 + let required = new capabilities.Capabilities() + .set(capabilities.Capability.PROXY, proxy); + + caps.delete(capabilities.Capability.PROXY); + sessionCaps = {required, desired: caps}; + } + + /** @type {(command.Executor|undefined)} */ + let cmdExecutor; + let onQuit = function() {}; + + if (executor instanceof http.Executor) { + configureExecutor(executor); + cmdExecutor = executor; + } else if (executor instanceof remote.DriverService) { + cmdExecutor = createExecutor(executor.start()); + onQuit = () => executor.kill(); + } else { + let builder = new ServiceBuilder(); + if (binary) { + builder.setFirefoxBinary(binary); + } + let service = builder.build(); + cmdExecutor = createExecutor(service.start()); + onQuit = () => service.kill(); + } + + let driver = + webdriver.WebDriver.createSession( + /** @type {!http.Executor} */(cmdExecutor), + sessionCaps, + flow); + return {driver, onQuit}; +} + + +/** + * @param {!capabilities.Capabilities} caps + * @param {Profile} profile + * @param {!Binary} binary + * @param {(promise.ControlFlow|undefined)} flow + * @return {DriverSpec} + */ +function createLegacyDriver(caps, profile, binary, flow) { + profile = profile || new Profile; + + let freePort = portprober.findFreePort(); + let preparedProfile = + freePort.then(port => prepareProfile(profile, port)); + let command = preparedProfile.then(dir => binary.launch(dir)); + + let serverUrl = command.then(() => freePort) + .then(function(/** number */port) { + let serverUrl = url.format({ + protocol: 'http', + hostname: net.getLoopbackAddress(), + port: port + '', + pathname: '/hub' + }); + let ready = httpUtil.waitForServer(serverUrl, 45 * 1000); + return ready.then(() => serverUrl); + }); + + let onQuit = function() { + return command.then(command => { + command.kill(); + return preparedProfile.then(io.rmDir) + .then(() => command.result(), + () => command.result()); + }); + }; + + let executor = createExecutor(serverUrl); + let driver = webdriver.WebDriver.createSession(executor, caps, flow); + return {driver, onQuit}; +} + + +/** + * A WebDriver client for Firefox. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(Options|capabilities.Capabilities|Object)=} opt_config The + * configuration options for this driver, specified as either an + * {@link Options} or {@link capabilities.Capabilities}, or as a raw hash + * object. + * @param {(http.Executor|remote.DriverService)=} opt_executor Either a + * pre-configured command executor to use for communicating with an + * externally managed remote end (which is assumed to already be running), + * or the `DriverService` to use to start the geckodriver in a child + * process. + * + * If an executor is provided, care should e taken not to use reuse it with + * other clients as its internal command mappings will be updated to support + * Firefox-specific commands. + * + * _This parameter may only be used with Mozilla's GeckoDriver._ + * + * @param {promise.ControlFlow=} opt_flow The flow to + * schedule commands through. Defaults to the active flow object. + * @throws {Error} If a custom command executor is provided and the driver is + * configured to use the legacy FirefoxDriver from the Selenium project. + */ + constructor(opt_config, opt_executor, opt_flow) { + let caps; + if (opt_config instanceof Options) { + caps = opt_config.toCapabilities(); + } else { + caps = new capabilities.Capabilities(opt_config); + } + + let hasBinary = caps.has(Capability.BINARY); + let binary = caps.get(Capability.BINARY) || new Binary(); + caps.delete(Capability.BINARY); + if (typeof binary === 'string') { + binary = new Binary(binary); + } + + let profile; + if (caps.has(Capability.PROFILE)) { + profile = caps.get(Capability.PROFILE); + caps.delete(Capability.PROFILE); + } + + let serverUrl, onQuit; + + // Users must now explicitly disable marionette to use the legacy + // FirefoxDriver. + let noMarionette = + caps.get(Capability.MARIONETTE) === false + || /^0|false$/i.test(process.env['SELENIUM_MARIONETTE']); + let useMarionette = !noMarionette; + + let spec; + if (useMarionette) { + spec = createGeckoDriver( + opt_executor, + caps, + profile, + hasBinary ? binary : null, + opt_flow); + } else { + if (opt_executor) { + throw Error('You may not use a custom command executor with the legacy' + + ' FirefoxDriver'); + } + spec = createLegacyDriver(caps, profile, binary, opt_flow); + } + + super(spec.driver.getSession(), + spec.driver.getExecutor(), + spec.driver.controlFlow()); + + /** @override */ + this.quit = () => { + return super.quit().finally(spec.onQuit); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() { + } + + /** + * Get the context that is currently in effect. + * + * @return {!promise.Promise} Current context. + */ + getContext() { + return this.schedule( + new command.Command(ExtensionCommand.GET_CONTEXT), + 'get WebDriver.context'); + } + + /** + * Changes target context for commands between chrome- and content. + * + * Changing the current context has a stateful impact on all subsequent + * commands. The {@link Context.CONTENT} context has normal web + * platform document permissions, as if you would evaluate arbitrary + * JavaScript. The {@link Context.CHROME} context gets elevated + * permissions that lets you manipulate the browser chrome itself, + * with full access to the XUL toolkit. + * + * Use your powers wisely. + * + * @param {!promise.Promise} ctx The context to switch to. + */ + setContext(ctx) { + return this.schedule( + new command.Command(ExtensionCommand.SET_CONTEXT) + .setParameter("context", ctx), + 'set WebDriver.context'); + } +} + + +// PUBLIC API + + +exports.Binary = Binary; +exports.Context = Context; +exports.Driver = Driver; +exports.Options = Options; +exports.Profile = Profile; +exports.ServiceBuilder = ServiceBuilder; diff --git a/node_modules/selenium-webdriver/firefox/profile.js b/node_modules/selenium-webdriver/firefox/profile.js new file mode 100644 index 000000000..b6b39086c --- /dev/null +++ b/node_modules/selenium-webdriver/firefox/profile.js @@ -0,0 +1,409 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Profile management module. This module is considered internal; + * users should use {@link selenium-webdriver/firefox}. + */ + +'use strict'; + +const AdmZip = require('adm-zip'), + fs = require('fs'), + path = require('path'), + vm = require('vm'); + +const isDevMode = require('../lib/devmode'), + Symbols = require('../lib/symbols'), + io = require('../io'), + extension = require('./extension'); + + +/** @const */ +const WEBDRIVER_PREFERENCES_PATH = isDevMode + ? path.join(__dirname, '../../../firefox-driver/webdriver.json') + : path.join(__dirname, '../lib/firefox/webdriver.json'); + +/** @const */ +const WEBDRIVER_EXTENSION_PATH = isDevMode + ? path.join(__dirname, + '../../../../build/javascript/firefox-driver/webdriver.xpi') + : path.join(__dirname, '../lib/firefox/webdriver.xpi'); + +/** @const */ +const WEBDRIVER_EXTENSION_NAME = 'fxdriver@googlecode.com'; + + + +/** @type {Object} */ +var defaultPreferences = null; + +/** + * Synchronously loads the default preferences used for the FirefoxDriver. + * @return {!Object} The default preferences JSON object. + */ +function getDefaultPreferences() { + if (!defaultPreferences) { + var contents = /** @type {string} */( + fs.readFileSync(WEBDRIVER_PREFERENCES_PATH, 'utf8')); + defaultPreferences = /** @type {!Object} */(JSON.parse(contents)); + } + return defaultPreferences; +} + + +/** + * Parses a user.js file in a Firefox profile directory. + * @param {string} f Path to the file to parse. + * @return {!Promise} A promise for the parsed preferences as + * a JSON object. If the file does not exist, an empty object will be + * returned. + */ +function loadUserPrefs(f) { + return io.read(f).then( + function onSuccess(contents) { + var prefs = {}; + var context = vm.createContext({ + 'user_pref': function(key, value) { + prefs[key] = value; + } + }); + vm.runInContext(contents.toString(), context, f); + return prefs; + }, + function onError(err) { + if (err && err.code === 'ENOENT') { + return {}; + } + throw err; + }); +} + + + +/** + * @param {!Object} prefs The default preferences to write. Will be + * overridden by user.js preferences in the template directory and the + * frozen preferences required by WebDriver. + * @param {string} dir Path to the directory write the file to. + * @return {!Promise} A promise for the profile directory, + * to be fulfilled when user preferences have been written. + */ +function writeUserPrefs(prefs, dir) { + var userPrefs = path.join(dir, 'user.js'); + return loadUserPrefs(userPrefs).then(function(overrides) { + Object.assign(prefs, overrides); + Object.assign(prefs, getDefaultPreferences()['frozen']); + + var contents = Object.keys(prefs).map(function(key) { + return 'user_pref(' + JSON.stringify(key) + ', ' + + JSON.stringify(prefs[key]) + ');'; + }).join('\n'); + + return new Promise((resolve, reject) => { + fs.writeFile(userPrefs, contents, function(err) { + err && reject(err) || resolve(dir); + }); + }); + }); +}; + + +/** + * Installs a group of extensions in the given profile directory. If the + * WebDriver extension is not included in this set, the default version + * bundled with this package will be installed. + * @param {!Array.} extensions The extensions to install, as a + * path to an unpacked extension directory or a path to a xpi file. + * @param {string} dir The profile directory to install to. + * @param {boolean=} opt_excludeWebDriverExt Whether to skip installation of + * the default WebDriver extension. + * @return {!Promise} A promise for the main profile directory + * once all extensions have been installed. + */ +function installExtensions(extensions, dir, opt_excludeWebDriverExt) { + var hasWebDriver = !!opt_excludeWebDriverExt; + var next = 0; + var extensionDir = path.join(dir, 'extensions'); + + return new Promise(function(fulfill, reject) { + io.mkdir(extensionDir).then(installNext, reject); + + function installNext() { + if (next >= extensions.length) { + if (hasWebDriver) { + fulfill(dir); + } else { + install(WEBDRIVER_EXTENSION_PATH); + } + } else { + install(extensions[next++]); + } + } + + function install(ext) { + extension.install(ext, extensionDir).then(function(id) { + hasWebDriver = hasWebDriver || (id === WEBDRIVER_EXTENSION_NAME); + installNext(); + }, reject); + } + }); +} + + +/** + * Decodes a base64 encoded profile. + * @param {string} data The base64 encoded string. + * @return {!Promise} A promise for the path to the decoded profile + * directory. + */ +function decode(data) { + return io.tmpFile().then(function(file) { + var buf = new Buffer(data, 'base64'); + return io.write(file, buf) + .then(io.tmpDir) + .then(function(dir) { + var zip = new AdmZip(file); + zip.extractAllTo(dir); // Sync only? Why?? :-( + return dir; + }); + }); +} + + + +/** + * Models a Firefox profile directory for use with the FirefoxDriver. The + * {@code Profile} directory uses an in-memory model until + * {@link #writeToDisk} or {@link #encode} is called. + */ +class Profile { + /** + * @param {string=} opt_dir Path to an existing Firefox profile directory to + * use a template for this profile. If not specified, a blank profile will + * be used. + */ + constructor(opt_dir) { + /** @private {!Object} */ + this.preferences_ = {}; + + Object.assign(this.preferences_, getDefaultPreferences()['mutable']); + Object.assign(this.preferences_, getDefaultPreferences()['frozen']); + + /** @private {boolean} */ + this.nativeEventsEnabled_ = true; + + /** @private {(string|undefined)} */ + this.template_ = opt_dir; + + /** @private {number} */ + this.port_ = 0; + + /** @private {!Array} */ + this.extensions_ = []; + } + + /** + * Registers an extension to be included with this profile. + * @param {string} extension Path to the extension to include, as either an + * unpacked extension directory or the path to a xpi file. + */ + addExtension(extension) { + this.extensions_.push(extension); + } + + /** + * Sets a desired preference for this profile. + * @param {string} key The preference key. + * @param {(string|number|boolean)} value The preference value. + * @throws {Error} If attempting to set a frozen preference. + */ + setPreference(key, value) { + var frozen = getDefaultPreferences()['frozen']; + if (frozen.hasOwnProperty(key) && frozen[key] !== value) { + throw Error('You may not set ' + key + '=' + JSON.stringify(value) + + '; value is frozen for proper WebDriver functionality (' + + key + '=' + JSON.stringify(frozen[key]) + ')'); + } + this.preferences_[key] = value; + } + + /** + * Returns the currently configured value of a profile preference. This does + * not include any defaults defined in the profile's template directory user.js + * file (if a template were specified on construction). + * @param {string} key The desired preference. + * @return {(string|number|boolean|undefined)} The current value of the + * requested preference. + */ + getPreference(key) { + return this.preferences_[key]; + } + + /** + * Specifies which host the driver should listen for commands on. If not + * specified, the driver will default to "localhost". This option should be + * specified when "localhost" is not mapped to the loopback address + * (127.0.0.1) in `/etc/hosts`. + * + * @param {string} host the host the driver should listen for commands on + */ + setHost(host) { + this.preferences_['webdriver_firefox_allowed_hosts'] = host; + } + + /** + * @return {number} The port this profile is currently configured to use, or + * 0 if the port will be selected at random when the profile is written + * to disk. + */ + getPort() { + return this.port_; + } + + /** + * Sets the port to use for the WebDriver extension loaded by this profile. + * @param {number} port The desired port, or 0 to use any free port. + */ + setPort(port) { + this.port_ = port; + } + + /** + * @return {boolean} Whether the FirefoxDriver is configured to automatically + * accept untrusted SSL certificates. + */ + acceptUntrustedCerts() { + return !!this.preferences_['webdriver_accept_untrusted_certs']; + } + + /** + * Sets whether the FirefoxDriver should automatically accept untrusted SSL + * certificates. + * @param {boolean} value . + */ + setAcceptUntrustedCerts(value) { + this.preferences_['webdriver_accept_untrusted_certs'] = !!value; + } + + /** + * Sets whether to assume untrusted certificates come from untrusted issuers. + * @param {boolean} value . + */ + setAssumeUntrustedCertIssuer(value) { + this.preferences_['webdriver_assume_untrusted_issuer'] = !!value; + } + + /** + * @return {boolean} Whether to assume untrusted certs come from untrusted + * issuers. + */ + assumeUntrustedCertIssuer() { + return !!this.preferences_['webdriver_assume_untrusted_issuer']; + } + + /** + * Sets whether to use native events with this profile. + * @param {boolean} enabled . + */ + setNativeEventsEnabled(enabled) { + this.nativeEventsEnabled_ = enabled; + } + + /** + * Returns whether native events are enabled in this profile. + * @return {boolean} . + */ + nativeEventsEnabled() { + return this.nativeEventsEnabled_; + } + + /** + * Writes this profile to disk. + * @param {boolean=} opt_excludeWebDriverExt Whether to exclude the WebDriver + * extension from the generated profile. Used to reduce the size of an + * {@link #encode() encoded profile} since the server will always install + * the extension itself. + * @return {!Promise} A promise for the path to the new profile + * directory. + */ + writeToDisk(opt_excludeWebDriverExt) { + var profileDir = io.tmpDir(); + if (this.template_) { + profileDir = profileDir.then(function(dir) { + return io.copyDir( + /** @type {string} */(this.template_), + dir, /(parent\.lock|lock|\.parentlock)/); + }.bind(this)); + } + + // Freeze preferences for async operations. + var prefs = {}; + Object.assign(prefs, this.preferences_); + + // Freeze extensions for async operations. + var extensions = this.extensions_.concat(); + + return profileDir.then(function(dir) { + return writeUserPrefs(prefs, dir); + }).then(function(dir) { + return installExtensions(extensions, dir, !!opt_excludeWebDriverExt); + }); + } + + /** + * Write profile to disk, compress its containing directory, and return + * it as a Base64 encoded string. + * + * @return {!Promise} A promise for the encoded profile as + * Base64 string. + * + */ + encode() { + return this.writeToDisk(true).then(function(dir) { + var zip = new AdmZip(); + zip.addLocalFolder(dir, ''); + // Stored compression, see https://en.wikipedia.org/wiki/Zip_(file_format) + zip.getEntries().forEach(function(entry) { + entry.header.method = 0; + }); + + return io.tmpFile().then(function(file) { + zip.writeZip(file); // Sync! Why oh why :-( + return io.read(file); + }); + }).then(function(data) { + return data.toString('base64'); + }); + } + + /** + * Encodes this profile as a zipped, base64 encoded directory. + * @return {!Promise} A promise for the encoded profile. + */ + [Symbols.serialize]() { + return this.encode(); + } +} + + +// PUBLIC API + + +exports.Profile = Profile; +exports.decode = decode; +exports.loadUserPrefs = loadUserPrefs; diff --git a/node_modules/selenium-webdriver/http/index.js b/node_modules/selenium-webdriver/http/index.js new file mode 100644 index 000000000..fa98557a0 --- /dev/null +++ b/node_modules/selenium-webdriver/http/index.js @@ -0,0 +1,255 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines an {@linkplain cmd.Executor command executor} that + * communicates with a remote end using HTTP + JSON. + */ + +'use strict'; + +const http = require('http'); +const https = require('https'); +const url = require('url'); + +const httpLib = require('../lib/http'); + + +/** + * @typedef {{protocol: (?string|undefined), + * auth: (?string|undefined), + * hostname: (?string|undefined), + * host: (?string|undefined), + * port: (?string|undefined), + * path: (?string|undefined), + * pathname: (?string|undefined)}} + */ +var RequestOptions; + + +/** + * @param {string} aUrl The request URL to parse. + * @return {RequestOptions} The request options. + * @throws {Error} if the URL does not include a hostname. + */ +function getRequestOptions(aUrl) { + let options = url.parse(aUrl); + if (!options.hostname) { + throw new Error('Invalid URL: ' + aUrl); + } + // Delete the search and has portions as they are not used. + options.search = null; + options.hash = null; + options.path = options.pathname; + return options; +} + + +/** + * A basic HTTP client used to send messages to a remote end. + * + * @implements {httpLib.Client} + */ +class HttpClient { + /** + * @param {string} serverUrl URL for the WebDriver server to send commands to. + * @param {http.Agent=} opt_agent The agent to use for each request. + * Defaults to `http.globalAgent`. + * @param {?string=} opt_proxy The proxy to use for the connection to the + * server. Default is to use no proxy. + */ + constructor(serverUrl, opt_agent, opt_proxy) { + /** @private {http.Agent} */ + this.agent_ = opt_agent || null; + + /** + * Base options for each request. + * @private {RequestOptions} + */ + this.options_ = getRequestOptions(serverUrl); + + /** + * @private {?RequestOptions} + */ + this.proxyOptions_ = opt_proxy ? getRequestOptions(opt_proxy) : null; + } + + /** @override */ + send(httpRequest) { + let data; + + let headers = {}; + httpRequest.headers.forEach(function(value, name) { + headers[name] = value; + }); + + headers['Content-Length'] = 0; + if (httpRequest.method == 'POST' || httpRequest.method == 'PUT') { + data = JSON.stringify(httpRequest.data); + headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + headers['Content-Type'] = 'application/json;charset=UTF-8'; + } + + let path = this.options_.path; + if (path.endsWith('/') && httpRequest.path.startsWith('/')) { + path += httpRequest.path.substring(1); + } else { + path += httpRequest.path; + } + let parsedPath = url.parse(path); + + let options = { + agent: this.agent_ || null, + method: httpRequest.method, + + auth: this.options_.auth, + hostname: this.options_.hostname, + port: this.options_.port, + protocol: this.options_.protocol, + + path: parsedPath.path, + pathname: parsedPath.pathname, + search: parsedPath.search, + hash: parsedPath.hash, + + headers, + }; + + return new Promise((fulfill, reject) => { + sendRequest(options, fulfill, reject, data, this.proxyOptions_); + }); + } +} + + +/** + * Sends a single HTTP request. + * @param {!Object} options The request options. + * @param {function(!httpLib.Response)} onOk The function to call if the + * request succeeds. + * @param {function(!Error)} onError The function to call if the request fails. + * @param {?string=} opt_data The data to send with the request. + * @param {?RequestOptions=} opt_proxy The proxy server to use for the request. + */ +function sendRequest(options, onOk, onError, opt_data, opt_proxy) { + var hostname = options.hostname; + var port = options.port; + + if (opt_proxy) { + let proxy = /** @type {RequestOptions} */(opt_proxy); + + // RFC 2616, section 5.1.2: + // The absoluteURI form is REQUIRED when the request is being made to a + // proxy. + let absoluteUri = url.format(options); + + // RFC 2616, section 14.23: + // An HTTP/1.1 proxy MUST ensure that any request message it forwards does + // contain an appropriate Host header field that identifies the service + // being requested by the proxy. + let targetHost = options.hostname + if (options.port) { + targetHost += ':' + options.port; + } + + // Update the request options with our proxy info. + options.headers['Host'] = targetHost; + options.path = absoluteUri; + options.host = proxy.host; + options.hostname = proxy.hostname; + options.port = proxy.port; + + if (proxy.auth) { + options.headers['Proxy-Authorization'] = + 'Basic ' + new Buffer(proxy.auth).toString('base64'); + } + } + + let requestFn = options.protocol === 'https:' ? https.request : http.request; + var request = requestFn(options, function onResponse(response) { + if (response.statusCode == 302 || response.statusCode == 303) { + try { + var location = url.parse(response.headers['location']); + } catch (ex) { + onError(Error( + 'Failed to parse "Location" header for server redirect: ' + + ex.message + '\nResponse was: \n' + + new httpLib.Response(response.statusCode, response.headers, ''))); + return; + } + + if (!location.hostname) { + location.hostname = hostname; + location.port = port; + } + + request.abort(); + sendRequest({ + method: 'GET', + protocol: location.protocol || options.protocol, + hostname: location.hostname, + port: location.port, + path: location.path, + pathname: location.pathname, + search: location.search, + hash: location.hash, + headers: { + 'Accept': 'application/json; charset=utf-8' + } + }, onOk, onError, undefined, opt_proxy); + return; + } + + var body = []; + response.on('data', body.push.bind(body)); + response.on('end', function() { + var resp = new httpLib.Response( + /** @type {number} */(response.statusCode), + /** @type {!Object} */(response.headers), + body.join('').replace(/\0/g, '')); + onOk(resp); + }); + }); + + request.on('error', function(e) { + if (e.code === 'ECONNRESET') { + setTimeout(function() { + sendRequest(options, onOk, onError, opt_data, opt_proxy); + }, 15); + } else { + var message = e.message; + if (e.code) { + message = e.code + ' ' + message; + } + onError(new Error(message)); + } + }); + + if (opt_data) { + request.write(opt_data); + } + + request.end(); +} + + +// PUBLIC API + +exports.Executor = httpLib.Executor; +exports.HttpClient = HttpClient; +exports.Request = httpLib.Request; +exports.Response = httpLib.Response; diff --git a/node_modules/selenium-webdriver/http/util.js b/node_modules/selenium-webdriver/http/util.js new file mode 100644 index 000000000..7564ba85e --- /dev/null +++ b/node_modules/selenium-webdriver/http/util.js @@ -0,0 +1,139 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Various HTTP utilities. + */ + +'use strict'; + +const Executor = require('./index').Executor, + HttpClient = require('./index').HttpClient, + HttpRequest = require('./index').Request, + Command = require('../lib/command').Command, + CommandName = require('../lib/command').Name, + error = require('../lib/error'), + promise = require('../lib/promise'); + + + +/** + * Queries a WebDriver server for its current status. + * @param {string} url Base URL of the server to query. + * @return {!Promise} A promise that resolves with + * a hash of the server status. + */ +function getStatus(url) { + var client = new HttpClient(url); + var executor = new Executor(client); + var command = new Command(CommandName.GET_SERVER_STATUS); + return executor.execute(command); +} + + +// PUBLIC API + + +/** + * Queries a WebDriver server for its current status. + * @param {string} url Base URL of the server to query. + * @return {!Promise} A promise that resolves with + * a hash of the server status. + */ +exports.getStatus = getStatus; + + +/** + * Waits for a WebDriver server to be healthy and accepting requests. + * @param {string} url Base URL of the server to query. + * @param {number} timeout How long to wait for the server. + * @return {!promise.Promise} A promise that will resolve when the + * server is ready. + */ +exports.waitForServer = function(url, timeout) { + var ready = promise.defer(), + start = Date.now(); + checkServerStatus(); + return ready.promise; + + function checkServerStatus() { + return getStatus(url).then(status => ready.fulfill(status), onError); + } + + function onError(e) { + // Some servers don't support the status command. If they are able to + // response with an error, then can consider the server ready. + if (e instanceof error.UnsupportedOperationError) { + ready.fulfill(); + return; + } + + if (Date.now() - start > timeout) { + ready.reject( + Error('Timed out waiting for the WebDriver server at ' + url)); + } else { + setTimeout(function() { + if (ready.promise.isPending()) { + checkServerStatus(); + } + }, 50); + } + } +}; + + +/** + * Polls a URL with GET requests until it returns a 2xx response or the + * timeout expires. + * @param {string} url The URL to poll. + * @param {number} timeout How long to wait, in milliseconds. + * @return {!promise.Promise} A promise that will resolve when the + * URL responds with 2xx. + */ +exports.waitForUrl = function(url, timeout) { + var client = new HttpClient(url), + request = new HttpRequest('GET', ''), + ready = promise.defer(), + start = Date.now(); + testUrl(); + return ready.promise; + + function testUrl() { + client.send(request).then(onResponse, onError); + } + + function onError() { + if (Date.now() - start > timeout) { + ready.reject(Error( + 'Timed out waiting for the URL to return 2xx: ' + url)); + } else { + setTimeout(function() { + if (ready.promise.isPending()) { + testUrl(); + } + }, 50); + } + } + + function onResponse(response) { + if (!ready.promise.isPending()) return; + if (response.status > 199 && response.status < 300) { + return ready.fulfill(); + } + onError(); + } +}; diff --git a/node_modules/selenium-webdriver/ie.js b/node_modules/selenium-webdriver/ie.js new file mode 100644 index 000000000..40095a0bf --- /dev/null +++ b/node_modules/selenium-webdriver/ie.js @@ -0,0 +1,445 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Defines a {@linkplain Driver WebDriver} client for Microsoft's + * Internet Explorer. Before using the IEDriver, you must download the latest + * [IEDriverServer](http://selenium-release.storage.googleapis.com/index.html) + * and place it on your + * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). You must also apply + * the system configuration outlined on the Selenium project + * [wiki](https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver) + */ + +'use strict'; + +const fs = require('fs'), + util = require('util'); + +const http = require('./http'), + io = require('./io'), + capabilities = require('./lib/capabilities'), + promise = require('./lib/promise'), + webdriver = require('./lib/webdriver'), + portprober = require('./net/portprober'), + remote = require('./remote'); + + +const IEDRIVER_EXE = 'IEDriverServer.exe'; + + + +/** + * IEDriverServer logging levels. + * @enum {string} + */ +const Level = { + FATAL: 'FATAL', + ERROR: 'ERROR', + WARN: 'WARN', + INFO: 'INFO', + DEBUG: 'DEBUG', + TRACE: 'TRACE' +}; + + + +/** + * Option keys: + * https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#ie-specific + * @enum {string} + */ +const Key = { + IGNORE_PROTECTED_MODE_SETTINGS: 'ignoreProtectedModeSettings', + IGNORE_ZOOM_SETTING: 'ignoreZoomSetting', + INITIAL_BROWSER_URL: 'initialBrowserUrl', + ENABLE_PERSISTENT_HOVER: 'enablePersistentHover', + ENABLE_ELEMENT_CACHE_CLEANUP: 'enableElementCacheCleanup', + REQUIRE_WINDOW_FOCUS: 'requireWindowFocus', + BROWSER_ATTACH_TIMEOUT: 'browserAttachTimeout', + FORCE_CREATE_PROCESS: 'ie.forceCreateProcessApi', + BROWSER_COMMAND_LINE_SWITCHES: 'ie.browserCommandLineSwitches', + USE_PER_PROCESS_PROXY: 'ie.usePerProcessProxy', + ENSURE_CLEAN_SESSION: 'ie.ensureCleanSession', + LOG_FILE: 'logFile', + LOG_LEVEL: 'logLevel', + HOST: 'host', + EXTRACT_PATH: 'extractPath', + SILENT: 'silent' +}; + + +/** + * Class for managing IEDriver specific options. + */ +class Options { + constructor() { + /** @private {!Object<(boolean|number|string|!Array)>} */ + this.options_ = {}; + + /** @private {(capabilities.ProxyConfig|null)} */ + this.proxy_ = null; + } + + /** + * Extracts the IEDriver specific options from the given capabilities + * object. + * @param {!capabilities.Capabilities} caps The capabilities object. + * @return {!Options} The IEDriver options. + */ + static fromCapabilities(caps) { + var options = new Options(); + var map = options.options_; + + Object.keys(Key).forEach(function(key) { + key = Key[key]; + if (caps.has(key)) { + map[key] = caps.get(key); + } + }); + + if (caps.has(capabilities.Capability.PROXY)) { + options.setProxy(caps.get(capabilities.Capability.PROXY)); + } + + return options; + } + + /** + * Whether to disable the protected mode settings check when the session is + * created. Disbling this setting may lead to significant instability as the + * browser may become unresponsive/hang. Only "best effort" support is provided + * when using this capability. + * + * For more information, refer to the IEDriver's + * [required system configuration](http://goo.gl/eH0Yi3). + * + * @param {boolean} ignoreSettings Whether to ignore protected mode settings. + * @return {!Options} A self reference. + */ + introduceFlakinessByIgnoringProtectedModeSettings(ignoreSettings) { + this.options_[Key.IGNORE_PROTECTED_MODE_SETTINGS] = !!ignoreSettings; + return this; + } + + /** + * Indicates whether to skip the check that the browser's zoom level is set to + * 100%. + * + * @param {boolean} ignore Whether to ignore the browser's zoom level settings. + * @return {!Options} A self reference. + */ + ignoreZoomSetting(ignore) { + this.options_[Key.IGNORE_ZOOM_SETTING] = !!ignore; + return this; + } + + /** + * Sets the initial URL loaded when IE starts. This is intended to be used with + * {@link #ignoreProtectedModeSettings} to allow the user to initialize IE in + * the proper Protected Mode zone. Setting this option may cause browser + * instability or flaky and unresponsive code. Only "best effort" support is + * provided when using this option. + * + * @param {string} url The initial browser URL. + * @return {!Options} A self reference. + */ + initialBrowserUrl(url) { + this.options_[Key.INITIAL_BROWSER_URL] = url; + return this; + } + + /** + * Configures whether to enable persistent mouse hovering (true by default). + * Persistent hovering is achieved by continuously firing mouse over events at + * the last location the mouse cursor has been moved to. + * + * @param {boolean} enable Whether to enable persistent hovering. + * @return {!Options} A self reference. + */ + enablePersistentHover(enable) { + this.options_[Key.ENABLE_PERSISTENT_HOVER] = !!enable; + return this; + } + + /** + * Configures whether the driver should attempt to remove obsolete + * {@linkplain webdriver.WebElement WebElements} from its internal cache on + * page navigation (true by default). Disabling this option will cause the + * driver to run with a larger memory footprint. + * + * @param {boolean} enable Whether to enable element reference cleanup. + * @return {!Options} A self reference. + */ + enableElementCacheCleanup(enable) { + this.options_[Key.ENABLE_ELEMENT_CACHE_CLEANUP] = !!enable; + return this; + } + + /** + * Configures whether to require the IE window to have input focus before + * performing any user interactions (i.e. mouse or keyboard events). This + * option is disabled by default, but delivers much more accurate interaction + * events when enabled. + * + * @param {boolean} require Whether to require window focus. + * @return {!Options} A self reference. + */ + requireWindowFocus(require) { + this.options_[Key.REQUIRE_WINDOW_FOCUS] = !!require; + return this; + } + + /** + * Configures the timeout, in milliseconds, that the driver will attempt to + * located and attach to a newly opened instance of Internet Explorer. The + * default is zero, which indicates waiting indefinitely. + * + * @param {number} timeout How long to wait for IE. + * @return {!Options} A self reference. + */ + browserAttachTimeout(timeout) { + this.options_[Key.BROWSER_ATTACH_TIMEOUT] = Math.max(timeout, 0); + return this; + } + + /** + * Configures whether to launch Internet Explorer using the CreateProcess API. + * If this option is not specified, IE is launched using IELaunchURL, if + * available. For IE 8 and above, this option requires the TabProcGrowth + * registry value to be set to 0. + * + * @param {boolean} force Whether to use the CreateProcess API. + * @return {!Options} A self reference. + */ + forceCreateProcessApi(force) { + this.options_[Key.FORCE_CREATE_PROCESS] = !!force; + return this; + } + + /** + * Specifies command-line switches to use when launching Internet Explorer. + * This is only valid when used with {@link #forceCreateProcessApi}. + * + * @param {...(string|!Array.)} var_args The arguments to add. + * @return {!Options} A self reference. + */ + addArguments(var_args) { + var args = this.options_[Key.BROWSER_COMMAND_LINE_SWITCHES] || []; + args = args.concat.apply(args, arguments); + this.options_[Key.BROWSER_COMMAND_LINE_SWITCHES] = args; + return this; + } + + /** + * Configures whether proxies should be configured on a per-process basis. If + * not set, setting a {@linkplain #setProxy proxy} will configure the system + * proxy. The default behavior is to use the system proxy. + * + * @param {boolean} enable Whether to enable per-process proxy settings. + * @return {!Options} A self reference. + */ + usePerProcessProxy(enable) { + this.options_[Key.USE_PER_PROCESS_PROXY] = !!enable; + return this; + } + + /** + * Configures whether to clear the cache, cookies, history, and saved form data + * before starting the browser. _Using this capability will clear session data + * for all running instances of Internet Explorer, including those started + * manually._ + * + * @param {boolean} cleanSession Whether to clear all session data on startup. + * @return {!Options} A self reference. + */ + ensureCleanSession(cleanSession) { + this.options_[Key.ENSURE_CLEAN_SESSION] = !!cleanSession; + return this; + } + + /** + * Sets the path to the log file the driver should log to. + * @param {string} file The log file path. + * @return {!Options} A self reference. + */ + setLogFile(file) { + this.options_[Key.LOG_FILE] = file; + return this; + } + + /** + * Sets the IEDriverServer's logging {@linkplain Level level}. + * @param {Level} level The logging level. + * @return {!Options} A self reference. + */ + setLogLevel(level) { + this.options_[Key.LOG_LEVEL] = level; + return this; + } + + /** + * Sets the IP address of the driver's host adapter. + * @param {string} host The IP address to use. + * @return {!Options} A self reference. + */ + setHost(host) { + this.options_[Key.HOST] = host; + return this; + } + + /** + * Sets the path of the temporary data directory to use. + * @param {string} path The log file path. + * @return {!Options} A self reference. + */ + setExtractPath(path) { + this.options_[Key.EXTRACT_PATH] = path; + return this; + } + + /** + * Sets whether the driver should start in silent mode. + * @param {boolean} silent Whether to run in silent mode. + * @return {!Options} A self reference. + */ + silent(silent) { + this.options_[Key.SILENT] = silent; + return this; + } + + /** + * Sets the proxy settings for the new session. + * @param {capabilities.ProxyConfig} proxy The proxy configuration to use. + * @return {!Options} A self reference. + */ + setProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * Converts this options instance to a {@link capabilities.Capabilities} + * object. + * @param {capabilities.Capabilities=} opt_capabilities The capabilities to + * merge these options into, if any. + * @return {!capabilities.Capabilities} The capabilities. + */ + toCapabilities(opt_capabilities) { + var caps = opt_capabilities || capabilities.Capabilities.ie(); + if (this.proxy_) { + caps.set(capabilities.Capability.PROXY, this.proxy_); + } + Object.keys(this.options_).forEach(function(key) { + caps.set(key, this.options_[key]); + }, this); + return caps; + } +} + + +function createServiceFromCapabilities(capabilities) { + if (process.platform !== 'win32') { + throw Error( + 'The IEDriver may only be used on Windows, but you appear to be on ' + + process.platform + '. Did you mean to run against a remote ' + + 'WebDriver server?'); + } + + let exe = io.findInPath(IEDRIVER_EXE, true); + if (!exe || !fs.existsSync(exe)) { + throw Error( + `${IEDRIVER_EXE} could not be found on the current PATH. Please ` + + `download the latest version of ${IEDRIVER_EXE} from ` + + 'http://selenium-release.storage.googleapis.com/index.html and ' + + 'ensure it can be found on your system PATH.'); + } + + var args = []; + if (capabilities.has(Key.HOST)) { + args.push('--host=' + capabilities.get(Key.HOST)); + } + if (capabilities.has(Key.LOG_FILE)) { + args.push('--log-file=' + capabilities.get(Key.LOG_FILE)); + } + if (capabilities.has(Key.LOG_LEVEL)) { + args.push('--log-level=' + capabilities.get(Key.LOG_LEVEL)); + } + if (capabilities.has(Key.EXTRACT_PATH)) { + args.push('--extract-path=' + capabilities.get(Key.EXTRACT_PATH)); + } + if (capabilities.get(Key.SILENT)) { + args.push('--silent'); + } + + var port = portprober.findFreePort(); + return new remote.DriverService(exe, { + loopback: true, + port: port, + args: port.then(function(port) { + return args.concat('--port=' + port); + }), + stdio: 'ignore' + }); +} + + +/** + * A WebDriver client for Microsoft's Internet Explorer. + */ +class Driver extends webdriver.WebDriver { + /** + * @param {(capabilities.Capabilities|Options)=} opt_config The configuration + * options. + * @param {promise.ControlFlow=} opt_flow The control flow to use, + * or {@code null} to use the currently active flow. + */ + constructor(opt_config, opt_flow) { + var caps = opt_config instanceof Options ? + opt_config.toCapabilities() : + (opt_config || capabilities.Capabilities.ie()); + + var service = createServiceFromCapabilities(caps); + var client = service.start().then(url => new http.HttpClient(url)); + var executor = new http.Executor(client); + var driver = webdriver.WebDriver.createSession(executor, caps, opt_flow); + + super(driver.getSession(), executor, driver.controlFlow()); + + let boundQuit = this.quit.bind(this); + + /** @override */ + this.quit = function() { + return boundQuit().finally(service.kill.bind(service)); + }; + } + + /** + * This function is a no-op as file detectors are not supported by this + * implementation. + * @override + */ + setFileDetector() {} +} + + +// PUBLIC API + + +exports.Driver = Driver; +exports.Options = Options; +exports.Level = Level; diff --git a/node_modules/selenium-webdriver/index.js b/node_modules/selenium-webdriver/index.js new file mode 100644 index 000000000..47f825738 --- /dev/null +++ b/node_modules/selenium-webdriver/index.js @@ -0,0 +1,622 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview The main user facing module. Exports WebDriver's primary + * public API and provides convenience assessors to certain sub-modules. + */ + +'use strict'; + +const chrome = require('./chrome'); +const edge = require('./edge'); +const firefox = require('./firefox'); +const _http = require('./http'); +const ie = require('./ie'); +const actions = require('./lib/actions'); +const by = require('./lib/by'); +const capabilities = require('./lib/capabilities'); +const command = require('./lib/command'); +const error = require('./lib/error'); +const events = require('./lib/events'); +const input = require('./lib/input'); +const logging = require('./lib/logging'); +const promise = require('./lib/promise'); +const session = require('./lib/session'); +const until = require('./lib/until'); +const webdriver = require('./lib/webdriver'); +const opera = require('./opera'); +const phantomjs = require('./phantomjs'); +const remote = require('./remote'); +const safari = require('./safari'); + +const Browser = capabilities.Browser; +const Capabilities = capabilities.Capabilities; +const Capability = capabilities.Capability; +const WebDriver = webdriver.WebDriver; + + + +var seleniumServer; + +/** + * Starts an instance of the Selenium server if not yet running. + * @param {string} jar Path to the server jar to use. + * @return {!Promise} A promise for the server's + * addrss once started. + */ +function startSeleniumServer(jar) { + if (!seleniumServer) { + seleniumServer = new remote.SeleniumServer(jar); + } + return seleniumServer.start(); +} + + +/** + * {@linkplain webdriver.WebDriver#setFileDetector WebDriver's setFileDetector} + * method uses a non-standard command to transfer files from the local client + * to the remote end hosting the browser. Many of the WebDriver sub-types, like + * the {@link chrome.Driver} and {@link firefox.Driver}, do not support this + * command. Thus, these classes override the `setFileDetector` to no-op. + * + * This function uses a mixin to re-enable `setFileDetector` by calling the + * original method on the WebDriver prototype directly. This is used only when + * the builder creates a Chrome or Firefox instance that communicates with a + * remote end (and thus, support for remote file detectors is unknown). + * + * @param {function(new: webdriver.WebDriver, ...?)} ctor + * @return {function(new: webdriver.WebDriver, ...?)} + */ +function ensureFileDetectorsAreEnabled(ctor) { + const mixin = class extends ctor { + /** @param {input.FileDetector} detector */ + setFileDetector(detector) { + webdriver.WebDriver.prototype.setFileDetector.call(this, detector); + } + }; + return mixin; +} + + +/** + * Creates new {@link webdriver.WebDriver WebDriver} instances. The environment + * variables listed below may be used to override a builder's configuration, + * allowing quick runtime changes. + * + * - {@code SELENIUM_BROWSER}: defines the target browser in the form + * {@code browser[:version][:platform]}. + * + * - {@code SELENIUM_REMOTE_URL}: defines the remote URL for all builder + * instances. This environment variable should be set to a fully qualified + * URL for a WebDriver server (e.g. http://localhost:4444/wd/hub). This + * option always takes precedence over {@code SELENIUM_SERVER_JAR}. + * + * - {@code SELENIUM_SERVER_JAR}: defines the path to the + * + * standalone Selenium server jar to use. The server will be started the + * first time a WebDriver instance and be killed when the process exits. + * + * Suppose you had mytest.js that created WebDriver with + * + * var driver = new webdriver.Builder() + * .forBrowser('chrome') + * .build(); + * + * This test could be made to use Firefox on the local machine by running with + * `SELENIUM_BROWSER=firefox node mytest.js`. Rather than change the code to + * target Google Chrome on a remote machine, you can simply set the + * `SELENIUM_BROWSER` and `SELENIUM_REMOTE_URL` environment variables: + * + * SELENIUM_BROWSER=chrome:36:LINUX \ + * SELENIUM_REMOTE_URL=http://www.example.com:4444/wd/hub \ + * node mytest.js + * + * You could also use a local copy of the standalone Selenium server: + * + * SELENIUM_BROWSER=chrome:36:LINUX \ + * SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar \ + * node mytest.js + */ +class Builder { + constructor() { + /** @private {promise.ControlFlow} */ + this.flow_ = null; + + /** @private {string} */ + this.url_ = ''; + + /** @private {?string} */ + this.proxy_ = null; + + /** @private {!Capabilities} */ + this.capabilities_ = new Capabilities(); + + /** @private {chrome.Options} */ + this.chromeOptions_ = null; + + /** @private {firefox.Options} */ + this.firefoxOptions_ = null; + + /** @private {opera.Options} */ + this.operaOptions_ = null; + + /** @private {ie.Options} */ + this.ieOptions_ = null; + + /** @private {safari.Options} */ + this.safariOptions_ = null; + + /** @private {edge.Options} */ + this.edgeOptions_ = null; + + /** @private {boolean} */ + this.ignoreEnv_ = false; + + /** @private {http.Agent} */ + this.agent_ = null; + } + + /** + * Configures this builder to ignore any environment variable overrides and to + * only use the configuration specified through this instance's API. + * + * @return {!Builder} A self reference. + */ + disableEnvironmentOverrides() { + this.ignoreEnv_ = true; + return this; + } + + /** + * Sets the URL of a remote WebDriver server to use. Once a remote URL has + * been specified, the builder direct all new clients to that server. If this + * method is never called, the Builder will attempt to create all clients + * locally. + * + * As an alternative to this method, you may also set the + * `SELENIUM_REMOTE_URL` environment variable. + * + * @param {string} url The URL of a remote server to use. + * @return {!Builder} A self reference. + */ + usingServer(url) { + this.url_ = url; + return this; + } + + /** + * @return {string} The URL of the WebDriver server this instance is + * configured to use. + */ + getServerUrl() { + return this.url_; + } + + /** + * Sets the URL of the proxy to use for the WebDriver's HTTP connections. + * If this method is never called, the Builder will create a connection + * without a proxy. + * + * @param {string} proxy The URL of a proxy to use. + * @return {!Builder} A self reference. + */ + usingWebDriverProxy(proxy) { + this.proxy_ = proxy; + return this; + } + + /** + * @return {?string} The URL of the proxy server to use for the WebDriver's + * HTTP connections, or `null` if not set. + */ + getWebDriverProxy() { + return this.proxy_; + } + + /** + * Sets the http agent to use for each request. + * If this method is not called, the Builder will use http.globalAgent by default. + * + * @param {http.Agent} agent The agent to use for each request. + * @return {!Builder} A self reference. + */ + usingHttpAgent(agent) { + this.agent_ = agent; + return this; + } + + /** + * @return {http.Agent} The http agent used for each request + */ + getHttpAgent() { + return this.agent_; + } + + /** + * Sets the desired capabilities when requesting a new session. This will + * overwrite any previously set capabilities. + * @param {!(Object|Capabilities)} capabilities The desired capabilities for + * a new session. + * @return {!Builder} A self reference. + */ + withCapabilities(capabilities) { + this.capabilities_ = new Capabilities(capabilities); + return this; + } + + /** + * Returns the base set of capabilities this instance is currently configured + * to use. + * @return {!Capabilities} The current capabilities for this builder. + */ + getCapabilities() { + return this.capabilities_; + } + + /** + * Configures the target browser for clients created by this instance. + * Any calls to {@link #withCapabilities} after this function will + * overwrite these settings. + * + * You may also define the target browser using the {@code SELENIUM_BROWSER} + * environment variable. If set, this environment variable should be of the + * form `browser[:[version][:platform]]`. + * + * @param {(string|Browser)} name The name of the target browser; + * common defaults are available on the {@link webdriver.Browser} enum. + * @param {string=} opt_version A desired version; may be omitted if any + * version should be used. + * @param {string=} opt_platform The desired platform; may be omitted if any + * version may be used. + * @return {!Builder} A self reference. + */ + forBrowser(name, opt_version, opt_platform) { + this.capabilities_.set(Capability.BROWSER_NAME, name); + this.capabilities_.set(Capability.VERSION, opt_version || null); + this.capabilities_.set(Capability.PLATFORM, opt_platform || null); + return this; + } + + /** + * Sets the proxy configuration for the target browser. + * Any calls to {@link #withCapabilities} after this function will + * overwrite these settings. + * + * @param {!capabilities.ProxyConfig} config The configuration to use. + * @return {!Builder} A self reference. + */ + setProxy(config) { + this.capabilities_.setProxy(config); + return this; + } + + /** + * Sets the logging preferences for the created session. Preferences may be + * changed by repeated calls, or by calling {@link #withCapabilities}. + * @param {!(./lib/logging.Preferences|Object)} prefs The + * desired logging preferences. + * @return {!Builder} A self reference. + */ + setLoggingPrefs(prefs) { + this.capabilities_.setLoggingPrefs(prefs); + return this; + } + + /** + * Sets whether native events should be used. + * @param {boolean} enabled Whether to enable native events. + * @return {!Builder} A self reference. + */ + setEnableNativeEvents(enabled) { + this.capabilities_.setEnableNativeEvents(enabled); + return this; + } + + /** + * Sets how elements should be scrolled into view for interaction. + * @param {number} behavior The desired scroll behavior: either 0 to align + * with the top of the viewport or 1 to align with the bottom. + * @return {!Builder} A self reference. + */ + setScrollBehavior(behavior) { + this.capabilities_.setScrollBehavior(behavior); + return this; + } + + /** + * Sets the default action to take with an unexpected alert before returning + * an error. + * @param {string} behavior The desired behavior; should be "accept", + * "dismiss", or "ignore". Defaults to "dismiss". + * @return {!Builder} A self reference. + */ + setAlertBehavior(behavior) { + this.capabilities_.setAlertBehavior(behavior); + return this; + } + + /** + * Sets Chrome specific {@linkplain chrome.Options options} for drivers + * created by this builder. Any logging or proxy settings defined on the given + * options will take precedence over those set through + * {@link #setLoggingPrefs} and {@link #setProxy}, respectively. + * + * @param {!chrome.Options} options The ChromeDriver options to use. + * @return {!Builder} A self reference. + */ + setChromeOptions(options) { + this.chromeOptions_ = options; + return this; + } + + /** + * Sets Firefox specific {@linkplain firefox.Options options} for drivers + * created by this builder. Any logging or proxy settings defined on the given + * options will take precedence over those set through + * {@link #setLoggingPrefs} and {@link #setProxy}, respectively. + * + * @param {!firefox.Options} options The FirefoxDriver options to use. + * @return {!Builder} A self reference. + */ + setFirefoxOptions(options) { + this.firefoxOptions_ = options; + return this; + } + + /** + * @return {firefox.Options} the Firefox specific options currently configured + * for this instance. + */ + getFirefoxOptions() { + return this.firefoxOptions_; + } + + /** + * Sets Opera specific {@linkplain opera.Options options} for drivers created + * by this builder. Any logging or proxy settings defined on the given options + * will take precedence over those set through {@link #setLoggingPrefs} and + * {@link #setProxy}, respectively. + * + * @param {!opera.Options} options The OperaDriver options to use. + * @return {!Builder} A self reference. + */ + setOperaOptions(options) { + this.operaOptions_ = options; + return this; + } + + /** + * Set Internet Explorer specific {@linkplain ie.Options options} for drivers + * created by this builder. Any proxy settings defined on the given options + * will take precedence over those set through {@link #setProxy}. + * + * @param {!ie.Options} options The IEDriver options to use. + * @return {!Builder} A self reference. + */ + setIeOptions(options) { + this.ieOptions_ = options; + return this; + } + + /** + * Set {@linkplain edge.Options options} specific to Microsoft's Edge browser + * for drivers created by this builder. Any proxy settings defined on the + * given options will take precedence over those set through + * {@link #setProxy}. + * + * @param {!edge.Options} options The MicrosoftEdgeDriver options to use. + * @return {!Builder} A self reference. + */ + setEdgeOptions(options) { + this.edgeOptions_ = options; + return this; + } + + /** + * Sets Safari specific {@linkplain safari.Options options} for drivers + * created by this builder. Any logging settings defined on the given options + * will take precedence over those set through {@link #setLoggingPrefs}. + * + * @param {!safari.Options} options The Safari options to use. + * @return {!Builder} A self reference. + */ + setSafariOptions(options) { + this.safariOptions_ = options; + return this; + } + + /** + * @return {safari.Options} the Safari specific options currently configured + * for this instance. + */ + getSafariOptions() { + return this.safariOptions_; + } + + /** + * Sets the control flow that created drivers should execute actions in. If + * the flow is never set, or is set to {@code null}, it will use the active + * flow at the time {@link #build()} is called. + * @param {promise.ControlFlow} flow The control flow to use, or + * {@code null} to + * @return {!Builder} A self reference. + */ + setControlFlow(flow) { + this.flow_ = flow; + return this; + } + + /** + * Creates a new WebDriver client based on this builder's current + * configuration. + * + * While this method will immediately return a new WebDriver instance, any + * commands issued against it will be deferred until the associated browser + * has been fully initialized. Users may call {@link #buildAsync()} to obtain + * a promise that will not be fulfilled until the browser has been created + * (the difference is purely in style). + * + * @return {!webdriver.WebDriver} A new WebDriver instance. + * @throws {Error} If the current configuration is invalid. + * @see #buildAsync() + */ + build() { + // Create a copy for any changes we may need to make based on the current + // environment. + var capabilities = new Capabilities(this.capabilities_); + + var browser; + if (!this.ignoreEnv_ && process.env.SELENIUM_BROWSER) { + browser = process.env.SELENIUM_BROWSER.split(/:/, 3); + capabilities.set(Capability.BROWSER_NAME, browser[0]); + capabilities.set(Capability.VERSION, browser[1] || null); + capabilities.set(Capability.PLATFORM, browser[2] || null); + } + + browser = capabilities.get(Capability.BROWSER_NAME); + + if (typeof browser !== 'string') { + throw TypeError( + `Target browser must be a string, but is <${typeof browser}>;` + + ' did you forget to call forBrowser()?'); + } + + if (browser === 'ie') { + browser = Browser.INTERNET_EXPLORER; + } + + // Apply browser specific overrides. + if (browser === Browser.CHROME && this.chromeOptions_) { + capabilities.merge(this.chromeOptions_.toCapabilities()); + + } else if (browser === Browser.FIREFOX && this.firefoxOptions_) { + capabilities.merge(this.firefoxOptions_.toCapabilities()); + + } else if (browser === Browser.INTERNET_EXPLORER && this.ieOptions_) { + capabilities.merge(this.ieOptions_.toCapabilities()); + + } else if (browser === Browser.OPERA && this.operaOptions_) { + capabilities.merge(this.operaOptions_.toCapabilities()); + + } else if (browser === Browser.SAFARI && this.safariOptions_) { + capabilities.merge(this.safariOptions_.toCapabilities()); + + } else if (browser === Browser.EDGE && this.edgeOptions_) { + capabilities.merge(this.edgeOptions_.toCapabilities()); + } + + // Check for a remote browser. + let url = this.url_; + if (!this.ignoreEnv_) { + if (process.env.SELENIUM_REMOTE_URL) { + url = process.env.SELENIUM_REMOTE_URL; + } else if (process.env.SELENIUM_SERVER_JAR) { + url = startSeleniumServer(process.env.SELENIUM_SERVER_JAR); + } + } + + if (url) { + let client = Promise.resolve(url) + .then(url => new _http.HttpClient(url, this.agent_, this.proxy_)); + let executor = new _http.Executor(client); + + if (browser === Browser.CHROME) { + const driver = ensureFileDetectorsAreEnabled(chrome.Driver); + return new driver(capabilities, null, this.flow_, executor); + } + + if (browser === Browser.FIREFOX) { + const driver = ensureFileDetectorsAreEnabled(firefox.Driver); + return new driver(capabilities, executor, this.flow_); + } + + return WebDriver.createSession(executor, capabilities, this.flow_); + } + + // Check for a native browser. + switch (browser) { + case Browser.CHROME: + return new chrome.Driver(capabilities, null, this.flow_); + + case Browser.FIREFOX: + return new firefox.Driver(capabilities, null, this.flow_); + + case Browser.INTERNET_EXPLORER: + return new ie.Driver(capabilities, this.flow_); + + case Browser.EDGE: + return new edge.Driver(capabilities, null, this.flow_); + + case Browser.OPERA: + return new opera.Driver(capabilities, null, this.flow_); + + case Browser.PHANTOM_JS: + return new phantomjs.Driver(capabilities, this.flow_); + + case Browser.SAFARI: + return new safari.Driver(capabilities, this.flow_); + + default: + throw new Error('Do not know how to build driver: ' + browser + + '; did you forget to call usingServer(url)?'); + } + } + + /** + * Creates a new WebDriver client based on this builder's current + * configuration. This method returns a promise that will not be fulfilled + * until the new browser session has been fully initialized. + * + * __Note:__ this method is purely a convenience wrapper around + * {@link #build()}. + * + * @return {!promise.Promise} A promise that will be + * fulfilled with the newly created WebDriver instance once the browser + * has been fully initialized. + * @see #build() + */ + buildAsync() { + let driver = this.build(); + return driver.getSession().then(() => driver); + } +} + + +// PUBLIC API + + +exports.ActionSequence = actions.ActionSequence; +exports.Browser = capabilities.Browser; +exports.Builder = Builder; +exports.Button = input.Button; +exports.By = by.By; +exports.Capabilities = capabilities.Capabilities; +exports.Capability = capabilities.Capability; +exports.Condition = webdriver.Condition; +exports.EventEmitter = events.EventEmitter; +exports.FileDetector = input.FileDetector; +exports.Key = input.Key; +exports.Session = session.Session; +exports.WebDriver = webdriver.WebDriver; +exports.WebElement = webdriver.WebElement; +exports.WebElementCondition = webdriver.WebElementCondition; +exports.WebElementPromise = webdriver.WebElementPromise; +exports.error = error; +exports.logging = logging; +exports.promise = promise; +exports.until = until; diff --git a/node_modules/selenium-webdriver/io/exec.js b/node_modules/selenium-webdriver/io/exec.js new file mode 100644 index 000000000..948749e83 --- /dev/null +++ b/node_modules/selenium-webdriver/io/exec.js @@ -0,0 +1,153 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const childProcess = require('child_process'); + + +/** + * A hash with configuration options for an executed command. + * + * - `args` - Command line arguments. + * - `env` - Command environment; will inherit from the current process if + * missing. + * - `stdio` - IO configuration for the spawned server process. For more + * information, refer to the documentation of `child_process.spawn`. + * + * @typedef {{ + * args: (!Array|undefined), + * env: (!Object|undefined), + * stdio: (string|!Array| + * undefined) + * }} + */ +var Options; + + +/** + * Describes a command's termination conditions. + */ +class Result { + /** + * @param {?number} code The exit code, or {@code null} if the command did not + * exit normally. + * @param {?string} signal The signal used to kill the command, or + * {@code null}. + */ + constructor(code, signal) { + /** @type {?number} */ + this.code = code; + + /** @type {?string} */ + this.signal = signal; + } + + /** @override */ + toString() { + return `Result(code=${this.code}, signal=${this.signal})`; + } +} + + +const COMMAND_RESULT = /** !WeakMap> */new WeakMap; +const KILL_HOOK = /** !WeakMap */new WeakMap; + +/** + * Represents a command running in a sub-process. + */ +class Command { + /** + * @param {!Promise} result The command result. + * @param {function(string)} onKill The function to call when {@link #kill()} + * is called. + */ + constructor(result, onKill) { + COMMAND_RESULT.set(this, result); + KILL_HOOK.set(this, onKill); + } + + /** + * @return {!Promise} A promise for the result of this + * command. + */ + result() { + return /** @type {!Promise} */(COMMAND_RESULT.get(this)); + } + + /** + * Sends a signal to the underlying process. + * @param {string=} opt_signal The signal to send; defaults to `SIGTERM`. + */ + kill(opt_signal) { + KILL_HOOK.get(this)(opt_signal || 'SIGTERM'); + } +} + + +// PUBLIC API + + +/** + * Spawns a child process. The returned {@link Command} may be used to wait + * for the process result or to send signals to the process. + * + * @param {string} command The executable to spawn. + * @param {Options=} opt_options The command options. + * @return {!Command} The launched command. + */ +module.exports = function exec(command, opt_options) { + var options = opt_options || {}; + + var proc = childProcess.spawn(command, options.args || [], { + env: options.env || process.env, + stdio: options.stdio || 'ignore' + }); + + // This process should not wait on the spawned child, however, we do + // want to ensure the child is killed when this process exits. + proc.unref(); + process.once('exit', onProcessExit); + + let result = new Promise(resolve => { + proc.once('exit', (code, signal) => { + proc = null; + process.removeListener('exit', onProcessExit); + resolve(new Result(code, signal)); + }); + }); + return new Command(result, killCommand); + + function onProcessExit() { + killCommand('SIGTERM'); + } + + function killCommand(signal) { + process.removeListener('exit', onProcessExit); + if (proc) { + proc.kill(signal); + proc = null; + } + } +}; + +// Exported to improve generated API documentation. + +module.exports.Command = Command; +/** @typedef {!Options} */ +module.exports.Options = Options; +module.exports.Result = Result; diff --git a/node_modules/selenium-webdriver/io/index.js b/node_modules/selenium-webdriver/io/index.js new file mode 100644 index 000000000..17aceac47 --- /dev/null +++ b/node_modules/selenium-webdriver/io/index.js @@ -0,0 +1,300 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +var fs = require('fs'), + path = require('path'), + rimraf = require('rimraf'), + tmp = require('tmp'); + + +/** + * @param {!Function} fn . + * @return {!Promise} . + * @template T + */ +function checkedCall(fn) { + return new Promise((resolve, reject) => { + try { + fn((err, value) => { + if (err) { + reject(err); + } else { + resolve(value); + } + }); + } catch (e) { + reject(e); + } + }); +} + + + +// PUBLIC API + + + +/** + * Recursively removes a directory and all of its contents. This is equivalent + * to {@code rm -rf} on a POSIX system. + * @param {string} dirPath Path to the directory to remove. + * @return {!Promise} A promise to be resolved when the operation has + * completed. + */ +exports.rmDir = function(dirPath) { + return new Promise(function(fulfill, reject) { + var numAttempts = 0; + attemptRm(); + function attemptRm() { + numAttempts += 1; + rimraf(dirPath, function(err) { + if (err) { + if (err.code && err.code === 'ENOTEMPTY' && numAttempts < 2) { + attemptRm(); + return; + } + reject(err); + } else { + fulfill(); + } + }); + } + }); +}; + + +/** + * Copies one file to another. + * @param {string} src The source file. + * @param {string} dst The destination file. + * @return {!Promise} A promise for the copied file's path. + */ +exports.copy = function(src, dst) { + return new Promise(function(fulfill, reject) { + var rs = fs.createReadStream(src); + rs.on('error', reject); + rs.on('end', () => fulfill(dst)); + + var ws = fs.createWriteStream(dst); + ws.on('error', reject); + + rs.pipe(ws); + }); +}; + + +/** + * Recursively copies the contents of one directory to another. + * @param {string} src The source directory to copy. + * @param {string} dst The directory to copy into. + * @param {(RegExp|function(string): boolean)=} opt_exclude An exclusion filter + * as either a regex or predicate function. All files matching this filter + * will not be copied. + * @return {!Promise} A promise for the destination + * directory's path once all files have been copied. + */ +exports.copyDir = function(src, dst, opt_exclude) { + var predicate = opt_exclude; + if (opt_exclude && typeof opt_exclude !== 'function') { + predicate = function(p) { + return !opt_exclude.test(p); + }; + } + + // TODO(jleyba): Make this function completely async. + if (!fs.existsSync(dst)) { + fs.mkdirSync(dst); + } + + var files = fs.readdirSync(src); + files = files.map(function(file) { + return path.join(src, file); + }); + + if (predicate) { + files = files.filter(/** @type {function(string): boolean} */(predicate)); + } + + var results = []; + files.forEach(function(file) { + var stats = fs.statSync(file); + var target = path.join(dst, path.basename(file)); + + if (stats.isDirectory()) { + if (!fs.existsSync(target)) { + fs.mkdirSync(target, stats.mode); + } + results.push(exports.copyDir(file, target, predicate)); + } else { + results.push(exports.copy(file, target)); + } + }); + + return Promise.all(results).then(() => dst); +}; + + +/** + * Tests if a file path exists. + * @param {string} aPath The path to test. + * @return {!Promise} A promise for whether the file exists. + */ +exports.exists = function(aPath) { + return new Promise(function(fulfill, reject) { + let type = typeof aPath; + if (type !== 'string') { + reject(TypeError(`expected string path, but got ${type}`)); + } else { + fs.exists(aPath, fulfill); + } + }); +}; + + +/** + * Calls `stat(2)`. + * @param {string} aPath The path to stat. + * @return {!Promise} A promise for the file stats. + */ +exports.stat = function stat(aPath) { + return checkedCall(callback => fs.stat(aPath, callback)); +}; + + +/** + * Deletes a name from the filesystem and possibly the file it refers to. Has + * no effect if the file does not exist. + * @param {string} aPath The path to remove. + * @return {!Promise} A promise for when the file has been removed. + */ +exports.unlink = function(aPath) { + return new Promise(function(fulfill, reject) { + fs.exists(aPath, function(exists) { + if (exists) { + fs.unlink(aPath, function(err) { + err && reject(err) || fulfill(); + }); + } else { + fulfill(); + } + }); + }); +}; + + +/** + * @return {!Promise} A promise for the path to a temporary directory. + * @see https://www.npmjs.org/package/tmp + */ +exports.tmpDir = function() { + return checkedCall(tmp.dir); +}; + + +/** + * @param {{postfix: string}=} opt_options Temporary file options. + * @return {!Promise} A promise for the path to a temporary file. + * @see https://www.npmjs.org/package/tmp + */ +exports.tmpFile = function(opt_options) { + return checkedCall(callback => { + // |tmp.file| checks arguments length to detect options rather than doing a + // truthy check, so we must only pass options if there are some to pass. + if (opt_options) { + tmp.file(opt_options, callback); + } else { + tmp.file(callback); + } + }); +}; + + +/** + * Searches the {@code PATH} environment variable for the given file. + * @param {string} file The file to locate on the PATH. + * @param {boolean=} opt_checkCwd Whether to always start with the search with + * the current working directory, regardless of whether it is explicitly + * listed on the PATH. + * @return {?string} Path to the located file, or {@code null} if it could + * not be found. + */ +exports.findInPath = function(file, opt_checkCwd) { + let dirs = []; + if (opt_checkCwd) { + dirs.push(process.cwd()); + } + dirs.push.apply(dirs, process.env['PATH'].split(path.delimiter)); + + let foundInDir = dirs.find(dir => { + let tmp = path.join(dir, file); + try { + let stats = fs.statSync(tmp); + return stats.isFile() && !stats.isDirectory(); + } catch (ex) { + return false; + } + }); + + return foundInDir ? path.join(foundInDir, file) : null; +}; + + +/** + * Reads the contents of the given file. + * + * @param {string} aPath Path to the file to read. + * @return {!Promise} A promise that will resolve with a buffer of the + * file contents. + */ +exports.read = function(aPath) { + return checkedCall(callback => fs.readFile(aPath, callback)); +}; + + +/** + * Writes to a file. + * + * @param {string} aPath Path to the file to write to. + * @param {(string|!Buffer)} data The data to write. + * @return {!Promise} A promise that will resolve when the operation has + * completed. + */ +exports.write = function(aPath, data) { + return checkedCall(callback => fs.writeFile(aPath, data, callback)); +}; + + +/** + * Creates a directory. + * + * @param {string} aPath The directory path. + * @return {!Promise} A promise that will resolve with the path of the + * created directory. + */ +exports.mkdir = function(aPath) { + return checkedCall(callback => { + fs.mkdir(aPath, undefined, err => { + if (err && err.code !== 'EEXIST') { + callback(err); + } else { + callback(null, aPath); + } + }); + }); +}; diff --git a/node_modules/selenium-webdriver/lib/README b/node_modules/selenium-webdriver/lib/README new file mode 100644 index 000000000..583293864 --- /dev/null +++ b/node_modules/selenium-webdriver/lib/README @@ -0,0 +1,6 @@ +This directory contains modules internal to selenium-webdriver that are not +intended for general consumption. They may change at any time. + +With the exception of the test/ directory, all files under this directory +may only depend on built-in JavaScript features and other modules in the +directory. diff --git a/node_modules/selenium-webdriver/lib/actions.js b/node_modules/selenium-webdriver/lib/actions.js new file mode 100644 index 000000000..7200b08d6 --- /dev/null +++ b/node_modules/selenium-webdriver/lib/actions.js @@ -0,0 +1,596 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +const command = require('./command'); +const error = require('./error'); +const input = require('./input'); + + +/** + * @param {!IArrayLike} args . + * @return {!Array} . + */ +function flatten(args) { + let result = []; + for (let i = 0; i < args.length; i++) { + let element = args[i]; + if (Array.isArray(element)) { + result.push.apply(result, flatten(element)); + } else { + result.push(element); + } + } + return result; +} + + +const MODIFIER_KEYS = new Set([ + input.Key.ALT, + input.Key.CONTROL, + input.Key.SHIFT, + input.Key.COMMAND +]); + + +/** + * Checks that a key is a modifier key. + * @param {!input.Key} key The key to check. + * @throws {error.InvalidArgumentError} If the key is not a modifier key. + * @private + */ +function checkModifierKey(key) { + if (!MODIFIER_KEYS.has(key)) { + throw new error.InvalidArgumentError('Not a modifier key'); + } +} + + +/** + * Class for defining sequences of complex user interactions. Each sequence + * will not be executed until {@link #perform} is called. + * + * Example: + * + * new ActionSequence(driver). + * keyDown(Key.SHIFT). + * click(element1). + * click(element2). + * dragAndDrop(element3, element4). + * keyUp(Key.SHIFT). + * perform(); + * + */ +class ActionSequence { + /** + * @param {!./webdriver.WebDriver} driver The driver that should be used to + * perform this action sequence. + */ + constructor(driver) { + /** @private {!./webdriver.WebDriver} */ + this.driver_ = driver; + + /** @private {!Array<{description: string, command: !command.Command}>} */ + this.actions_ = []; + } + + /** + * Schedules an action to be executed each time {@link #perform} is called on + * this instance. + * + * @param {string} description A description of the command. + * @param {!command.Command} command The command. + * @private + */ + schedule_(description, command) { + this.actions_.push({ + description: description, + command: command + }); + } + + /** + * Executes this action sequence. + * + * @return {!./promise.Promise} A promise that will be resolved once + * this sequence has completed. + */ + perform() { + // Make a protected copy of the scheduled actions. This will protect against + // users defining additional commands before this sequence is actually + // executed. + let actions = this.actions_.concat(); + let driver = this.driver_; + return driver.controlFlow().execute(function() { + actions.forEach(function(action) { + driver.schedule(action.command, action.description); + }); + }, 'ActionSequence.perform'); + } + + /** + * Moves the mouse. The location to move to may be specified in terms of the + * mouse's current location, an offset relative to the top-left corner of an + * element, or an element (in which case the middle of the element is used). + * + * @param {(!./webdriver.WebElement|{x: number, y: number})} location The + * location to drag to, as either another WebElement or an offset in + * pixels. + * @param {{x: number, y: number}=} opt_offset If the target {@code location} + * is defined as a {@link ./webdriver.WebElement}, this parameter defines + * an offset within that element. The offset should be specified in pixels + * relative to the top-left corner of the element's bounding box. If + * omitted, the element's center will be used as the target offset. + * @return {!ActionSequence} A self reference. + */ + mouseMove(location, opt_offset) { + let cmd = new command.Command(command.Name.MOVE_TO); + + if (typeof location.x === 'number') { + setOffset(/** @type {{x: number, y: number}} */(location)); + } else { + cmd.setParameter('element', location.getId()); + if (opt_offset) { + setOffset(opt_offset); + } + } + + this.schedule_('mouseMove', cmd); + return this; + + /** @param {{x: number, y: number}} offset The offset to use. */ + function setOffset(offset) { + cmd.setParameter('xoffset', offset.x || 0); + cmd.setParameter('yoffset', offset.y || 0); + } + } + + /** + * Schedules a mouse action. + * @param {string} description A simple descriptive label for the scheduled + * action. + * @param {!command.Name} commandName The name of the command. + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if the previous argument is + * provided as a button. + * @return {!ActionSequence} A self reference. + * @private + */ + scheduleMouseAction_( + description, commandName, opt_elementOrButton, opt_button) { + let button; + if (typeof opt_elementOrButton === 'number') { + button = opt_elementOrButton; + } else { + if (opt_elementOrButton) { + this.mouseMove( + /** @type {!./webdriver.WebElement} */ (opt_elementOrButton)); + } + button = opt_button !== void(0) ? opt_button : input.Button.LEFT; + } + + let cmd = new command.Command(commandName). + setParameter('button', button); + this.schedule_(description, cmd); + return this; + } + + /** + * Presses a mouse button. The mouse button will not be released until + * {@link #mouseUp} is called, regardless of whether that call is made in this + * sequence or another. The behavior for out-of-order events (e.g. mouseDown, + * click) is undefined. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).mouseDown() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + mouseDown(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('mouseDown', + command.Name.MOUSE_DOWN, opt_elementOrButton, opt_button); + } + + /** + * Releases a mouse button. Behavior is undefined for calling this function + * without a previous call to {@link #mouseDown}. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).mouseUp() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + mouseUp(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('mouseUp', + command.Name.MOUSE_UP, opt_elementOrButton, opt_button); + } + + /** + * Convenience function for performing a "drag and drop" manuever. The target + * element may be moved to the location of another element, or by an offset (in + * pixels). + * + * @param {!./webdriver.WebElement} element The element to drag. + * @param {(!./webdriver.WebElement|{x: number, y: number})} location The + * location to drag to, either as another WebElement or an offset in + * pixels. + * @return {!ActionSequence} A self reference. + */ + dragAndDrop(element, location) { + return this.mouseDown(element).mouseMove(location).mouseUp(); + } + + /** + * Clicks a mouse button. + * + * If an element is provided, the mouse will first be moved to the center + * of that element. This is equivalent to: + * + * sequence.mouseMove(element).click() + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + click(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('click', + command.Name.CLICK, opt_elementOrButton, opt_button); + } + + /** + * Double-clicks a mouse button. + * + * If an element is provided, the mouse will first be moved to the center of + * that element. This is equivalent to: + * + * sequence.mouseMove(element).doubleClick() + * + * Warning: this method currently only supports the left mouse button. See + * [issue 4047](http://code.google.com/p/selenium/issues/detail?id=4047). + * + * @param {(./webdriver.WebElement|input.Button)=} opt_elementOrButton Either + * the element to interact with or the button to click with. + * Defaults to {@link input.Button.LEFT} if neither an element nor + * button is specified. + * @param {input.Button=} opt_button The button to use. Defaults to + * {@link input.Button.LEFT}. Ignored if a button is provided as the + * first argument. + * @return {!ActionSequence} A self reference. + */ + doubleClick(opt_elementOrButton, opt_button) { + return this.scheduleMouseAction_('doubleClick', + command.Name.DOUBLE_CLICK, opt_elementOrButton, opt_button); + } + + /** + * Schedules a keyboard action. + * + * @param {string} description A simple descriptive label for the scheduled + * action. + * @param {!Array<(string|!input.Key)>} keys The keys to send. + * @return {!ActionSequence} A self reference. + * @private + */ + scheduleKeyboardAction_(description, keys) { + let cmd = new command.Command(command.Name.SEND_KEYS_TO_ACTIVE_ELEMENT) + .setParameter('value', keys); + this.schedule_(description, cmd); + return this; + } + + /** + * Performs a modifier key press. The modifier key is not released + * until {@link #keyUp} or {@link #sendKeys} is called. The key press will be + * targetted at the currently focused element. + * + * @param {!input.Key} key The modifier key to push. Must be one of + * {ALT, CONTROL, SHIFT, COMMAND, META}. + * @return {!ActionSequence} A self reference. + * @throws {error.InvalidArgumentError} If the key is not a valid modifier + * key. + */ + keyDown(key) { + checkModifierKey(key); + return this.scheduleKeyboardAction_('keyDown', [key]); + } + + /** + * Performs a modifier key release. The release is targetted at the currently + * focused element. + * @param {!input.Key} key The modifier key to release. Must be one of + * {ALT, CONTROL, SHIFT, COMMAND, META}. + * @return {!ActionSequence} A self reference. + * @throws {error.InvalidArgumentError} If the key is not a valid modifier + * key. + */ + keyUp(key) { + checkModifierKey(key); + return this.scheduleKeyboardAction_('keyUp', [key]); + } + + /** + * Simulates typing multiple keys. Each modifier key encountered in the + * sequence will not be released until it is encountered again. All key events + * will be targetted at the currently focused element. + * + * @param {...(string|!input.Key|!Array<(string|!input.Key)>)} var_args + * The keys to type. + * @return {!ActionSequence} A self reference. + * @throws {Error} If the key is not a valid modifier key. + */ + sendKeys(var_args) { + let keys = flatten(arguments); + return this.scheduleKeyboardAction_('sendKeys', keys); + } +} + + +/** + * Class for defining sequences of user touch interactions. Each sequence + * will not be executed until {@link #perform} is called. + * + * Example: + * + * new TouchSequence(driver). + * tapAndHold({x: 0, y: 0}). + * move({x: 3, y: 4}). + * release({x: 10, y: 10}). + * perform(); + * + */ +class TouchSequence { + /** + * @param {!./webdriver.WebDriver} driver The driver that should be used to + * perform this action sequence. + */ + constructor(driver) { + /** @private {!./webdriver.WebDriver} */ + this.driver_ = driver; + + /** @private {!Array<{description: string, command: !command.Command}>} */ + this.actions_ = []; + } + + /** + * Schedules an action to be executed each time {@link #perform} is called on + * this instance. + * @param {string} description A description of the command. + * @param {!command.Command} command The command. + * @private + */ + schedule_(description, command) { + this.actions_.push({ + description: description, + command: command + }); + } + + /** + * Executes this action sequence. + * @return {!./promise.Promise} A promise that will be resolved once + * this sequence has completed. + */ + perform() { + // Make a protected copy of the scheduled actions. This will protect against + // users defining additional commands before this sequence is actually + // executed. + let actions = this.actions_.concat(); + let driver = this.driver_; + return driver.controlFlow().execute(function() { + actions.forEach(function(action) { + driver.schedule(action.command, action.description); + }); + }, 'TouchSequence.perform'); + } + + /** + * Taps an element. + * + * @param {!./webdriver.WebElement} elem The element to tap. + * @return {!TouchSequence} A self reference. + */ + tap(elem) { + let cmd = new command.Command(command.Name.TOUCH_SINGLE_TAP). + setParameter('element', elem.getId()); + + this.schedule_('tap', cmd); + return this; + } + + /** + * Double taps an element. + * + * @param {!./webdriver.WebElement} elem The element to double tap. + * @return {!TouchSequence} A self reference. + */ + doubleTap(elem) { + let cmd = new command.Command(command.Name.TOUCH_DOUBLE_TAP). + setParameter('element', elem.getId()); + + this.schedule_('doubleTap', cmd); + return this; + } + + /** + * Long press on an element. + * + * @param {!./webdriver.WebElement} elem The element to long press. + * @return {!TouchSequence} A self reference. + */ + longPress(elem) { + let cmd = new command.Command(command.Name.TOUCH_LONG_PRESS). + setParameter('element', elem.getId()); + + this.schedule_('longPress', cmd); + return this; + } + + /** + * Touch down at the given location. + * + * @param {{x: number, y: number}} location The location to touch down at. + * @return {!TouchSequence} A self reference. + */ + tapAndHold(location) { + let cmd = new command.Command(command.Name.TOUCH_DOWN). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('tapAndHold', cmd); + return this; + } + + /** + * Move a held {@linkplain #tapAndHold touch} to the specified location. + * + * @param {{x: number, y: number}} location The location to move to. + * @return {!TouchSequence} A self reference. + */ + move(location) { + let cmd = new command.Command(command.Name.TOUCH_MOVE). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('move', cmd); + return this; + } + + /** + * Release a held {@linkplain #tapAndHold touch} at the specified location. + * + * @param {{x: number, y: number}} location The location to release at. + * @return {!TouchSequence} A self reference. + */ + release(location) { + let cmd = new command.Command(command.Name.TOUCH_UP). + setParameter('x', location.x). + setParameter('y', location.y); + + this.schedule_('release', cmd); + return this; + } + + /** + * Scrolls the touch screen by the given offset. + * + * @param {{x: number, y: number}} offset The offset to scroll to. + * @return {!TouchSequence} A self reference. + */ + scroll(offset) { + let cmd = new command.Command(command.Name.TOUCH_SCROLL). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y); + + this.schedule_('scroll', cmd); + return this; + } + + /** + * Scrolls the touch screen, starting on `elem` and moving by the specified + * offset. + * + * @param {!./webdriver.WebElement} elem The element where scroll starts. + * @param {{x: number, y: number}} offset The offset to scroll to. + * @return {!TouchSequence} A self reference. + */ + scrollFromElement(elem, offset) { + let cmd = new command.Command(command.Name.TOUCH_SCROLL). + setParameter('element', elem.getId()). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y); + + this.schedule_('scrollFromElement', cmd); + return this; + } + + /** + * Flick, starting anywhere on the screen, at speed xspeed and yspeed. + * + * @param {{xspeed: number, yspeed: number}} speed The speed to flick in each + direction, in pixels per second. + * @return {!TouchSequence} A self reference. + */ + flick(speed) { + let cmd = new command.Command(command.Name.TOUCH_FLICK). + setParameter('xspeed', speed.xspeed). + setParameter('yspeed', speed.yspeed); + + this.schedule_('flick', cmd); + return this; + } + + /** + * Flick starting at elem and moving by x and y at specified speed. + * + * @param {!./webdriver.WebElement} elem The element where flick starts. + * @param {{x: number, y: number}} offset The offset to flick to. + * @param {number} speed The speed to flick at in pixels per second. + * @return {!TouchSequence} A self reference. + */ + flickElement(elem, offset, speed) { + let cmd = new command.Command(command.Name.TOUCH_FLICK). + setParameter('element', elem.getId()). + setParameter('xoffset', offset.x). + setParameter('yoffset', offset.y). + setParameter('speed', speed); + + this.schedule_('flickElement', cmd); + return this; + } +} + + +// PUBLIC API + +module.exports = { + ActionSequence: ActionSequence, + TouchSequence: TouchSequence, +}; diff --git a/node_modules/selenium-webdriver/lib/by.js b/node_modules/selenium-webdriver/lib/by.js new file mode 100644 index 000000000..ac448e683 --- /dev/null +++ b/node_modules/selenium-webdriver/lib/by.js @@ -0,0 +1,277 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Factory methods for the supported locator strategies. + */ + +/** + * Short-hand expressions for the primary element locator strategies. + * For example the following two statements are equivalent: + * + * var e1 = driver.findElement(By.id('foo')); + * var e2 = driver.findElement({id: 'foo'}); + * + * Care should be taken when using JavaScript minifiers (such as the + * Closure compiler), as locator hashes will always be parsed using + * the un-obfuscated properties listed. + * + * @typedef {( + * {className: string}| + * {css: string}| + * {id: string}| + * {js: string}| + * {linkText: string}| + * {name: string}| + * {partialLinkText: string}| + * {tagName: string}| + * {xpath: string})} + */ +var ByHash; + + +/** + * Error thrown if an invalid character is encountered while escaping a CSS + * identifier. + * @see https://drafts.csswg.org/cssom/#serialize-an-identifier + */ +class InvalidCharacterError extends Error { + constructor() { + super(); + this.name = this.constructor.name; + } +} + + +/** + * Escapes a CSS string. + * @param {string} css the string to escape. + * @return {string} the escaped string. + * @throws {TypeError} if the input value is not a string. + * @throws {InvalidCharacterError} if the string contains an invalid character. + * @see https://drafts.csswg.org/cssom/#serialize-an-identifier + */ +function escapeCss(css) { + if (typeof css !== 'string') { + throw new TypeError('input must be a string'); + } + let ret = ''; + const n = css.length; + for (let i = 0; i < n; i++) { + const c = css.charCodeAt(i); + if (c == 0x0) { + throw new InvalidCharacterError(); + } + + if ((c >= 0x0001 && c <= 0x001F) + || c == 0x007F + || (i == 0 && c >= 0x0030 && c <= 0x0039) + || (i == 1 && c >= 0x0030 && c <= 0x0039 + && css.charCodeAt(0) == 0x002D)) { + ret += '\\' + c.toString(16) + ' '; + continue; + } + + if (i == 0 && c == 0x002D && n == 1) { + ret += '\\' + css.charAt(i); + continue; + } + + if (c >= 0x0080 + || c == 0x002D // - + || c == 0x005F // _ + || (c >= 0x0030 && c <= 0x0039) // [0-9] + || (c >= 0x0041 && c <= 0x005A) // [A-Z] + || (c >= 0x0061 && c <= 0x007A)) { // [a-z] + ret += css.charAt(i); + continue; + } + + ret += '\\' + css.charAt(i); + } + return ret; +} + + +/** + * Describes a mechanism for locating an element on the page. + * @final + */ +class By { + /** + * @param {string} using the name of the location strategy to use. + * @param {string} value the value to search for. + */ + constructor(using, value) { + /** @type {string} */ + this.using = using; + + /** @type {string} */ + this.value = value; + } + + /** + * Locates elements that have a specific class name. + * + * @param {string} name The class name to search for. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes + * @see http://www.w3.org/TR/CSS2/selector.html#class-html + */ + static className(name) { + let names = name.split(/\s+/g) + .filter(s => s.length > 0) + .map(s => escapeCss(s)); + return By.css('.' + names.join('.')); + } + + /** + * Locates elements using a CSS selector. + * + * @param {string} selector The CSS selector to use. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/CSS2/selector.html + */ + static css(selector) { + return new By('css selector', selector); + } + + /** + * Locates eleemnts by the ID attribute. This locator uses the CSS selector + * `*[id="$ID"]`, _not_ `document.getElementById`. + * + * @param {string} id The ID to search for. + * @return {!By} The new locator. + */ + static id(id) { + return By.css('*[id="' + escapeCss(id) + '"]'); + } + + /** + * Locates link elements whose + * {@linkplain webdriver.WebElement#getText visible text} matches the given + * string. + * + * @param {string} text The link text to search for. + * @return {!By} The new locator. + */ + static linkText(text) { + return new By('link text', text); + } + + /** + * Locates an elements by evaluating a + * {@linkplain webdriver.WebDriver#executeScript JavaScript expression}. + * The result of this expression must be an element or list of elements. + * + * @param {!(string|Function)} script The script to execute. + * @param {...*} var_args The arguments to pass to the script. + * @return {function(!./webdriver.WebDriver): !./promise.Promise} + * A new JavaScript-based locator function. + */ + static js(script, var_args) { + let args = Array.prototype.slice.call(arguments, 0); + return function(driver) { + return driver.executeScript.apply(driver, args); + }; + } + + /** + * Locates elements whose `name` attribute has the given value. + * + * @param {string} name The name attribute to search for. + * @return {!By} The new locator. + */ + static name(name) { + return By.css('*[name="' + escapeCss(name) + '"]'); + } + + /** + * Locates link elements whose + * {@linkplain webdriver.WebElement#getText visible text} contains the given + * substring. + * + * @param {string} text The substring to check for in a link's visible text. + * @return {!By} The new locator. + */ + static partialLinkText(text) { + return new By('partial link text', text); + } + + /** + * Locates elements with a given tag name. + * + * @param {string} name The tag name to search for. + * @return {!By} The new locator. + * @deprecated Use {@link By.css() By.css(tagName)} instead. + */ + static tagName(name) { + return By.css(name); + } + + /** + * Locates elements matching a XPath selector. Care should be taken when + * using an XPath selector with a {@link webdriver.WebElement} as WebDriver + * will respect the context in the specified in the selector. For example, + * given the selector `//div`, WebDriver will search from the document root + * regardless of whether the locator was used with a WebElement. + * + * @param {string} xpath The XPath selector to use. + * @return {!By} The new locator. + * @see http://www.w3.org/TR/xpath/ + */ + static xpath(xpath) { + return new By('xpath', xpath); + } + + /** @override */ + toString() { + // The static By.name() overrides this.constructor.name. Shame... + return `By(${this.using}, ${this.value})`; + } +} + + +/** + * Checks if a value is a valid locator. + * @param {!(By|Function|ByHash)} locator The value to check. + * @return {!(By|Function)} The valid locator. + * @throws {TypeError} If the given value does not define a valid locator + * strategy. + */ +function check(locator) { + if (locator instanceof By || typeof locator === 'function') { + return locator; + } + for (let key in locator) { + if (locator.hasOwnProperty(key) && By.hasOwnProperty(key)) { + return By[key](locator[key]); + } + } + throw new TypeError('Invalid locator'); +} + + + +// PUBLIC API + +module.exports = { + By: By, + checkedLocator: check, +}; diff --git a/node_modules/selenium-webdriver/lib/capabilities.js b/node_modules/selenium-webdriver/lib/capabilities.js new file mode 100644 index 000000000..61396d54d --- /dev/null +++ b/node_modules/selenium-webdriver/lib/capabilities.js @@ -0,0 +1,450 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * @fileoverview Defines types related to describing the capabilities of a + * WebDriver session. + */ + +const Symbols = require('./symbols'); + + +/** + * Recognized browser names. + * @enum {string} + */ +const Browser = { + ANDROID: 'android', + CHROME: 'chrome', + EDGE: 'MicrosoftEdge', + FIREFOX: 'firefox', + IE: 'internet explorer', + INTERNET_EXPLORER: 'internet explorer', + IPAD: 'iPad', + IPHONE: 'iPhone', + OPERA: 'opera', + PHANTOM_JS: 'phantomjs', + SAFARI: 'safari', + HTMLUNIT: 'htmlunit' +}; + + +/** + * Common Capability keys. + * @enum {string} + */ +const Capability = { + + /** + * Indicates whether a driver should accept all SSL certs by default. This + * capability only applies when requesting a new session. To query whether + * a driver can handle insecure SSL certs, see {@link #SECURE_SSL}. + */ + ACCEPT_SSL_CERTS: 'acceptSslCerts', + + + /** + * The browser name. Common browser names are defined in the {@link Browser} + * enum. + */ + BROWSER_NAME: 'browserName', + + /** + * Defines how elements should be scrolled into the viewport for interaction. + * This capability will be set to zero (0) if elements are aligned with the + * top of the viewport, or one (1) if aligned with the bottom. The default + * behavior is to align with the top of the viewport. + */ + ELEMENT_SCROLL_BEHAVIOR: 'elementScrollBehavior', + + /** + * Whether the driver is capable of handling modal alerts (e.g. alert, + * confirm, prompt). To define how a driver should handle alerts, + * use {@link #UNEXPECTED_ALERT_BEHAVIOR}. + */ + HANDLES_ALERTS: 'handlesAlerts', + + /** + * Key for the logging driver logging preferences. + */ + LOGGING_PREFS: 'loggingPrefs', + + /** + * Whether this session generates native events when simulating user input. + */ + NATIVE_EVENTS: 'nativeEvents', + + /** + * Describes the platform the browser is running on. Will be one of + * ANDROID, IOS, LINUX, MAC, UNIX, or WINDOWS. When requesting a + * session, ANY may be used to indicate no platform preference (this is + * semantically equivalent to omitting the platform capability). + */ + PLATFORM: 'platform', + + /** + * Describes the proxy configuration to use for a new WebDriver session. + */ + PROXY: 'proxy', + + /** Whether the driver supports changing the brower's orientation. */ + ROTATABLE: 'rotatable', + + /** + * Whether a driver is only capable of handling secure SSL certs. To request + * that a driver accept insecure SSL certs by default, use + * {@link #ACCEPT_SSL_CERTS}. + */ + SECURE_SSL: 'secureSsl', + + /** Whether the driver supports manipulating the app cache. */ + SUPPORTS_APPLICATION_CACHE: 'applicationCacheEnabled', + + /** Whether the driver supports locating elements with CSS selectors. */ + SUPPORTS_CSS_SELECTORS: 'cssSelectorsEnabled', + + /** Whether the browser supports JavaScript. */ + SUPPORTS_JAVASCRIPT: 'javascriptEnabled', + + /** Whether the driver supports controlling the browser's location info. */ + SUPPORTS_LOCATION_CONTEXT: 'locationContextEnabled', + + /** Whether the driver supports taking screenshots. */ + TAKES_SCREENSHOT: 'takesScreenshot', + + /** + * Defines how the driver should handle unexpected alerts. The value should + * be one of "accept", "dismiss", or "ignore. + */ + UNEXPECTED_ALERT_BEHAVIOR: 'unexpectedAlertBehavior', + + /** Defines the browser version. */ + VERSION: 'version' +}; + + +/** + * Describes how a proxy should be configured for a WebDriver session. + * @record + */ +function ProxyConfig() {} + +/** + * The proxy type. Must be one of {"manual", "pac", "system"}. + * @type {string} + */ +ProxyConfig.prototype.proxyType; + +/** + * URL for the PAC file to use. Only used if {@link #proxyType} is "pac". + * @type {(string|undefined)} + */ +ProxyConfig.prototype.proxyAutoconfigUrl; + +/** + * The proxy host for FTP requests. Only used if {@link #proxyType} is "manual". + * @type {(string|undefined)} + */ +ProxyConfig.prototype.ftpProxy; + +/** + * The proxy host for HTTP requests. Only used if {@link #proxyType} is + * "manual". + * @type {(string|undefined)} + */ +ProxyConfig.prototype.httpProxy; + +/** + * The proxy host for HTTPS requests. Only used if {@link #proxyType} is + * "manual". + * @type {(string|undefined)} + */ +ProxyConfig.prototype.sslProxy; + +/** + * A comma delimited list of hosts which should bypass all proxies. Only used if + * {@link #proxyType} is "manual". + * @type {(string|undefined)} + */ +ProxyConfig.prototype.noProxy; + + +/** + * Converts a generic hash object to a map. + * @param {!Object} hash The hash object. + * @return {!Map} The converted map. + */ +function toMap(hash) { + let m = new Map; + for (let key in hash) { + if (hash.hasOwnProperty(key)) { + m.set(key, hash[key]); + } + } + return m; +} + + +/** + * Describes a set of capabilities for a WebDriver session. + */ +class Capabilities extends Map { + /** + * @param {(Capabilities|Map|Object)=} opt_other Another set of + * capabilities to initialize this instance from. + */ + constructor(opt_other) { + if (opt_other && !(opt_other instanceof Map)) { + opt_other = toMap(opt_other); + } + super(opt_other); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Android. + */ + static android() { + return new Capabilities() + .set(Capability.BROWSER_NAME, Browser.ANDROID) + .set(Capability.PLATFORM, 'ANDROID'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Chrome. + */ + static chrome() { + return new Capabilities().set(Capability.BROWSER_NAME, Browser.CHROME); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Microsoft Edge. + */ + static edge() { + return new Capabilities() + .set(Capability.BROWSER_NAME, Browser.EDGE) + .set(Capability.PLATFORM, 'WINDOWS'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Firefox. + */ + static firefox() { + return new Capabilities().set(Capability.BROWSER_NAME, Browser.FIREFOX); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Internet Explorer. + */ + static ie() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.INTERNET_EXPLORER). + set(Capability.PLATFORM, 'WINDOWS'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for iPad. + */ + static ipad() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.IPAD). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for iPhone. + */ + static iphone() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.IPHONE). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Opera. + */ + static opera() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.OPERA); + } + + /** + * @return {!Capabilities} A basic set of capabilities for PhantomJS. + */ + static phantomjs() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.PHANTOM_JS); + } + + /** + * @return {!Capabilities} A basic set of capabilities for Safari. + */ + static safari() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.SAFARI). + set(Capability.PLATFORM, 'MAC'); + } + + /** + * @return {!Capabilities} A basic set of capabilities for HTMLUnit. + */ + static htmlunit() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.HTMLUNIT); + } + + /** + * @return {!Capabilities} A basic set of capabilities for HTMLUnit + * with enabled Javascript. + */ + static htmlunitwithjs() { + return new Capabilities(). + set(Capability.BROWSER_NAME, Browser.HTMLUNIT). + set(Capability.SUPPORTS_JAVASCRIPT, true); + } + + /** + * @return {!Object} The JSON representation of this instance. + * Note, the returned object may contain nested promised values. + * @suppress {checkTypes} Suppress [] access on a struct (state inherited from + * Map). + */ + [Symbols.serialize]() { + return serialize(this); + } + + /** + * Merges another set of capabilities into this instance. + * @param {!(Capabilities|Map|Object)} other The other + * set of capabilities to merge. + * @return {!Capabilities} A self reference. + */ + merge(other) { + if (!other) { + throw new TypeError('no capabilities provided for merge'); + } + + if (!(other instanceof Map)) { + other = toMap(other); + } + + for (let key of other.keys()) { + this.set(key, other.get(key)); + } + + return this; + } + + /** + * @param {string} key The capability key. + * @param {*} value The capability value. + * @return {!Capabilities} A self reference. + * @throws {TypeError} If the `key` is not a string. + * @override + */ + set(key, value) { + if (typeof key !== 'string') { + throw new TypeError('Capability keys must be strings: ' + typeof key); + } + super.set(key, value); + return this; + } + + /** + * Sets the logging preferences. Preferences may be specified as a + * {@link ./logging.Preferences} instance, or a as a map of log-type to + * log-level. + * @param {!(./logging.Preferences|Object)} prefs The logging + * preferences. + * @return {!Capabilities} A self reference. + */ + setLoggingPrefs(prefs) { + return this.set(Capability.LOGGING_PREFS, prefs); + } + + /** + * Sets the proxy configuration for this instance. + * @param {ProxyConfig} proxy The desired proxy configuration. + * @return {!Capabilities} A self reference. + */ + setProxy(proxy) { + return this.set(Capability.PROXY, proxy); + } + + /** + * Sets whether native events should be used. + * @param {boolean} enabled Whether to enable native events. + * @return {!Capabilities} A self reference. + */ + setEnableNativeEvents(enabled) { + return this.set(Capability.NATIVE_EVENTS, enabled); + } + + /** + * Sets how elements should be scrolled into view for interaction. + * @param {number} behavior The desired scroll behavior: either 0 to align + * with the top of the viewport or 1 to align with the bottom. + * @return {!Capabilities} A self reference. + */ + setScrollBehavior(behavior) { + return this.set(Capability.ELEMENT_SCROLL_BEHAVIOR, behavior); + } + + /** + * Sets the default action to take with an unexpected alert before returning + * an error. + * @param {string} behavior The desired behavior; should be "accept", + * "dismiss", or "ignore". Defaults to "dismiss". + * @return {!Capabilities} A self reference. + */ + setAlertBehavior(behavior) { + return this.set(Capability.UNEXPECTED_ALERT_BEHAVIOR, behavior); + } +} + + +/** + * Serializes a capabilities object. This is defined as a standalone function + * so it may be type checked (where Capabilities[Symbols.serialize] has type + * checking disabled since it is defined with [] access on a struct). + * + * @param {!Capabilities} caps The capabilities to serialize. + * @return {!Object} The JSON representation of this instance. + * Note, the returned object may contain nested promised values. + */ +function serialize(caps) { + let ret = {}; + for (let key of caps.keys()) { + let cap = caps.get(key); + if (cap !== undefined && cap !== null) { + ret[key] = cap; + } + } + return ret; +} + + +// PUBLIC API + + +module.exports = { + Browser: Browser, + Capabilities: Capabilities, + Capability: Capability, + ProxyConfig: ProxyConfig +}; diff --git a/node_modules/selenium-webdriver/lib/command.js b/node_modules/selenium-webdriver/lib/command.js new file mode 100644 index 000000000..c9a366e4e --- /dev/null +++ b/node_modules/selenium-webdriver/lib/command.js @@ -0,0 +1,243 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Contains several classes for handling commands. + */ + +'use strict'; + +/** + * Describes a command to execute. + * @final + */ +class Command { + /** @param {string} name The name of this command. */ + constructor(name) { + /** @private {string} */ + this.name_ = name; + + /** @private {!Object<*>} */ + this.parameters_ = {}; + } + + /** @return {string} This command's name. */ + getName() { + return this.name_; + } + + /** + * Sets a parameter to send with this command. + * @param {string} name The parameter name. + * @param {*} value The parameter value. + * @return {!Command} A self reference. + */ + setParameter(name, value) { + this.parameters_[name] = value; + return this; + } + + /** + * Sets the parameters for this command. + * @param {!Object<*>} parameters The command parameters. + * @return {!Command} A self reference. + */ + setParameters(parameters) { + this.parameters_ = parameters; + return this; + } + + /** + * Returns a named command parameter. + * @param {string} key The parameter key to look up. + * @return {*} The parameter value, or undefined if it has not been set. + */ + getParameter(key) { + return this.parameters_[key]; + } + + /** + * @return {!Object<*>} The parameters to send with this command. + */ + getParameters() { + return this.parameters_; + } +} + + +/** + * Enumeration of predefined names command names that all command processors + * will support. + * @enum {string} + */ +// TODO: Delete obsolete command names. +const Name = { + GET_SERVER_STATUS: 'getStatus', + + NEW_SESSION: 'newSession', + GET_SESSIONS: 'getSessions', + DESCRIBE_SESSION: 'getSessionCapabilities', + + CLOSE: 'close', + QUIT: 'quit', + + GET_CURRENT_URL: 'getCurrentUrl', + GET: 'get', + GO_BACK: 'goBack', + GO_FORWARD: 'goForward', + REFRESH: 'refresh', + + ADD_COOKIE: 'addCookie', + GET_COOKIE: 'getCookie', + GET_ALL_COOKIES: 'getCookies', + DELETE_COOKIE: 'deleteCookie', + DELETE_ALL_COOKIES: 'deleteAllCookies', + + GET_ACTIVE_ELEMENT: 'getActiveElement', + FIND_ELEMENT: 'findElement', + FIND_ELEMENTS: 'findElements', + FIND_CHILD_ELEMENT: 'findChildElement', + FIND_CHILD_ELEMENTS: 'findChildElements', + + CLEAR_ELEMENT: 'clearElement', + CLICK_ELEMENT: 'clickElement', + SEND_KEYS_TO_ELEMENT: 'sendKeysToElement', + SUBMIT_ELEMENT: 'submitElement', + + GET_CURRENT_WINDOW_HANDLE: 'getCurrentWindowHandle', + GET_WINDOW_HANDLES: 'getWindowHandles', + GET_WINDOW_POSITION: 'getWindowPosition', + SET_WINDOW_POSITION: 'setWindowPosition', + GET_WINDOW_SIZE: 'getWindowSize', + SET_WINDOW_SIZE: 'setWindowSize', + MAXIMIZE_WINDOW: 'maximizeWindow', + + SWITCH_TO_WINDOW: 'switchToWindow', + SWITCH_TO_FRAME: 'switchToFrame', + GET_PAGE_SOURCE: 'getPageSource', + GET_TITLE: 'getTitle', + + EXECUTE_SCRIPT: 'executeScript', + EXECUTE_ASYNC_SCRIPT: 'executeAsyncScript', + + GET_ELEMENT_TEXT: 'getElementText', + GET_ELEMENT_TAG_NAME: 'getElementTagName', + IS_ELEMENT_SELECTED: 'isElementSelected', + IS_ELEMENT_ENABLED: 'isElementEnabled', + IS_ELEMENT_DISPLAYED: 'isElementDisplayed', + GET_ELEMENT_LOCATION: 'getElementLocation', + GET_ELEMENT_LOCATION_IN_VIEW: 'getElementLocationOnceScrolledIntoView', + GET_ELEMENT_SIZE: 'getElementSize', + GET_ELEMENT_ATTRIBUTE: 'getElementAttribute', + GET_ELEMENT_VALUE_OF_CSS_PROPERTY: 'getElementValueOfCssProperty', + ELEMENT_EQUALS: 'elementEquals', + + SCREENSHOT: 'screenshot', + TAKE_ELEMENT_SCREENSHOT: 'takeElementScreenshot', + IMPLICITLY_WAIT: 'implicitlyWait', + SET_SCRIPT_TIMEOUT: 'setScriptTimeout', + SET_TIMEOUT: 'setTimeout', + + ACCEPT_ALERT: 'acceptAlert', + DISMISS_ALERT: 'dismissAlert', + GET_ALERT_TEXT: 'getAlertText', + SET_ALERT_TEXT: 'setAlertValue', + SET_ALERT_CREDENTIALS: 'setAlertCredentials', + + EXECUTE_SQL: 'executeSQL', + GET_LOCATION: 'getLocation', + SET_LOCATION: 'setLocation', + GET_APP_CACHE: 'getAppCache', + GET_APP_CACHE_STATUS: 'getStatus', + CLEAR_APP_CACHE: 'clearAppCache', + IS_BROWSER_ONLINE: 'isBrowserOnline', + SET_BROWSER_ONLINE: 'setBrowserOnline', + + GET_LOCAL_STORAGE_ITEM: 'getLocalStorageItem', + GET_LOCAL_STORAGE_KEYS: 'getLocalStorageKeys', + SET_LOCAL_STORAGE_ITEM: 'setLocalStorageItem', + REMOVE_LOCAL_STORAGE_ITEM: 'removeLocalStorageItem', + CLEAR_LOCAL_STORAGE: 'clearLocalStorage', + GET_LOCAL_STORAGE_SIZE: 'getLocalStorageSize', + + GET_SESSION_STORAGE_ITEM: 'getSessionStorageItem', + GET_SESSION_STORAGE_KEYS: 'getSessionStorageKey', + SET_SESSION_STORAGE_ITEM: 'setSessionStorageItem', + REMOVE_SESSION_STORAGE_ITEM: 'removeSessionStorageItem', + CLEAR_SESSION_STORAGE: 'clearSessionStorage', + GET_SESSION_STORAGE_SIZE: 'getSessionStorageSize', + + SET_SCREEN_ORIENTATION: 'setScreenOrientation', + GET_SCREEN_ORIENTATION: 'getScreenOrientation', + + // These belong to the Advanced user interactions - an element is + // optional for these commands. + CLICK: 'mouseClick', + DOUBLE_CLICK: 'mouseDoubleClick', + MOUSE_DOWN: 'mouseButtonDown', + MOUSE_UP: 'mouseButtonUp', + MOVE_TO: 'mouseMoveTo', + SEND_KEYS_TO_ACTIVE_ELEMENT: 'sendKeysToActiveElement', + + // These belong to the Advanced Touch API + TOUCH_SINGLE_TAP: 'touchSingleTap', + TOUCH_DOWN: 'touchDown', + TOUCH_UP: 'touchUp', + TOUCH_MOVE: 'touchMove', + TOUCH_SCROLL: 'touchScroll', + TOUCH_DOUBLE_TAP: 'touchDoubleTap', + TOUCH_LONG_PRESS: 'touchLongPress', + TOUCH_FLICK: 'touchFlick', + + GET_AVAILABLE_LOG_TYPES: 'getAvailableLogTypes', + GET_LOG: 'getLog', + GET_SESSION_LOGS: 'getSessionLogs', + + // Non-standard commands used by the standalone Selenium server. + UPLOAD_FILE: 'uploadFile' +}; + + + +/** + * Handles the execution of WebDriver {@link Command commands}. + * @interface + */ +class Executor { + /** + * Executes the given {@code command}. If there is an error executing the + * command, the provided callback will be invoked with the offending error. + * Otherwise, the callback will be invoked with a null Error and non-null + * response object. + * + * @param {!Command} command The command to execute. + * @return {!Promise} A promise that will be fulfilled with the command + * result. + */ + execute(command) {} +} + + + +// PUBLIC API + + +module.exports = { + Command: Command, + Name: Name, + Executor: Executor +}; diff --git a/node_modules/selenium-webdriver/lib/devmode.js b/node_modules/selenium-webdriver/lib/devmode.js new file mode 100644 index 000000000..4862c6a70 --- /dev/null +++ b/node_modules/selenium-webdriver/lib/devmode.js @@ -0,0 +1,34 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * @fileoverview Module used to detect if scripts are loaded from the Selenium + * project repo instead of from a deployed package. + */ + +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +/** + * @const {boolean} + */ +module.exports = (function() { + let buildDescFile = path.join(__dirname, '..', '..', 'build.desc'); + return fs.existsSync(buildDescFile); +})(); diff --git a/node_modules/selenium-webdriver/lib/error.js b/node_modules/selenium-webdriver/lib/error.js new file mode 100644 index 000000000..555e5cbc5 --- /dev/null +++ b/node_modules/selenium-webdriver/lib/error.js @@ -0,0 +1,555 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * The base WebDriver error type. This error type is only used directly when a + * more appropriate category is not defined for the offending error. + */ +class WebDriverError extends Error { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + + /** @override */ + this.name = this.constructor.name; + } +} + + +/** + * An attempt was made to select an element that cannot be selected. + */ +class ElementNotSelectableError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An element command could not be completed because the element is not visible + * on the page. + */ +class ElementNotVisibleError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * The arguments passed to a command are either invalid or malformed. + */ +class InvalidArgumentError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An illegal attempt was made to set a cookie under a different domain than + * the current page. + */ +class InvalidCookieDomainError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * The coordinates provided to an interactions operation are invalid. + */ +class InvalidElementCoordinatesError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An element command could not be completed because the element is in an + * invalid state, e.g. attempting to click an element that is no longer attached + * to the document. + */ +class InvalidElementStateError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * Argument was an invalid selector. + */ +class InvalidSelectorError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * Occurs when a command is directed to a session that does not exist. + */ +class NoSuchSessionError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An error occurred while executing JavaScript supplied by the user. + */ +class JavascriptError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * The target for mouse interaction is not in the browser’s viewport and cannot + * be brought into that viewport. + */ +class MoveTargetOutOfBoundsError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An attempt was made to operate on a modal dialog when one was not open. + */ +class NoSuchAlertError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An element could not be located on the page using the given search + * parameters. + */ +class NoSuchElementError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A request to switch to a frame could not be satisfied because the frame + * could not be found. + */ +class NoSuchFrameError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A request to switch to a window could not be satisfied because the window + * could not be found. + */ +class NoSuchWindowError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A script did not complete before its timeout expired. + */ +class ScriptTimeoutError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A new session could not be created. + */ +class SessionNotCreatedError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + + +/** + * An element command failed because the referenced element is no longer + * attached to the DOM. + */ +class StaleElementReferenceError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * An operation did not complete before its timeout expired. + */ +class TimeoutError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A request to set a cookie’s value could not be satisfied. + */ +class UnableToSetCookieError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A screen capture operation was not possible. + */ +class UnableToCaptureScreenError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * A modal dialog was open, blocking this operation. + */ +class UnexpectedAlertOpenError extends WebDriverError { + /** + * @param {string=} opt_error the error message, if any. + * @param {string=} opt_text the text of the open dialog, if available. + */ + constructor(opt_error, opt_text) { + super(opt_error); + + /** @private {(string|undefined)} */ + this.text_ = opt_text; + } + + /** + * @return {(string|undefined)} The text displayed with the unhandled alert, + * if available. + */ + getAlertText() { + return this.text_; + } +} + + +/** + * A command could not be executed because the remote end is not aware of it. + */ +class UnknownCommandError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * The requested command matched a known URL but did not match an method for + * that URL. + */ +class UnknownMethodError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + + +/** + * Reports an unsupport operation. + */ +class UnsupportedOperationError extends WebDriverError { + /** @param {string=} opt_error the error message, if any. */ + constructor(opt_error) { + super(opt_error); + } +} + +// TODO(jleyba): Define UnknownError as an alias of WebDriverError? + + +/** + * Enum of legacy error codes. + * TODO: remove this when all code paths have been switched to the new error + * types. + * @deprecated + * @enum {number} + */ +const ErrorCode = { + SUCCESS: 0, + NO_SUCH_ELEMENT: 7, + NO_SUCH_FRAME: 8, + UNKNOWN_COMMAND: 9, + UNSUPPORTED_OPERATION: 9, + STALE_ELEMENT_REFERENCE: 10, + ELEMENT_NOT_VISIBLE: 11, + INVALID_ELEMENT_STATE: 12, + UNKNOWN_ERROR: 13, + ELEMENT_NOT_SELECTABLE: 15, + JAVASCRIPT_ERROR: 17, + XPATH_LOOKUP_ERROR: 19, + TIMEOUT: 21, + NO_SUCH_WINDOW: 23, + INVALID_COOKIE_DOMAIN: 24, + UNABLE_TO_SET_COOKIE: 25, + UNEXPECTED_ALERT_OPEN: 26, + NO_SUCH_ALERT: 27, + SCRIPT_TIMEOUT: 28, + INVALID_ELEMENT_COORDINATES: 29, + IME_NOT_AVAILABLE: 30, + IME_ENGINE_ACTIVATION_FAILED: 31, + INVALID_SELECTOR_ERROR: 32, + SESSION_NOT_CREATED: 33, + MOVE_TARGET_OUT_OF_BOUNDS: 34, + SQL_DATABASE_ERROR: 35, + INVALID_XPATH_SELECTOR: 51, + INVALID_XPATH_SELECTOR_RETURN_TYPE: 52, + METHOD_NOT_ALLOWED: 405 +}; + + +const LEGACY_ERROR_CODE_TO_TYPE = new Map([ + [ErrorCode.NO_SUCH_ELEMENT, NoSuchElementError], + [ErrorCode.NO_SUCH_FRAME, NoSuchFrameError], + [ErrorCode.UNSUPPORTED_OPERATION, UnsupportedOperationError], + [ErrorCode.STALE_ELEMENT_REFERENCE, StaleElementReferenceError], + [ErrorCode.ELEMENT_NOT_VISIBLE, ElementNotVisibleError], + [ErrorCode.INVALID_ELEMENT_STATE, InvalidElementStateError], + [ErrorCode.UNKNOWN_ERROR, WebDriverError], + [ErrorCode.ELEMENT_NOT_SELECTABLE, ElementNotSelectableError], + [ErrorCode.JAVASCRIPT_ERROR, JavascriptError], + [ErrorCode.XPATH_LOOKUP_ERROR, InvalidSelectorError], + [ErrorCode.TIMEOUT, TimeoutError], + [ErrorCode.NO_SUCH_WINDOW, NoSuchWindowError], + [ErrorCode.INVALID_COOKIE_DOMAIN, InvalidCookieDomainError], + [ErrorCode.UNABLE_TO_SET_COOKIE, UnableToSetCookieError], + [ErrorCode.UNEXPECTED_ALERT_OPEN, UnexpectedAlertOpenError], + [ErrorCode.NO_SUCH_ALERT, NoSuchAlertError], + [ErrorCode.SCRIPT_TIMEOUT, ScriptTimeoutError], + [ErrorCode.INVALID_ELEMENT_COORDINATES, InvalidElementCoordinatesError], + [ErrorCode.INVALID_SELECTOR_ERROR, InvalidSelectorError], + [ErrorCode.SESSION_NOT_CREATED, SessionNotCreatedError], + [ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsError], + [ErrorCode.INVALID_XPATH_SELECTOR, InvalidSelectorError], + [ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPE, InvalidSelectorError], + [ErrorCode.METHOD_NOT_ALLOWED, UnsupportedOperationError]]); + + +const ERROR_CODE_TO_TYPE = new Map([ + ['unknown error', WebDriverError], + ['element not selectable', ElementNotSelectableError], + ['element not visible', ElementNotVisibleError], + ['invalid argument', InvalidArgumentError], + ['invalid cookie domain', InvalidCookieDomainError], + ['invalid element coordinates', InvalidElementCoordinatesError], + ['invalid element state', InvalidElementStateError], + ['invalid selector', InvalidSelectorError], + ['invalid session id', NoSuchSessionError], + ['javascript error', JavascriptError], + ['move target out of bounds', MoveTargetOutOfBoundsError], + ['no such alert', NoSuchAlertError], + ['no such element', NoSuchElementError], + ['no such frame', NoSuchFrameError], + ['no such window', NoSuchWindowError], + ['script timeout', ScriptTimeoutError], + ['session not created', SessionNotCreatedError], + ['stale element reference', StaleElementReferenceError], + ['timeout', TimeoutError], + ['unable to set cookie', UnableToSetCookieError], + ['unable to capture screen', UnableToCaptureScreenError], + ['unexpected alert open', UnexpectedAlertOpenError], + ['unknown command', UnknownCommandError], + ['unknown method', UnknownMethodError], + ['unsupported operation', UnsupportedOperationError]]); + + +const TYPE_TO_ERROR_CODE = new Map; +ERROR_CODE_TO_TYPE.forEach((value, key) => { + TYPE_TO_ERROR_CODE.set(value, key); +}); + + + +/** + * @param {*} err The error to encode. + * @return {{error: string, message: string}} the encoded error. + */ +function encodeError(err) { + let type = WebDriverError; + if (err instanceof WebDriverError + && TYPE_TO_ERROR_CODE.has(err.constructor)) { + type = err.constructor; + } + + let message = err instanceof Error + ? err.message + : err + ''; + + let code = /** @type {string} */(TYPE_TO_ERROR_CODE.get(type)); + return {'error': code, 'message': message}; +} + + +/** + * Checks a response object from a server that adheres to the W3C WebDriver + * protocol. + * @param {*} data The response data to check. + * @return {*} The response data if it was not an encoded error. + * @throws {WebDriverError} the decoded error, if present in the data object. + * @deprecated Use {@link #throwDecodedError(data)} instead. + * @see https://w3c.github.io/webdriver/webdriver-spec.html#protocol + */ +function checkResponse(data) { + if (data && typeof data.error === 'string') { + let ctor = ERROR_CODE_TO_TYPE.get(data.error) || WebDriverError; + throw new ctor(data.message); + } + return data; +} + + +/** + * Throws an error coded from the W3C protocol. A generic error will be thrown + * if the privded `data` is not a valid encoded error. + * + * @param {{error: string, message: string}} data The error data to decode. + * @throws {WebDriverError} the decoded error. + * @see https://w3c.github.io/webdriver/webdriver-spec.html#protocol + */ +function throwDecodedError(data) { + if (data && typeof data === 'object' && typeof data.error === 'string') { + let ctor = ERROR_CODE_TO_TYPE.get(data.error) || WebDriverError; + throw new ctor(data.message); + } + throw new WebDriverError('Unknown error: ' + JSON.stringify(data)); +} + + +/** + * Checks a legacy response from the Selenium 2.0 wire protocol for an error. + * @param {*} responseObj the response object to check. + * @return {*} responseObj the original response if it does not define an error. + * @throws {WebDriverError} if the response object defines an error. + */ +function checkLegacyResponse(responseObj) { + // Handle the legacy Selenium error response format. + if (responseObj + && typeof responseObj === 'object' + && typeof responseObj['status'] === 'number' + && responseObj['status'] !== 0) { + let status = responseObj['status']; + let ctor = LEGACY_ERROR_CODE_TO_TYPE.get(status) || WebDriverError; + + let value = responseObj['value']; + + if (!value || typeof value !== 'object') { + throw new ctor(value + ''); + } else { + let message = value['message'] + ''; + if (ctor !== UnexpectedAlertOpenError) { + throw new ctor(message); + } + + let text = ''; + if (value['alert'] && typeof value['alert']['text'] === 'string') { + text = value['alert']['text']; + } + throw new UnexpectedAlertOpenError(message, text); + } + } + return responseObj; +} + + +// PUBLIC API + + +module.exports = { + ErrorCode: ErrorCode, + + WebDriverError: WebDriverError, + ElementNotSelectableError: ElementNotSelectableError, + ElementNotVisibleError: ElementNotVisibleError, + InvalidArgumentError: InvalidArgumentError, + InvalidCookieDomainError: InvalidCookieDomainError, + InvalidElementCoordinatesError: InvalidElementCoordinatesError, + InvalidElementStateError: InvalidElementStateError, + InvalidSelectorError: InvalidSelectorError, + JavascriptError: JavascriptError, + MoveTargetOutOfBoundsError: MoveTargetOutOfBoundsError, + NoSuchAlertError: NoSuchAlertError, + NoSuchElementError: NoSuchElementError, + NoSuchFrameError: NoSuchFrameError, + NoSuchSessionError: NoSuchSessionError, + NoSuchWindowError: NoSuchWindowError, + ScriptTimeoutError: ScriptTimeoutError, + SessionNotCreatedError: SessionNotCreatedError, + StaleElementReferenceError: StaleElementReferenceError, + TimeoutError: TimeoutError, + UnableToSetCookieError: UnableToSetCookieError, + UnableToCaptureScreenError: UnableToCaptureScreenError, + UnexpectedAlertOpenError: UnexpectedAlertOpenError, + UnknownCommandError: UnknownCommandError, + UnknownMethodError: UnknownMethodError, + UnsupportedOperationError: UnsupportedOperationError, + + checkResponse: checkResponse, + checkLegacyResponse: checkLegacyResponse, + encodeError: encodeError, + throwDecodedError: throwDecodedError, +}; diff --git a/node_modules/selenium-webdriver/lib/events.js b/node_modules/selenium-webdriver/lib/events.js new file mode 100644 index 000000000..65e63de8c --- /dev/null +++ b/node_modules/selenium-webdriver/lib/events.js @@ -0,0 +1,210 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict'; + +/** + * Describes an event listener registered on an {@linkplain EventEmitter}. + */ +class Listener { + /** + * @param {!Function} fn The acutal listener function. + * @param {(Object|undefined)} scope The object in whose scope to invoke the + * listener. + * @param {boolean} oneshot Whether this listener should only be used once. + */ + constructor(fn, scope, oneshot) { + this.fn = fn; + this.scope = scope; + this.oneshot = oneshot; + } +} + + +/** @type {!WeakMap>>} */ +const EVENTS = new WeakMap; + + +/** + * Object that can emit events for others to listen for. + */ +class EventEmitter { + /** + * Fires an event and calls all listeners. + * @param {string} type The type of event to emit. + * @param {...*} var_args Any arguments to pass to each listener. + */ + emit(type, var_args) { + let events = EVENTS.get(this); + if (!events) { + return; + } + + let args = Array.prototype.slice.call(arguments, 1); + + let listeners = events.get(type); + if (listeners) { + for (let listener of listeners) { + listener.fn.apply(listener.scope, args); + if (listener.oneshot) { + listeners.delete(listener); + } + } + } + } + + /** + * Returns a mutable list of listeners for a specific type of event. + * @param {string} type The type of event to retrieve the listeners for. + * @return {!Set} The registered listeners for the given event + * type. + */ + listeners(type) { + let events = EVENTS.get(this); + if (!events) { + events = new Map; + EVENTS.set(this, events); + } + + let listeners = events.get(type); + if (!listeners) { + listeners = new Set; + events.set(type, listeners); + } + return listeners; + } + + /** + * Registers a listener. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @param {boolean=} opt_oneshot Whether the listener should b (e removed after + * the first event is fired. + * @return {!EventEmitter} A self reference. + * @private + */ + addListener_(type, fn, opt_self, opt_oneshot) { + let listeners = this.listeners(type); + for (let listener of listeners) { + if (listener.fn === fn) { + return this; + } + } + listeners.add(new Listener(fn, opt_self || undefined, !!opt_oneshot)); + return this; + } + + /** + * Registers a listener. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + addListener(type, fn, opt_self) { + return this.addListener_(type, fn, opt_self, false); + } + + /** + * Registers a one-time listener which will be called only the first time an + * event is emitted, after which it will be removed. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + once(type, fn, opt_self) { + return this.addListener_(type, fn, opt_self, true); + } + + /** + * An alias for {@link #addListener() addListener()}. + * @param {string} type The type of event to listen for. + * @param {!Function} fn The function to invoke when the event is fired. + * @param {Object=} opt_self The object in whose scope to invoke the listener. + * @return {!EventEmitter} A self reference. + */ + on(type, fn, opt_self) { + return this.addListener(type, fn, opt_self); + } + + /** + * Removes a previously registered event listener. + * @param {string} type The type of event to unregister. + * @param {!Function} listenerFn The handler function to remove. + * @return {!EventEmitter} A self reference. + */ + removeListener(type, listenerFn) { + if (typeof type !== 'string' || typeof listenerFn !== 'function') { + throw TypeError('invalid args: expected (string, function), got (' + + (typeof type) + ', ' + (typeof listenerFn) + ')'); + } + + let events = EVENTS.get(this); + if (!events) { + return this; + } + + let listeners = events.get(type); + if (!listeners) { + return this; + } + + let match; + for (let listener of listeners) { + if (listener.fn === listenerFn) { + match = listener; + break; + } + } + if (match) { + listeners.delete(match); + if (!listeners.size) { + events.delete(type); + } + } + return this; + } + + /** + * Removes all listeners for a specific type of event. If no event is + * specified, all listeners across all types will be removed. + * @param {string=} opt_type The type of event to remove listeners from. + * @return {!EventEmitter} A self reference. + */ + removeAllListeners(opt_type) { + let events = EVENTS.get(this); + if (events) { + if (typeof opt_type === 'string') { + events.delete(opt_type); + } else { + EVENTS.delete(this); + } + } + return this; + } +} + + +// PUBLIC API + + +module.exports = { + EventEmitter: EventEmitter, + Listener: Listener +}; diff --git a/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so b/node_modules/selenium-webdriver/lib/firefox/amd64/libnoblur64.so new file mode 100644 index 0000000000000000000000000000000000000000..916e530f3e1b4a9891ce378204dc75d2ee342dfd GIT binary patch literal 41262 zcmeHw3wTu3wf{*V7!gQ7P^zFu9tsu$0xBY4APf%3BL-rl1&2vyLPnCAbRG~aC^1GI zr?J#qd#SZ8y(*Wly|uLUfe$b$ny9xnYHiaNX?##KhT7O_n<_Q`-&%X^Gv~}q(0lK9 zzyJUHe;zoq_F8MNwbx#I?Z@jINs`0Z?qrHBQ3s zc;gJto0no`q&}!uBn=J2WCE2j1ZUTFMgdJuXxKYQ(KifMP|M{4CAs_?6g~e2lM@>5 zl&WZ$ud*4WhR$~3r^88-PeaN}N9ob1kJ6>pjAp<|WDpJwwcM4EBRfCqq3tY_@&@vY zDdlM>)#190Mq%W(%U6{fpG+wg_}*P*i-rvKpZ^20r3B{+O5iBQN%mfV z^9-EJaGr;A6i$6CM&e|R0FK3ZzTiayFBEvLz;ghXNP0Qo1e`9M3vtfHxfCZIV-!Ff z8OAuAXW?`UjlgtUS|=}-#3aB4IK>^tETMlvAcgO#lBPPJjdKLfp+Y-d;AsLs4e0if zu;lEM@jF}u=L62eIaTlifz&4YxCDvIaTem7A;g&i37mw}#Ca)BeN5De0U-6gDL5D5 zyh!p~Ay9*nNX)_cMVyyuq7A0U=`b7b6iLqpoMxj_-N~mEKjfQXQ;d2e+0ZpLx6nK} z+Vu@%@9uneaq$&ncHDhs#oDqZl$Q<@C&dTVi*)Fip*oQ7$VPj+>lmXLrGxCCdXg{c zAfJ=J$o~{yR6p{CJ}7>v{ar$!*mL6~AN_saZKo`_aP{9R_aC`&M$4w%vljX%4C-GP z>v{FhBRa<2^84-E>hfaiS9h*`q-FTgcV~b7fxkU|*=5nyZJ~EtU%30LvF>RZL zYyUB*_53OQmmN4`(*7~u{Kk=Smu!9}dbP2kx$XAiV-LRn%X=r@z3j=`PI>Ftj6aTF zfBV2TQ}bDuLq~Ml(=3ymK&NkZ|bIhZoW4$e9@eT zFa6Hn2e+L0$sgzJ8hRw!@Mz2XBevB27{LD5LCBjy>6Dc*u5FEpH4l_=ZN$fQu;&_AGahNfTIyR1>!0EVx z<7${uDFeWrifsG{aFj93xI_lccV!TKK=NNeg9MI<=%IOH6h`~bHB7dC{wn3(QldzA z38zQw94z^1Y@*{^l7H%Ah2NuqF-Y>~i2bJs{p(`S5gNE~tPy+mApc03jc+oUK9he9 z!zX&YD;42l$kXwV(D$rXIL*s+{HN%@k0yT{k1Akz#LjkV2pkg?Fg^w(zpW9vj-@M* zpX`|__UIV!i~bM9|L=;Pb4CBRM30`gUlBWd#m>>d=_tWT@zC06B9)4Vw~;1$j*5eW z%*EU!Z+o_m>V7_S0S{=P<&DTDbJ z>q|hgXS3K75_%Cb6dLdMcQl$pQDC0Xi*It$e=PoacCpGw>oPhv3%y7Dwh;EwF%c(PT3Bg@0>h$Q$;p^w!r0f*TFi=kag$2cwd1_)5$l-Wnw#U&s>-MQbSEMo(>^GVBd+ z<+}KN235&Z9jb~&Je&Ofde{?=RYi@B{;0=W6%B0md$t6EzR(sU5Rq)5STuzMf|L&X z>%CzVO~nMNw-U+cho;b0P1)$F@>bROeIA=xTy!RxDUuJGBeB}3fjaw*I&W=lsLH4f zg*L_NVZYA90){fv6Y!zzKy|er_Eh-|_J{{PwwV?r3Qg|fUgE2bY^^hV zwaQEtxSmk8Zg?n{z)!I_t0to^RYj3d(M5*G@AF2z7!fKX5j9qT6!aOFuUNLY#51dC zj+L5Kq%Uu+Yt3Aw)IYlZqyboC7?dQfDKsYK{IC5Z-MPki9^4n)<$U; zdY&c%?zPcn3C7%gHoCs{BgTFkU9T~S-fE-EQi;e$yNzzYH0rR?tp-N^P8;2R9o}W5 zpUs-(XNSoNx^^!S5`lah-F`h=Xrr69{9|o&nbMhS+UPQsGJT4TPEn_inKrsKIkV>4 z=wz!tifwc~cN5QTqc75#0ZVOkSvoVf!bYEO%fG=!M<7~9jg7AF$q=*NM%Qa#qBq#+ z!-ycq4jY~B1?b~88(o&v%-U(A>w62t*kz;7)=B_(+vw<6*0I+{x7Hru?z7PgtlWrO z8{HANHu?-({&pK(ud#{UVWXd8%in3E>w9Fx?y}J**z$MV=ycyjAH6pE5={i`v(eAB z(TzrvF^Z{TPN|>#Mw1gnw_iUN+UTcp4)rtEM!(!fH*NIMHu@ABeT(a+?R`e|r1IYIREIi-GfG@6_s`bfZocQ76%oQA?=E92J@PD5RCALEsT zqYNXtoAGN1r>P~mlkqabhY-Gl@#Tb*xygFQ7ZXlHUUCED^9ZLQDp|_-EW&AMN)|JI zKH)SZC1)}|f$(93n~a}9I1LfWLdHiCPD4Y|V0TIawp@j5KbYT+`;$@gj2{S>luHV zaGDa68yJ6#a0=aIDdRsQoI*BP%=ixpr;tp}Wc=RILszK`)r!YPE4yBWWR@X3Vl zWW0>QU+)X_> z?n^o&X2ID@sI#}`xZ`;(;4kVQeF#}^LK6J&(dY7lNalQb(YoiKsV+GCW`mA$6u1RC z$$;n?$bPC=I>Ozuzyrqf{arL(Jpatjo#n{01{Ip?j&JXD$73DtczL@!;R1AZ1LABj z2_}jQQCHL;@1K=quF*3T={Ho`ohV1f<@xTG3;VHx0SX=KJD0`(u`J%|j{jjltTMXi zBWB^LxnF+%8C|T~D%Muyl0@+eF0#SRpneH~B?)&i!4-+pxdhz__e=##r@)s_a=EU~ zCGjPb3gg=*<;UktS{X+*j=1A(s{AL&>s*xzsmd%{RZdG)C9!-h)hJO`iVE#v#Z;M8 zO~Rz9>5yA$0{<1FB7N{*F9dPAkp49a?miV^`M*)!4n!r2IZ<_gfsl1pw*+mkTkbrS z=6c$z`wlC1R=0^X{a>x_8|ajuQr#mTr&o9FhE#Rusx(!%;Nh~h1qWY9weX}YRo+S3 zQdM5#Zaj7yVi>Kw3$47<=S~csOamQtlM7m5+D@eQ1MW{0mp1j~L?_|r#vzEa5k19C zeYw$dn)(Jsr}oTox8!wEW#X=VJy+V1B|wg7&c$}*e0K}?$9=566hS%sHOk1;m#pw^ z`3E}y2CQxBJE`E-ufsgVY|H3oB#=9=9`#HN&UIIH0I8x%w+znh?*bB6Os>t^=LKQ(La_v2hP9Nv^vHJl}67$j+w!o zSP5&(;rjKv>?1(E)=|1aHTpUkQvR?$rRo`#hN|DOs`b0#FT3MUTLa=3m6C3sd$x+E zXkPags(j-i3bs!lUA!2FQlm@FXNt}#pAwym$$>gLErc4iSaYaREhH^EF%}QMm@=kC z=b!(kqjOsJ=o|_cS<(4V)*#W@gBhHnMn~tnf^&3gCP(L=G>4+IS0faiA8CXt^07v! zBD4f2?LBGHISmyFQpU9CJeMlcGQNbwtl)5AR7g!UYyQr4b+qgENv!Em&8Ii&bWD?~ zQ8BNWXwzo_o@=c=ad#|vX7vcFE1 zknFU!wz7W>*%Pkg;Ptw96+FBocS^xQ3=P8{WdY2v@l>DOfxJzw<2lfJ_6_&J7;v9^ zl9uw_&wilobuJ`qGkT()r)+fSIV75Bn90CBjRE)D)vC}=Oxv#bQ;Xu5KvNFQRnD`o z94g?L{cy~_%%ON6{L~K3?TO;~O??ZaCpGn57A@#G1HKqTrNmvWJ=F3eHKIefm4!;@ z!w3CXMW%=FG*pyxaBbS9Htni5?Fp_;yBdX_Cvi*$S!*-rL(zi;4Hki%wVcXEeNuHE zp>jEb=o+%1=}<-53hLASfKKo5!*D88`{87br1^om^53z#PWQv4ziRu@N5-Erfc>kK zw;cB0O_Hfu74cn+W^6|@w%VJqk7v|Y7}yD~bS8><%sP#x(X*OcW9OmmeoS`7T^&8t zpC8f)wdx^_P;I&>59^>H8$MOl2Gmq!U-cK*)H3{jVkOEcGweyRZ&j7;vyaiQLL@cp z&P5eEQ3VpkdXrYBE`<1e20HNF9QX(sj(p5nQ;3Z@3q5rFrCheFQfMPl1k;5xSkro#^OQBqJWCaHF1x2>GdazuA!3x>n(LLSDYp2_ zstVN@n0^>XDiD+U|F|hDeK?f zXBT~Hz0zE?iB%y;ZQb@upIKFXwosTWDwoB3?OJn4D}_~Yu{d^1dCIY0R%s4{<%m0q zhPiO-7qV3Kk=~4|{?7yW1ze-Uyleq{IhDtjmx|>F)}}1~fl5nAxRvP?$opBN^D^Z4 zpV{>P`YeD2`QR;n$69zATw|>^&L%(UwQwDkOhY5BA*wY(YY2}-XIp&ylJ`d`;xfZg$+UpLN&sNRvaQTg-B{enDQtH1|mA$x~W>sa6MzU08e3q&# z@5x$~dr6HIK#r=^sLDI4@*rt(R;325vKMpYZronlWuNNR#WTnV_cm86)|0s1wSAWn zJyXRorfpoz$<35aq!`V_p`AQ5D2vLJ+42kHc@;0r<+=3SVmm<7Ion~ZR@_X zo7FqKbO#lgx*%|_o$WW_+FV`YmUiWqZVU+I7L>~OnAVb}IMzD6qHt3Mx>N`vv^PGIfS4CX-cyJ{9J_vxndI<1G>mi%63>2bvKiyXX;c+NkX;qVXNW|H0EZ!*cczx&w- z<2e|UMqyrw(Z%K;XrR%v%G(;zBT_4x0V5J_2oAq<0y3uEFL{y-r5x5$y7>z7u3Gp9 zRN6KseV_CvRzmA~O!5vl9HQ_+4BIbZ3ROtCZ7cb?)#;6ySb3I;d;8$?<+rG1G9DOU1o@Q9{>vqgu{k9%HdA5>hL>c_DN&k|_#?Nmqvm1EjmZ+H#Q7$4-f#r6kVElvs-eTk@+;iCa?= z$EeFWA7R~267;T{ElPYTiN`V}Heh|5Jl!dAX-eX@Oo{hM;^-hp8E2#;dNi;eoUQS8;h5M$X&Bx+`Gr8I+@uQSPYop=C_p zIhLo_WtaL8H;0oCIi+4nNu8^t)R?X=66WBUM6$^#@spIq2Y<-wi7rU>l-f+YJtgv# z60sL@6&_yooWoOAA*Rnwl$oD}r|zd-e8hh5v_fC4W2)PWrNcg>;N~ypKq~z*qRrI~ z+l@BYF$KB_xLdX#bGO9W-7PEe+@c)U3+wlxJatVbm#N*Sp}@H7?WXN-LpNQM;7Yaw zHR{B)9cBaR=^ot~aa`Db{dIaca;&+v;O6hJ5H7a}xr58i^D9X#MP7bvC`i^rm5U+Q z=3?`DWUOI5c@7lnir3PR{yt$r1O9Mc`!>zW*!t{QQ zdn!4wAMb@sz5e}zso^&Yre61Q!PLs93Z`E3(}JmGKPZ^G{2K*R7dN`&2i(vg&!^~} z2WsCos36BuvN&I-+lmWQ$>{Dru&Y82FX8w&E$2Oe-ysMxf=<(1LHaqFT+1j`ek~w2!{2krud#yjw{R?kZgB z+J}pUMBWz0i}UG?qM`fI1&rjc@e7~sLlEG_ogruAjaM?F`%ovESA{;>aV5f^9$Rqe zJMQmwpNXK6(2to3*W0Y;t+TYAZP3FSleJt@-d`7zP0EG|u<0$0Bk2B2g(mVkh$L-{ zIBjYjgrz^-E7;|Js%sEM=TgcTe;Rr3qrCCbd?dduniAz*sx}Rl6@U8;b(q6cGi0o{ zG9K2wre$=Yiu~Lr*Wn!GSus!^c#89Izm3*Fs+HX7(ftwk81f1R5^kl-(yHg(PrZST z+D=WQlsP)(LDq>{w*DHm)HkdWd5sh$c{XrWbfpY|AyGZb0fv6G;dVyVg1mqSAZ>OW9+ zIBE!g4QkX zl&T;<(6;V8G_aeVT+xf`i+tk;;?W{~<&W$HaEqczy(iEdSJ$&Xn zUqhi9b{BxuOGVudJnlN4s(^lg4iSEVEp`e?CyGZy>MKf7TlXPlAPr@>k45fBB)YoW zipP@cQUWa7Ry@w4mW~6nPX%Q~ElxW)Cvf9GUa^e2#e`Ax2`7wt_Y5{FMn+ww zjN;I|j;bA}nU;O?I92hIXJTK}gdcL9Y4k0%ELf^5C6SWy8r>$cH!R}Jq$R^M5=G>O z3erf#2ZY#G3_D>ROh^<{qf3NNLDH-3m|)q_gPN!&JBX?>KQ-fWCH`jBsf#~6ek_;N z^ApPMkHq%2Vve1jXo#^r%=<@9{y+K_&)iPH# z!%(&~c^WkWt%QoF#i_mNslJ+IR%(Gas3A`0Kag;PkeC-S*s(%&{&GC7dJER}Y1>qIVH?QrQu z%B5W0ysXvraQ=ekw``92JsV@$R!eo&V?lvso4-T*og1m(=6{8Xvc@^NVBU8^v=sa$b zUI2-TM5p0~n4wz)69cu2 z)z)l+cna5}nfM&L@#ZOiU~@wqNu{2cDH<&RPP_lCj5rG z=u>}n-w*p8w`#dP8V`}BdU$R;wj0&6TS~9Yv^3LK2-E{AU&0{YTnnt}0R0+KnR8dS zHPe>~4RbH@RJS$zki2NlbIsM11>(eVx7@{AT5cbVA|AtyJNV~0cl?*#>!B3>J&9YV zCr>S8Fp%T6@@Re+7H=;;iUv}{Gv~6_2Zb0c`cSbxEXlhEH}#D#xb=Bxc07__2}f9W zGigSXNAffaU?fe_Xhtd+`42nteLHez3Yntb7*sM-dcLZqduZw>JyUu%TB-FGca23` zX3;LQXct;EnkLv9zT`#KIDj{g(g8f~7YN{-olZ||fG76Gd#mHF`_kI4&Gp0_vb|-@ z8pI)csu{2g*j+Xu< zjIx>+!M(jZ9(z09fqHex`mbjhyrbO%ns?K? z+%0*{3frr&?<;Jd!X8rCeuW)WSSzr$=5GArCaw%h4gbj&k6@p4U&C1R6!fL{kZq9B zbFw5C8U>HsMYKcGwhSipoP>zDgg%(wAdFFYpF*9fwrlt--H`;<)$K7;* z8!3jDYKH%44A*GqOjVj)cnLY0sftP{YJ zV3p4_1WV+d2So`3L5OET3tUjHs<45okjOh3+%|j=uE}2@I}&+6n*nQ4sq>LbX`&AV z@{td7Ngs`(@rQZ=?9oYYI<)b80d2U3Zq7$6Q&JW9eXgOJVVVxmL}SE;a=a(+#0n0h z!a-a^png0DsgCk-JC($WFl^Ig0zMa?Xd&%t{OEr<-aHPND(9WHRIYflLAfkZ#+2$- zQk}?qzR2W?{(!85lZp_?Tn;LK0F}pr>P(CD90YcWKt1Gpa9x&ns}NSJn9#yIz=!Y` z9Kv6gyl+wAse&fK+S}c;Ba!|PNjY7KS;$k9->a5mnrgDlnT7yv*6=C7xd!Fn1==>dp zxG^S2Ox|o{nu(210^VA4a;*>Pt-)xGKN_eqCr754YEun!X2ay#2D*PthlwK`3Plwa z60yoHIvowv`JpE^&73mXH*KNL(ePh+HmHp z%|C)vJ{OsuzcLn$hQQ9qE(WIO#}+8qOedOEU={CxvnmwEZZ+8bhxU@WJnXHMWO;C7 z3i(n^pw>^!O6>JAIVM>aVcVKW6kDAr;j02+>_DScEem2}n}Ee!6$;h{f_|^gY~fC+ z(h#im>r8@`!QoQI5`PqX4?)<^&0$b|>)3&4Fds9y?J|5x8F}*+#pWiM9AmHDi-Gg! zI9qZ40_X2=zJv1voH>}4vX?Q`I2mh%FW@{E=WLwCI9KAl2IoecB!~8m%ri}6C?Rqf zlc&#)nJN2qd?4U_(Hax6W7hZs8*9*NNLGbn)PBC9MoFlC>mqDe!->*bFMKfBr_>mv z`m^alTv6sa?{%Rt`=Txoq!bFcDi8@&25JM*t>wW`WuyxGobtZ3V z%uc5QRFqGSsK6wO+IUI#7JKiq^_VO^7;038!q{pD+u3OUgf?T39c)yD3Z(RNht8%R zS*ZL0`P0nmaH!5x6$(}dHlos&)=!noYRAC!RIWdP9S%{I+iF!uS)WoLODN^CR7jD> zNIt`>-b$3A9q1@-5pj&g{#xv=wKi10tlC%{!a!7q#OnI`5Vn%C^+!h~9HZ!o+nGkZ zPq)j~$v1mzV`4AW=^fng_yA`PZlR38c_vQMcLINlpOmMw_zD|~)_SY_tAnVtPO6&Q z`rQfi*ORm@oVb1`@=r>jG>qM(!qKg({9CS~dK#Lr#9!;z?q+>nG=yq33;_|$I;n}s z*$JiHBT#_-(lCwi)Rrbho>c9Co#6ao9S&hXHff{5UK6rvQNkjRt>~~fo1>6=sg#4L z%_U(p7iQ$F_GM_(`9DQzNvM{lxcX&5c%!x!Lz1Et-W zl&=n(f_XRkJ<+Z85{2SQY&KTsRb#endbcu!jot#7*96yl;%Qt@dj{zhS96)wfp8>B zo1v*yf@3~_l2U9s7cr11gU`I!!)!6H4-{FYHD@Iz_)t*I)P{>DSxK+(dpG+f&AX8; z3mObpWA{9$hU>Ic1G>83z&fD5CQub|DRfmx5~=A!@|R$;ifYwM)Gm9%Di5aA!Y4vS zs!YY1Q6~HJX;pe`PRDhA7_}J_m$1wH5o~p+c_o2x6>kiug*C1-=&mLFH97!G;MA~T zp*p)o(E21`G+Gi5J zoa27m-@gjy4xB&3`8Lke=p6%`*W>&ToJVjL{=UC|G0rH?JvcjY4n5r8KObih=Wd*@ z;2exs8Rp@v$GHdRVVomS{vw>z4;Jx;iZXc5Gbc~1#bT8gzA7nW7$K%ng4Ll9n;6bB z4Mo7-KEchQP1wcJOzmig_qj22nr zl+t6WEfmRKOfMK5$rQEyp}ECNrBFS2PdzCS+Z{$JyZA}e_%IzsL#Fg15t~AbiA2p1?+|#QfOvkQb^&RkVR&+J2Q&{F~`r5CgM<_GP7? z48dgsxl5Hf)apKFkk|D#->V$cOk7ETDYb+{P?mEeOfD)*9FQ}uJt5B-YOJAMA;|=` z+N6yk$qA~75%yRKW@IQbm&CBWD9omv7s;pElTK$@4dtSZ5KT;37>s8~%S@pnrkXyb ziAHJF`pOp=?9he?BM>(h874d?4WjC#Jw@Kc-u$#}CFE;saXEoS5Gvr6s~d9$VnXF15TXHCZzrv}O-Kv%ltMckHv+a&I&2YRtQFmV+Wp>-TGRG9VI_VH&x@Ky`Q4_r8`Og zvwAW*1vYS%V5Bi$jSGlxsL#p@1g(Cqrb()hDsp->G+iPMyWG~80UwX}scc;Abo6t{ z7E!9wGo)Ort~33w6KGW7D_i+~#dgILq-037uP$OGO7*a~<@7vuroz&pvt$%e5O z@1vW5!|_IbG2l-DHvm2XxC8LHqmT#u&L1HUI1*z~7oa-{d5mUP0h)lj0gC}2JO+8d zzX0w4q=Vlv0?fI-%*bgd%sF$|N%{0Qd+6;AI!8a)-@gUWSTv%ri8vp9lXXz-;9o26+o& zej8%i;zv^U9|!qW#QZ?^(MwyM;P0bb$GU#?Df#)J*E}|`{5tUKz~{%RS{|zC7>9Ek z`2PgIh6tLUTWtC79`If0gLHe`;@ir90`%$Vo2_%iZ70zS3NvnSAh5BR;{@3!lYru07n zem%yX$L;*wl>LXnKLumabp!bCIQZolqda!`>r?v2A=1AI{xUoNx)gst_y@p$(asO0 z`0K#0!I(D?e;fFxV(g>8!C?7+OG^G8@V|gDagSYpO^W{n_}>S=*)HFZ;vWWoFviZW z48T7QemTa{H|_du_K(9@d^*P1`|W&N`SZcQ2mGUUzAgUNf$zoG%zx8E#~08 zfc#+ojZc?0l|gC7O|?g9AYFc-cD{#^s`=YwDMT7Un&cK+H_`>g~2kKo^D=TjO7 zw?FvTVGh2N2)ceY`Fp@W4F0=zzAZkU0DlkePdMVolPdo(_`k)R9JLU7pf7sDA6fp9B6-d-=?j`h$NK)(Ec=P1oPX zzX$wR!QVUp{|WG?Vokw+TPBPAVepHwwiq#h{BiJ$z+XN9e;n2#72uD?IAPgmo1f-` zzXD&5EgV389r)LQUy+4Rq|cAfJ@B~)KKH=q9{Ah?pL^hQ4}9){&pq(D2R`?}|BoK% zmqXVr9oKZaRHTFcmKYtw6tMoD@NmKP-#?XXMz08d_=&n*GFKS5#OI?!6ycJWkA1=z zDtNi%=WAKe#tNM-{pjev(PW5QW_%QiyuN>oOG!TPg$N(Tcr%#}P4DHKFsZ*^Rx0-5 zb~PWmyieqIPpjmIpZNBV_Diqe=L-KHf@?pBy8mZE{taeU+inmC+#&FL0v`}~P~b}f zj|hBE;3on{@XajTR}fevaG}6e0BJe$dp9ma*Z*IAKfkgrr3S1@dT7f}< zHwe5#AbpEW#{&Wn3Vcc6zDASShW`6}`tR}SzrS~RNy$8ON_i#Tm5rHmislr}o<1kW z*o8$GOjQ)zeZk*RjN%RFBK*xr1#5IF7>fFf@O-zZGKL4&)A9E;8LRO|YK$V^)*$@_ zMuyR_;>fdC2jT&b-bA5{lB&m_1TCURtVU53f6&n=;y=k+6b|tpVl494c&fwn-gk`; zvKljrs_>>=1O+N^T@{$n>8-;bW-Z!?x1s5$h;=JH_~8$KjRx0cuQfrffM(B*4+U4OdAZ}G)39Dolp>(z3kAO+O}pz4f!6g&J3u_*QDD;-tzw%#nI!}wfO4Aex#RA_voqqTE4Ve<<^kiHLxG) z_BARAQws{za+>@*B#5T%?`kxG;rW-yZ(uC-W2Tav z`U8H+{+VfXEk8MpPI>9jkd}+OY-Y&Mhf;pGortuS(`3TaLY!G9bu1jWNe86oK3C$@ z_1EJHt#h-LzjqfHIBwAb3e6~A$XUT4-o(tI0zg)Z#n6M4Lu(@>3N2p zXPopQhMqs1^pgxdFF5J>h92*o^pg!ejyvi2+(A3g#u$VVUXQyrGHNx<(Br9-KHSjb zq?10vTE98z1%@8iob*CNk5^9mNJEcDPWmWAk26j>E{^p0VPg!!+ca}(PJY)4wAY0`aXb<@UQhsk z#8Tz|lhF0J_jjR>I!k5L`G>$!r2nwcb^gOC&ryDJlEQWVbwYOueV<|*w3{5||4`^PLfNYFZ82AuN8Wy(65}T2%3IW=m&(Z z_54-n`P30`?B-w0^YAN`yI1Is3w^B6tG=iR{O%Hx(}ezuX^QTV{0oFWZMq^X6Z$Hl z$Atc((7i%0E>Z+dj|u&h8H&#DBq2#Vz>=L8$i%xx^n6?BzY#jWg9P4>g}#n1xNz{h zM}VzD|HW)38*eILydw0U%u$52suQA<`m64tS^b8to z7-nX6W7Gijb3sqLRAA{#2B5EH`Y^+n<{vN9Gw0=vlK<#JWmHgXyFuuih0Zqx!HY9p zGTFfQ2B80J0Q$3_XY=!moPU^c<`Sj+UMb^sq3@FRmF1t&EA;!MBR(qmPtH?u@~t#K zjAOdZa7oS>fW8QHil3P`nVeJGTn@TU+qJC+eS)1J>8-4Pn9(lwOceS~re_M=FZqYb zz{c-1A=@KDUo7)og^0c+^n>EJ`-FZ>=#?%-pzBIHh73{unYcjV{7x5=rwctt$~{G~ zjj2NK760=)O5n{A`g-Yby4)o~zokSexJ&e0EA$@m1HWqrUKsR|_{;L`jV9;R%k%3w zKa(6kEud%fKfS|7#96*1^0Qz4S{g+&%)bP8ONG3t2IO%OP znW63fljI*P?IqpG$jALBveUbgvm5+Q8Iog#eoV%hyA|8Gi0OjZz;e(Fu|6!8_|&Y` zqGzh;xknh)1L(OPbXu#WA9oCp|KA3nKg@bgH(DD_R;B&$DClHoy8l~Q&oHA$#$kT< z4wA17p#L4oe`G1EH+0+%K|$otHPY_7E@MHbcIj(0SzxddGp2%`Eq-Q-o(tS6Bfrat zijWrm!TU<|HlKYA- zo;`P#K@3m8*Fe}DL*112#p>#|>T+DGmT)mk%NDJ4c{E1F=ya+SzJ1N5WcjKQ-)q-~ zHsXtR-U$Ja)iDy>PtfC8ziZXvSK69=?Ojd@xVV^h!mZ!Qub-?AD5g!}rL*{Tvtv3?! zN3g9C9w9lkc|61lM?KZ}8qmpt*{T}&B+u~h^C+sd5I6b#^{8MtR>eI8&&9BT&_)B4 zU{zhcQxi50!e`n}S~a$<2s%l=T6%gG@kc%C(^&a{&R{Qic>4@bG~~gcU{vGNLE7%1 z&RdV~plM4Y#V22zOs07vTM;C6hNV}1Qt82NEio@`24Qgh#4~VjB!-8TvO@u80KeDg^hpK2 zdS4cV*SUjGlc+cf1mQ|Nfs`rAL$GR-r>bUCTJ+5^DlYd&7h%7WRR~yn`x^~-vYGOl zSc;%fJ;=aDBAy0xHr<_7&|p>+Us3n-U8i%``Rg)b)#DHPjM`9WQ>@+-2yHrBM${C_B2tS`Wjgkp}OoZ+lCA1&-f@`3ZhT;J%MUZ(C_y_ R)zuhLe6{Qn1Fk}F{U3r1%dY?c literal 0 HcmV?d00001 diff --git a/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so b/node_modules/selenium-webdriver/lib/firefox/i386/libnoblur.so new file mode 100644 index 0000000000000000000000000000000000000000..8e7db8de3f47e756bf6f0c20998a63df90eb5970 GIT binary patch literal 30887 zcmeHweSDO~wf`gpMTin?RH~?}1_cWtKtw@{;bnQTA;d@&tFq)}LspXAxGxY|!K4pq zjoWQe=&kjw^wzevKWn*_pVEppnAFfpZK~K}i#Dy)ZcOTpmRj^$x!>=Zd3K+D3H9F3 z?|1*Y51h=LnK@_9oH=u5o|m1u!(F~4CnrbQ*C;hg5!+R$R4Kxt8l6+BTMNLv4 zmwdZC!}v`aMiVJel0UpgsbRl{55Vx|Tm^cakEqJ?00J8J11B&)&%jZHHWVRFu=B3{ zQ@9>z#%0r2A>Ubl0qQ4^9)W~t9$Ko@(u!*J#=Vav@|ryp{tl04xT4 z5^y=d4d8XA4xoFb&HYUe19jI|8{5Zl1CcY5id4REi zkC`;;i5GSCQLmyA3eHCQ6u@|se=5R!z!`v30CNFL0KCoy6iZC0875>f25>%L9uae0 zXh%i}X_uD($^e%EcwM7|#NR6sgXyYE0rLU06X!+Sa$YApkkd_k7Q#=MIQy8oq`ZXu zJJqoAwf0XveOueq`nBkWwq?uWYsa0s^`2{2uUfX4WqGk}E&$s^J=(TH`Kdd~=j?CW zwrHEYC2;Qcf4qGv@PoA@AK{)_sPpvzFWKJwL50S z*6*A(-+SSxZi{x+H=N^yI-3$cSCphMzyx1_pY*`-EaT$n-|@; z{3mygdwpoe8|U6~*B9TKbNX4Y+_rksQ?K81`?tS5{NSHnzhlc+pP3$8Nz(G%bM{@DUT;w+`4d3Ko$oz5#J@L;taPphxz?om?z&UPR z4xIV50Q({yaMVwJRdyyq=5I-p=ghoh0ijQ#GCq6`ocV7$_!GZ4O`coR@Q?$iJoIVy zbs-{8q~*VuhSL}Kw`hMn0iH1r`MryjdIRaF!<+P>JsTG)Rf&-JJjiz`4F4-8|2~9` za4b78fSLaw@_z@W)uuds?G?uHpRP_-e?0RK7$-BpJFS3vK&O^@vfm@%#cJ_UpBER zUI9MGF*$H_$V(_QWA^%mN{|VaPZ}QJT{wpX?|4#aSsP8MN?|Y{H zMMyv5(CW9;}3w}51{X}k-+-Az^B03y=UtG0O^lA+ILAB zzbPm;^f}~T4Sn0~RUXf}=78T53fBa~9*^?){JyaAG$24$U26@aHBG+Hc$Mdx z4W26RI$tR44K8Y`35C2Nbt9l6psM}r{eg{s)#|HL4J|>RKir@~CT!Rk^o6}hj)d#f z>ZRWBf^eX@qNdraRxb&9@wdv`5cGx`Kjqz28>k7^uc&Eh@%h&&A@_JUc>Q4$Z@n$z z4Q>jPs6OEF2f~dkx6ae#s}0r!H;L%pdc_ua8Ul5ZkY~Nu+k&PABXwc5&KvgB)P;Q; zyq=9de|=!1@`X&XKqQ<*e167*-j&k+u3dZ+N*Mrm%$lqe6{=NK-vp z7pgt|=x)T@TNra%at=4~b)j0^NV2tBo% zghtiW)pWBAD|DQYL9Ep^4A zK=B-md{m8&t7}}ZJKN)}uL;*6y*3omzCwAt{(7~veEGsfo>|2+i)Sa|rHRSKt;9b|ZtQim9pfS%!L zm@gT+LC+93ZgGZ~7ls&~gZo;BT(pDl$qOMNL(C0h7-E5*&k&3G0)|k0Aw#SKCNjhv zFo_{#b}@t;MGVU@modbAI*lRb%@T$u<6fL08gKBQy)VtG7mDG ziGF5?8|doJKV4@H<;Bs1>ZbN?J}!uEKYaZ7@s1b6qvH=DH9i5|6F&?cufFML-NzrN zfgS%Qxp0FmWaLoy3n3AN~j1|3%{Pi)g>#+lY@L-Y57D z;(Y8h&?Wf2#3vHpCHMoxUBq_^zLPkYrvuvrf0%d)@ixI9A$|q%7Qr7SUPgSa;Jb(~ zBVH-^ZsNQR8YmNd5AoH+O9bCbd@XU8;9bNUi5CdoL%fB!5}c}SY$ZPY0o#9ocpLG4 z!Kv!TJBjxRevtS!;$4DM^^Nxu-zE5A;ya1&6uh7KBgD4}euVfg;%&fz$c1rx{dMv0 zBi`OU?JXe z_hGK}R?ghvkSq2C8CzXBol@-h4vQr;&D`PO8_!u}pJVkD+_dJFZu*Tl{3fb@>eH;g zFuFY-<>5BYh+6%Ob%n>pB(1Zs=y;#iQ+U%Y-O))!-P=TVYp5jt7K*iZe-`vncYde) zXcYfj3i!8d49LeuEovaD2FFCLVTnbnk4CS_i*0ZD-SOj{;iAIM#YF|3=f9n<0{ z#%z1{#2bx@|L0mf>c7DNM`m_K-Mhqy4@ApK ztYbOh3-RZUljscwudt5ghR?N*jS62hI4x#1v3mFZ!6h+klZjp#v$mRONzA(2L?_4G zzeT|)#zrNQA7-+#Z{}dMjfTfzc3G))?BwxZxC_GU>(7mDo!IhSl>P10XFL0j_qSZH zlo#-6z)HYkz+6Bv;37cG`i@lCGZ>6nPnhVsnAKyVH^;1(O!V5A^}2~d`u9x~(vNwS zZR#0>m}i?Pr0+wLNMD*ReIKP?`gbioUBLly1!xIe!NbxdxPnI{0$1=TBXkAOM20JP zSi6Epv@3Wt(-rJyWpCQ58o?FBwojwr82(Xr4}$!tdp`o>+l0k;42xxDBG*;feM)S5 zH5tJ>rja)a`4R8z(KH$?^L~$oV|x$HYec`&`VZq*;73=*FN1ZqcR#zz7$I~E_uXY1 z;ZYi4SEu`M6#vT#KZ+3^N*dvz!GsYWVmE3dJT!=Ie6!Pih&)C0?DK>XzDdot{f*s- zDkq8&#u7$&?Ej#wF~Zme6~9iYR{<{qdI5U@{|5Lr;C_H@hX<2(cyKUbhX)4}c6e|w zVTT9V0Bwf{*#K>a2a|SqkPYaU$pj6Um~MytY`{;BVq&(M(QDD_gJ@iSwEB?UMj8W( zJo+x%cr@8}7hw{%dRAd>h11WN4n76hVu3&Mh4OOkd1;2qejd z$o%{|idpXA9B@5<3kI6Zmc4mJxK~s0Gf}VAQ=}VZX0m-4r0v}mRZhRoK`OIzt4rqS zN&LGkIa9M*j{Jid0TVG_7h*=0^#X;_!z<6M7p|i`$%$1eZHkvmrLSC@-O$C`!q6eY z!D!hO>)8D8$=0!}!>10O8MFGN@;+L?D<-P_DApARqm@(O!5msKe)Q>g*u7wehV5m9 z4LcZZLBkG8!$1kY6BmZ?{d==FY&Vk8FtM1=z^F)F36FoqYtj#}tG;A+NU2p)%Hb29 z$IYnK(_}jY*w5nld~{2D_w$uT8)!C$eP7D3ho?OvlOTqDrZ)PM+UPd}x}T-lrc`an zfd0YT6dl9W5n{p}det1hM5jqGBCR1+)MMWx=!!lq75#aIQ{azQQR&DP zy$cga-i(MZeh12G@4h3Yo}^;dk{4(0)Z2*1gpcuyTHfyopUYGDaDn1fa~ruiJfHRs z;)ZVqM;0zCI)N@-qRUCK?T?Mz#E+#k(OB-OBHVrD{~gQSuT}8TEcYw_u02Ir$w z{na$ve#hYc6gtRe66IjzuwgUzxM3*m-7kKM?ZBeDCw0A(It^gaoww0rR=>MZky&^& zY`Y!ww*eXeHvuXEG3#;)keuo|WkDVuqCzld zz)xU0fuGnT5v*bLyaE%!yn>O4nE@m5W^xuku?GSC#9jnh{De#vm*B=-$V>T`t7b64 zg!TZL;I2Fx>B}@Xq5R8Vq@R+@mwG%yO`mqJioc9rXz#AQ#%VXLGP a1Inq3y}K| zt4y2N9p=3m^;tbvrMRS4VLsYsepJSaj2KQs>JOrb^pRI8j2t7cGF~Elo?dQ@;^2v9 zLwYJK4RZ9-;Nz?VGYYz{$V8pf2xhy~9+k=PU*FUwo@{$5Xrqz-OjXOY_&Kov$JFv3 z9tT@JmF9^Ey+>ud2|d}~{obV$4iR>9f0}qYkjo?l)0A z3J-|&PfG7I8HI1fDL=;9L~C;&?zEy9=XjQdp21Tstns7Q6vnncN)>EAkg(#EiB(3; zljwS3Fb)hT=5xZ=v06L#!jxg8r-m=1p7!oZc+0Mr`(`C?Z7z_e!|9u*7m(*YsHD?9 z%+Ww`heh0Br?`0Z25}Fu^_)yn`&=RwZoyl1-W7! zcRzci*UcxP2>5^${R1JF$r@*(?jI5IFEAjC97&(#NPk(<4@v6kH<$q4NH|R8?vn&afrLX$ z*u{jjTbQfjo#>SI?lavVRozaT*a9JJbvwJELDIFlo!w9&=}>o86|};vGW%i0k?3uO zv1ki*v&!h6rUi{)3c|n?)7t%KjwGlN`W3~ylZwYkLjPfTvXeZrn`RjFDeAQTl%~$0 zBskPr!-VAAp&jOxuz~jO{dfZ?D}fU_eL9c=IQHt8!cJFSYpfKF@gzDb0_vg?G(md8xa+qSD%x4vyFH&OWRn@!ZI{OmWM zvrv*2w@lU@yajC{EuZhplbQ5exzo`gl;=RaK}a3b)|N@sxOqr}rWMBj3Jtb*w=EET zN0oK#!tr0I#QSZ%ZhYh!)Rb5^PMU}JfM4L<^L>DIfKosX;03&2 zzaP*DxD1dB_$9u5djQ}A%mIu7^j)RYgMeEBmjm(uzrwrrhXD0}O98{E_X&UnC zd#MFHE25nwUvNwjBXg#F9w`I&P@o{-GVO0p({B#1@w zz^_KJ`Af2rd?JJ7A0&B5NLFPfIYyVAGJ+=Hc4Afo*xV}3CXvzl026| zasYSb19OGs@vJ1=ND{u%k6C}r zO7cGLTFoo#R4rVBr%wY7Liu)9%C3|;m`-BWgshb1 zBT;@8k5vcwJw?pAAS>nRLh1BzkK+;YK!=c&WF`4M9{Xff&9!(GKUfj7=4T~)M97>q zJ<0OtLA_BtCMYLS>a(<3JVVzXCGcAYKHm0#M|<}WzI3uS=d1BsFM&3D-A5rT0(lA2 z>mJe=KdV6E5e6}L9NI37xrY!G#Bk?>HCW7jG^GpV?qxh5ce?wz4jsSs=OB%);Cqso zRZsB}D~t4J4}0*cE9#DSbdBHo6%x6J7`=;CTX%ypTAg@-GZu-?7dW?o)QCBFDG0Gr z-uK7coIdL0flQrLpt$8elEVeHJ3jZ>AZ~6`Ud(J3QHHq4S@>JB7JUrnY)d?|miJJg z>V+hfbxdy=oUMtCNyPZpNaq$LVtgB^(b7wBW4{NJAOyk_$RuOnbxsW zGLz28Oq$?GiXXt|dhPrEf{)sx?HGHPmNh zM4MLReBLo)X%@47W_XYferJJnPr|g(@kQ}@P;`5DFFs98?f3*Uyfm5@ zvkG~KgzCPC>O}K{OA;lb)x&xa!XU;(P6i)Z0bhnAHK8yP$xPT^h6c__Pv} z4LtrB{&qQLb&;#^f5Y&<5~Ym*mAbDkqEyvKId-YmJY8Pl7Kc*)?jWYkGZHFwndBZM zr>U<*#C&>ILVd$8*@8Xc5bV@6!Kw_$e+5Tllb1ur&gYDj-$P^PJ{P&zp!c)w(xOH~ zI9CXbjijiqF#Z6V*xo%=WJ25U*nRxgAL|Zd<0`<6N#C*i(4J`UC=|V|P11$fEvEK! z6SYT8?N6bR$V~W0>DqVE0Ca*(YU~UwFcpP1?fbKlxJ*oD5bsOIL@Q|)d;)7$B{Ay} zQ^SpR4Kg1lmMFAYSNtgm)ZV=eUvL}u!{LaQLT?0<>^nzd0K6BWBn#vdOB+l~DU8jH%Vl}E_%Tf@1L z3+d^l50@E!5nW-g*2uQOYo%gnJ_1K0?r?B^%xW{Gm!kAwF^aI(yTG5uBF+8>a*|`J z%alJ$xWiSt94|Xu@jD=Idv|_Gy6zfNba#&EPO3VeRb@2rYf^lC$MZ?MdY2ltW%8xS zr1%6HVq3q`DrQfN-}-sbrgq?LQt|OSJK#$9aO7h#tIW_Y1?@nauFect^ML&qeHfO< z^0u6B^zj#z)SC7g+Hpu3JS}G3Y4HC51uE$+n}~L*!RfZTi=<{evW$F8vL`Xyh&X7^ zQE&@MrQUG8)zgNuo$jr)b9bBlt_9zJ^}2VA6M5SxulwGp8xfRzKq4r-QzCdn^KjI? zwe#6nWXB$k#m?V!?)&SvP)+g;;X?e%!y0NcAH3o-$lZ`E{x~$=-d%=|pB%NuI{Y7M zZC{2~c6KxZv!3Q(6*e>7%HEC|;H_88@ig>ycoCgb`dr647U96fQy~?T5~4-nH=3VA zu?xGPO6ccg83==;W$J_@_0B$nBNgA#eHHG%y@&E8zCFo{pCXd}%XA3+bx4KYm&K~p zlb0w|7(asEZ|}Yhh1d`SF<_;i2=1YIm?wgto`!EI0iOc|4fG-WDWD4Q zV-wCr_(Q<=0QUes1Nc_}%iIdM%fyL0;l4DSd9?tskb;4Gq+?;G1p{A5Lge1R>HQ_k?2fwk5W5i+y>1aA>fU{&doOGaoYmk0S`=@7V%ASM`se{QgNuJ5mUPbe zC*6Gw_#QVh0kIbwu5|CTS7f6#Kc{ugg>hOv;e^$c#vg+{wRd0n33g2Z+J{$ZN2TT^ z7(uX`QKB;UFvVxOaT<5(+RsIuM<|p@t~o$ok`uvO%A(9&!AFLT=rnF{a@jT|Rgs(+eR_ zZ^vP>!!_tw8T0p+Jo1ejzNG5D17VB zsaNLoDmXY5zXbJ1Ei5M`dpWWbqZ#jv+lL-yp?zo^zW*dw%sCzPWQ=L2V=W@~xW-%l zUUwTxtKN>=k!JwWNmI!k+EXR12g3b;LDUp?7xj-z5O$wLKef6#B`|ySy4$n z-q+dD3a0TXC}{FJ!bnIICqhntW`RU|SU(hSF^eJdeKZg2qqA(PM7eK(Y7jr!vGvf7 zf`;Y^WP#?444PAuWrF)hDDz%I8n|qJgK~PZj!$aYs&xv#2TD|bAvR+oR&plpmnVsB{2l@U4y+eBj&Ayp|RtQuIQFCYb+UtpvP%r3VVgwkN#htkYxwon45FC$e8N+b*&(^g^pRaDmAeJjbkpG%U<@4Bqb zV^jo>?Lvln7N~inW|;0U$>$`PM)UDoEBoRz&iEE#KaT8oKqGb@L*(Q4WVc9xH;XuO zKfsy@j{?FUk3G(4Z1=@zgR2_V2(PzaQNN()d~!+>Q9H=#B2{RK-gC z>|JllpeBc0@{9RtF8q4mSJUL0+*FVFCV#lm8}`+?CWofE^e@9*C9RX2TKO>3g)0~c zgmnr^M`}0P@vyJi3m%bat|^o2r%kS(I!%hsvoV{VKVSEfsCAkPztgV^)PoFEA^aTQ z6RN|n*Zr)U#ic%H`PxW096)wPag?TP&a(LZK6Zi#XDwVI+c#7Mg4k*SJ5_Kagr&in zS`)4IuS+5~H2Rvn%&f&m1(PGD$O7!S5DMdW`kMH9Ul7|T*sPZOu`7cwky#P&H~IYD z8oO`;Po=61Kw7U|$Y51awy9&WH;fGyKl&eHMC$?(>b!oeS`=v6 zv;aFKNTjl<269iXH+}lic)$i&VROx`fuP9W?DI1Q=GXf|zFJ?CFTAPRAE*u0VN-^B zM`9(mErCflZCaU`wgq04LFm$jX+M0QM;{ z<0Yj5DW2`b{Yp<=DjzPGgrYT}%wcGR0^`SMIMJHnw#!j7gr5}y6qq>D=ES-RN z3n`7MNE=S1gJj{#Ahse2hBsAsH(t-SC_7=Xx5-O&3a=U{S@#HBLI~bIIRPXGlW?H z61x+H6e3mVg&J&jvry(?ovh<_&I(MX0l%IVm75cqiI;n8Hh4{3wyjz2R}!woHcMa) zwb@jy7`9%8Ik%)d_hOh;eowvvrtdkvtY+@U?3)sWRl-^dcxVs1m4MJdt4Y zGX`U$O+IYlv_e~l-NPo&?7XEHcrLLV&YEh0>~v+E-#pjki<+(n|iqNaKL3O){sr% zWSk_PD)rX2w9LRdFVZ?a)Z(qfIINq|>hZ0^ip7hKsALgVT*qCd(l!yB;@yB9W0Zoo zwe?u*r65=eQ&qaou?bUk`DMN8(7P@%&4tx5GEFO?4AhmnJDF6K#RjOz#712gj8)fh zt1gNlQoFcY7nPv97bb=kQ$~Se*Ww7ac!Sv74vRXqHJPd`=_EIIrgC9AfYX~{dSwdP zPj%I6F7$@F*R>wtRM3AgA0)0TRxW7EbcSw^ttIT+$34VA+th>=E*1?CyvD57T{B=W zdTq{S?9^h{0-NL5gfp`5il|K^nh_+~kYX3LU^XbDK(K(NNYQm;<2W<&&_Y8i=9bA4 ziq~3o();}X4RS62atEnHh0~L&8>`$^RV%Ap(_M*9aEOR@NE@7du@ssoQ;6;4*|SoTXV03BJ>L}SWWc*8wgk7h5Z&}Wt-l7-pbM+@5Z5Ruuo?}Rr)250 zM0^;{NN>?5iDsKN+_dsuiOc(Pz1<)T%*R^~%nS9fiq*+|*v#TY4g>KhfNlfDyL(7nPMSf zW9~f3M;A!vflU$Zy#e)5u^kSUK8YNdP3EqF^mzY!{jUc8R|C`l9=FQVaXVxhA5wA; z!hD3>tMycb+yfX%if@bm_TllsYCQEH4ZIC+W%;s{Uxjlq;zKwNAwPvd5p^`c-4n4- z9q9OWbOHd|*r~GdI^K60_kopd17#0hemH}tjDa?!L#6;_8AkXfgm@nzW%z%6)6jtP0L6g$fC|7GfFH00@Fl=QfX4vO z0A2vR26zkbA>g!+fgVr{m=CA`tO57|TL51IJOp?Q@C@Juz-xfF03QNQgJRDE6a(f1 zDgbK$e!v#MmjDj|4!2<6L-gZn0DpJ9bkU-Dt|`^Ecy1PPl@^y4&z@cy5$v+!nNxKN zxMCB}FrH8rW5ZG%Hrg?NAnYy1Tv}Wk!9+bBo4X3uSQBbg#r2!~-2PL-a8T!%c`gO< zAP=i;meY|I>_%J6$xIc8v6rYSmd$^Qg8|v{v)J3{X$W!y)#5tbrH4>~4sNXjBQU9H z#-_i;>+tlFe~N{hro>*MAPO`$V+m;Y_eTlOL7|fYwBw@&iV)hDZIiQ*z%jvc94CY_ zAa*`O0zOty@4}W@j^l{Xin8hDu0TG=63cOX5q1Gs2ge1=bDWg{IM!H>*h(U6kpBY5>Qe@WVLdSgb^vvtFR89)PN}d?>@Q3=>Q6BVUf^W`JFe z#>8X?D47j&etC!k(!BI}cfj_$2G=1KAZmf-h&#HnNQqwnL{Bl{6&|MFtJ?6)TX zcD>vu_5jLFL7IKB9N{T|U5@_#D9Xj{LZ%GM^*GAW7ad-k>;q&a#?O#++L6Z3)DhT= z#<|K!UZZe2jk90!u$MktWXqR>o;@2l#}}_0Sj`khO#L~K58qIW4`FgHR!12A;*7{Q z2dkP-Bg{kn>?z`n2urk>Qa-)@F!GNk>MKy~z-|5IK!0Bb?yUcQ;!>%u|KEt4i|y$_ zyb1MDC6w`9X90g;BKX5p zNq;f$d<+h|{AIu|2L2#I=9eMth9kA}%YnZN{3*llX5japtIu*^dH&w%)blXL5EAE{ zc<%X1{m7Kx3jEi=_Zs|O;P<$&CNelTORc;>pVvbA9|8X=aG%NF51a?d*!au9eZZHR z{MUi+0{(!({|3DLBJCT=kDv1v7NPw}Cq4=IRyZ8EJHe*|e;v5ZZ$9u#FV=pK<*x<) zmILf{%-M<)qoxp3R!URk{&*td66niEbd>8QZrzQLES>S&MZqvU6 zJT@KYc^G~?i>2o#eGX3!PGtHA@b3X<{}4YDE{Fb`S5EHR$EN|e$5&47nQAWZ4{UqQ zouHNgf9V=sJ~uaC-2%KHI9&$uFz|J@{R58zx5qd6?*Q&Rd*a)`?F-9d^&{ZUvp;?f z+<8{WpMX2hI?2&4QdrR2a6fV9*%;?K^2vXO184cA4%`L&`ZS!sNp+s3u@N}e3cPqW z%4Xosvq5$Mcb?_(b>Q~J`o87BDbEvW_%DGw&kFeiaOYVWM}a%fLOB%^xbrL%7jXL` z|B^I(A#mr}DAzmkDc>3gPWl$$&a+m&0Ni=D%-4WB&;Hm2+<7+23&8D*-oGEX^DLV8 zfjiGm8KopT3p z`(k}}J8U+30dG${o<*xxR(Z;oU$=^<(s&l9VAm{i zWZ^8Bbxna<962I)rkGN zVyR|H)q)jnkBzY!JD#jXZiA(kEN^}A-WVr%;7vNpC*G&(xc%Z3n0}M0->N21M}Eq? zRTOYLUatamzF`Gwp5wDhiSj)w;wi6Mft$Cgh^4)7MM~nGE8-ciU6GdZ<`sDA%U2{g z-@gJ)zJk?={iYLG+KX7EEJ}M9>r8SGroNFCPR^IIq_W?`>c`zwLL$k*DDCYmN+n*v z>KC-m6bD_Rl!JZhn_5baoahjvwAaUSWR$Z4ecq5WCEJ-)_BliP^rB?x znbK`p4zbESLJAt-0a7?hNL~)v=LMbky^lWjC|MuOWW+Z}S}~4;wB*>OBrRmkIJL>~ z!VQ@z2R8>V^5gPl0&okvf}7h@xy6(%P*jd1puIW5a6ha7_C zOu)f!=3FTIY%6DO=J{AzkMqI^G{<&j9?+I?w3|6PD=VYKxnQZs)+I&a8CA(IR+N0% TU`Bk}DP=s>&OSyW(-TR|Ea1O)&B z0s_E5f>jdW|5)$8C3N{KZ(9aF~rWqF0nP8OUj_6-^B`8~wo3-jU!uXs#&ZpC%!tn#R-J_wtY`vZ$ zefQ+jStOe`UfVBq?&QMVP7mvoM?(A_YX|O@mEGP@=S$4TF1?<7&2_eUq9l{#Yxuf`HaKL{cnk#Jy3p3ia}4M8xweSM|>Ph>tH|e z9x!`Cc!TWYe6NlCI>nKi+ap-~hd1F~A*AV3Bj&W#ElLv_S4?WTQjkT{Few_RIo6ZX zT0WjrrT+k9d&65H8;To9@&`HC^)CG$gwK90Hq~}H{PV$9akjKbTA%8e~*=x!w1Q+`#OKh{8iwCq4bb0nZ;6oHk{K_N&%OEgo7i;+{|9ie7gfZ%|${GfpC5?HAFMUd*4 zXeej}nKDJ;g$gPUiHUVkGAU4)tv2<49%BsrJ;k4>-q`yD@2by{domo0W7rHHIq;_o z00~{-bf}exPBjji7Z~;0?hGkZiyy99dRR%0nGjKqPA*xx>R3xbcj4Kvt zJ{^DMFA1J!kNQ?PxOys1|Mwa#>uOtG+C!ZMo;m=kkf|Cg^_7sCOq~;)*}b_A+b{6z z>{y+S_VH2lE}AoH-CC*%3*!?aI{&6@rVKkKqm72xH{5jP&pVgc0sG+phP$8V_=2Yr zUaAWwa89M2jO~Emsy|60qxg&XdutCzdQ*E`d!_w*db++&+RoaIy6(%D*elp^`EvYp zmRh4vE?;+0a=sxIq`@KPum(@xfB*o-Apigr{^JG;0N}sV|H}>Ze+(Jh+dA0WncBHH z)Bo?_{~s{?|9jBL(1h05)X9a`#?slv)Xvn2&dT|^$J2j{qmknC&j%`NX(`c2vo%@o zgrv8zh9t|4CZ6QY$yS`-E{QWyv`xbFV*RbDuX0c*00feK8Zn#B`57<@T~OZ z!#)jFu4dGTHD7x!UmMQbRC8j5>C=EV2!8c_Np@bFuGn-4Pakx(_?RjNU-K^agQ~uC zVbSP*i+zeB5{Y7~wMKR-_|N9b3zdA8NQ#ENz8sXISL=O%MF*sJXFE9UmIJ63mF{p@ z(?gJ@C2XMj?V%JUHT?j|fO~4=l1qa`4QXX$s3C2@h7~*s6yH8g5C@o7NhM9NQH!ns zL8a;K*Ui1{ja_boP58?Na#)uvKVZI#U9@`_wIUiLo77XqEnIeh<_ z{9GbzpdQ@(sE+9<)+RbU?$m-KV#INRHNg|xQWE>Z_YzCal|+-Fg{B`DQY}GmnGk7$ z_w#Pxn;ds;v@qCGm%4&>%dz ze@136pbFrl&uh^LOHNH%95*}{HaG3n5R=R?{9#<2_Za65o&0TBZg%z5KA8hjm+CN2 z5OHHZ=FPI<1OzYEBic)?=|(r^t|!hW?iDBi7}Xu$&+Wu*JU`#ZgE>y6i_PK(n+qB< za7ESD~ID;2=|NUIYbAePnS->$5Xrl}aQy?J2jB8eWL{bo3 zuluY!-3ia`J%HbSY`3Y$(23V)m!Yx00I&dzy@^|^!Lcae!cg$a0L>L&95B~4|Z%}S@CasSsHF^_|MS8 z@yvcXyP%WH*bi`JR|9qboA}Pr(SUujqdiL=j9lDbK#;hGNF2kn8L?>S+EuO#;NtQ9 zi^F{>`$b-!oY+o!&&0XIIzO&_9QaQ0?*w%VVZr&=JUmPj^2kBhCYJfJvf2=M5{s*B z1mv+e`K&9#9*3U6M!W;kfPcKrR3<&}*q_NqAUKu&ejC2zPdLDk6dL(dYWnykGLl)) ze%RgVN5KIt!gH`^0!TMB!L|^+4B!ZI2gy`qoX_DkVpqUyo0GBDC>Fs-_v?0KGGDnc zKDaUx_ly}AM!`OV9`Ad|J+_{*rXf`J8y%;2MCfsC0H|&#QJ-7crk6S_ zF_c(X0yT?0W`=oU$P$CbWmvdHSD%M4Xgu*4d|GlCCI$7-FiR#H0b+k81llUj)d#^< zk3~mFVuruf6)dHRfo%*DIV9OPYFu=KXsXxREIGB-G=Cv(a3lC;biYxf0M>&Ym91Kv z__W$^7n14I_E*vdd2^cA60vT)2l@g9mChdDzkILCUvZg&;~s~HZdyxz>&eJNB-i# zY~Wnv-Ak!@EZIbw{D*&MOznUZNDsWKYKfm&+L`0$U`2VcV-t*E7=dPfVrQ-Hxfj{(zXRI~AxG{C0S*ygYM`FAg<+C#)ZR>Zx z?o7481D}oNq4!HRReuLg=Lb#D`CtpDZ7HuQJPE6rKV^B{( z1>$}wl6Q@dky#PTbi!N=JJ&G9E3OR6 z#ZF=|Kk*#m;v#Rp?(K|9{6cdNz$>PBc`@T1f{V{)Z(#mU#se=C8wS`i0F@%&nYb&Y z8jlJcJGAQ@ifjet{L!3hJB-n#@MkhBU`89w4XHEAW#vh(9ZkZIK&zmAxfbP<1zQ}P z;0+j5R%xe|m}hlHPVeWHn?R6^?mK6cEBcp^k7)4Ef{B9<%SA92jb32fY0(f23E(Ve zKcRqJt^~ehiBU-vMn|YJ1+p2b_yYDY#uOMV?}BbZEsHX+(y#vDAyoSqh7Z#mQZ@_iQQ2}F^h=guI?ljjCmt(+=fgJlQ z+=J)D7++Pd#72-?`Vpyp&@t8HlT=(ON;O(L2uS;PARa-b)|$$ing=||DukM{f@kpv z_2Ve^`n=)MgqzSKt+TtK_I0X^lTNXZvZufUUIBm50~)G~kOHUDv;i;8*Ep{XiM>mH z{vrca$pAQ;hdU)8lz`C1lk~;xxzy0D%`(3y>qTHg87HIHjr!y1?w2K?bcU0f}adD4@2QDURknI$y zslZ0dMnhiVoU^qwa-foGuxlMIJ#T5LsSewhkgqWvtO^hhVCN7@fy&^fM8<2Mu~vI1 zH3Zrv?bTS?i?OmTkG!O&A2@ah)eLV*Gc?;r*Yk+39LHY8By9$OOdk4sPfYNRe=u_L z*WbU|G8#C6OUYzmM)@2zbH7qUn`;WHw#M^8bXY+0$ZeI4xfr*DaJF>^*_tVvMzl(N zEL|)MX5K?-%|@8uH$aNbp7_AALKc*C3Fo^7Ua#*nDh+eQVi_7hdgw&(r+F8&= z)je7T$mh9*eUKMe?ManYHQ=>Vn*lawwXh|5Sae-u^yr(LK5fTlEw6!%`}dCLOkJ95 zvR~WVjsExe#(Goo3}mJ-zjf-2H;7&7YhDsEdxQA5xO5QE&gzAfy!Fk#MiyG+yib68 zO==x;?n}SIQn8B_6x~sV0x9cZlw{*d`9^_faD|H|He}imwB5C`B^J}7*F}Y^e=89CWASp(Pufq8Onn#v< zlZC{%FkZ3^T)_NCc;N!;BBelE#aIVLt)ZU;8X}De+KPbgxy`l~2UXHDNNp9L_l+N%jt1C>U>Kv=4ZdmP|1q9?1-m%+6Zl@Q&#-sZawp&f-1sA5<+T}>sF zD5W-;4q4t{8ejxke=@V$42o&_Dy&oI9KSi8+}t+o-KLqm@wu@(UCTcQC)exgltGl@ z4120>(aou!oJ@9Ppn2Qii^ceP+2=e&n*59`DVx=qX_M?x7HixxCK?&DlQAHEj4!C< zPEuvlVCi#g?cdGbn`TmAge>Umtx@t^A-$1}rSP789(zk=5a7MUhK)^&xDOl-r67I$tp+{ zR!0j>8KL$C>USNvAo$5Q{@i!CudA&BU;ee{-t=^Qd@rpVW9acIkhj|f)fK}cZo~}0X^W-%J!figim#~ksM!H{$R0lFc>dfEWufH$T{l(z51hN< z>Id6pi0lYxsb7b(k50w1<$R)KRb083qPPXJ(TegEryZ=K*-69ZpPy~M2ZKlm!5c3# zZrJR+Oi1Mhp;Obl!sdZ;G(-`-*j%Fd@y%ihg)bG=l4;A62TAE8)P@GB&`lUK;!fL} zYRv_3BkP2BP{zx7%q3h}^?(DBtOt$` zs^&~}sj9}Ts&19(3oL6!H?CO^$@NY+YL_8XXh5243Vr$V^sL}fg82*z?c6&gTKFR~goG8tvTbqH9g)pes;ff~{kfW_J7VZ>A6S&{9jWO-(; zl9`3dlvdB<@_jgqji%O%+O?b1^32+WeubgJY11< zU?_LrD@!?XOnUYETKYE#Jo z>ByAvzO)ERy3jg2bylfhoHDrA$(4~r4BDj%uyRHZ1_a&@0Wj=MgpF7hS1na7t}dqg zGO(eG%tS%d7Mx#w)2Bx*Uz0K{z_yL*07A$79m%1&+W11jUHH~nweqUHOUOmi1}2%0 z=b0>oG{LeaT(D6in#;HluW6~+XZD-~q@%LhVc1y1+YufM;=Ci?<69Y z6H=q`pzOcb8UR+3$KawkfSHIXWgkrQct(iH(Fz-CWWp};3VbM+CSQ-d3uC)Ky|aXv zr)5>PrK9AP?&Eq~{`m@Ay9tm$Rh8ZGWztrf+96B;?{Ww*+Rv~d4!Av4FV@t}QZ$QX z`D7B2^TWs@M8M_}Ae`rUY%<{Y-mr&e@=)t;5UU?V4(S$HGHR*v5w*>@i-9ZmoeRUoF{^P3o2W`jKy>1_Ey((~V!h3Z8wOS>lW2+0$YZXj z3q<9|ZQUUglw`xEQQZqeb>*1C=cqmQ$39-`rDWZ&0~BQub7|``gvG;4Li&Q1X5=o7 zyuf-ZuO6tbs9~i@S9_@xTpL_Mjrq2 z&5@uOP?e!){DZ(U0Om$oDrb(i$8nVH$I8PUWMx!Di>016PK?f!ZffCpDh^Dc>(Efl zW+;zKq*{c8US~|p-Yg23jFW}w^i{`><;Z;qS3(bX*DU6FIA+Zxqjn`ef|-CFeGN$SNjx~Z}fiF-1N z@~UZ1>!-(*6&;MjVmQ}zZ8UVk@rOY>|4Cg19WnlMojw zy??Y>e9-w}(rO}wYeagn1{<4KkiSQWn<$9f+#0^?3i3ggcxg$xLzhLDz2{?bCR9~- zx}R8GUJ1esCS6DI3SSfOd?(cwehWSxliUJ?cs;itW{+*suIZ zE}(p-JLprqBsP8Ai2asrhnbx+FEKRc$C4TSR%b8`IY`eV3JRF1OATO9oqY)qbHyAT zItvR?ojS9YFRmFA>cB51c9xv5BMQ^KVm|ATe_A4uDP!va z!#}gca>2X>JhI)Q{Aq#N$4K+M8$WJc4LH)b2s{fFA0vOlF)|8_J;rL%DCtJhF9IQQ z&2?A;lC@_?Rx$+4%VcZ7f!ojWP>CIPgg0WC8?GG#FEQIq4lP(XE&48HcmL-ZJmTJo z31+)qQj@Rj4uk4Cnf}Z7Qn`E@VUK-kb5GBn;pSl}S$$$YUQL>rPo)3XHnpf&-(XQ0 z-CDfi5wK=&==6e==DGH;o9Q^cW@1=WEWc)FGWlK{qxSmUl@}W5FUu^5dJK7Rk+h7A zpgzDPa|q-sps}qdoS{pxu!ti=!E-`S0yjO5y6?c@ZiIx|F=wT#0?<8u#R5m61(oJv zF-ICqWYMvt6L26yVGvvWYiAqCwA;vl@iVcTDmbv$wP>U@R{@qwg$O!VM;Ci2cnJ5I z$e^UPN>fIB_LUG9!$7T6eU3q|j1yc^4*{tlxC+yNOE9 z52j-bNPN3rYa~!UJj-*QSuBW=w%ax~sJ~MxDSP(yH5?v)Gtm9UCiEHr!wrSZtvSbb z>5816XXCfGr|aj9pKXOH55z z;$+Gt0eB-=={xV=mXESgKNSmRlDv$>?vHG=kbrHmsLx$F#qG?ig|c>b97S#P=f6(m z6dDZ@hCJ&p5oJ+877!UZRZ&@*N34FD50n>CLvZpnmrGcMup$_Spvfu$7WkE>PdI+8 zaBi7}AaQoG#Mj-1ZwIJN+%U-lcUSh5M(nIsFK5JpY9&XzB9@kvZINXp{Dt~dYOPu+ zTtAMk*g%a!bYfYaW1zVd1^MLelp|T&2@0upABDID&Dp`C4*rq(*-@fKm2#a)7STb# z%yOzN@mjKYAagjcK|?4bA;`V*yktD&gJ_M?+)E}&sN5zOwA=DY?o`W<{QpPFxGPFm#rbxKr1pPq0jwCsbG)?;kR?u6}@v?>2z@}@XcXfbebNF5J{21 zeGA@+;1;;~w2H+^4d9Beu+1d{E#jQU)eE+!-Fblv)TJWn`v(QOTkb!dPo|+$Xe%O% zV!i<`S(wuu$YuRgtw9{CP(q`Oukaf#{RtI_oZMClR0x+e%+wPL$2OaR zGHb;3y%-#JkMtNsDC9dW_}uLd_uHx%Ce98fZ9K|uGoPa04~v_eJ0u}(4R9s-dwL?+ z?GO6w&yx!$7;bg2v0I-Dj4>Z{{Q z6yy}rA!TpPL1$-I=T^#>gGioa(gv|pl_5$4OU5K7vV1DIx}BtgEZkIY|1rS6_n8x! z9R01YLL)W=LGQ?OPmV>exNyB_Mt1K9@w1Z;fHM#QB?Bep@5Dx*j2ylid3rZkOk&z4 zbVfsbiU!udfyvL)qk-Ksjl0P%gbV^5%M)%Q(ZQPY#z3BSxF+hPB?L<=F;=Vs_`@MX zOBi8}SbjdR`O=`&-ru<{jM~x3bD{3iiy`zaNm;C4kG}~?S&5|ZryhFZ$VeyIV-eb; z3uA{hRe9~BTu<*$Q%Q9UlE-6SS%EA8yodcLk3uRYcEiOg>hbRhgzxX>=pqRR%(yZ@39BsJloj z#jLTGQ}(L7hoCLnJRG|+7c8jE=!CnxF=pqw5Ejs3jkCMlfqr_W7;8QjOgckTgdgP; zz?-{+XKf@vo-PbJtq`euA*P!vt~ctWRk=o+3;UbtMk;QrzL}z~v7p}vq%A+aF0E-_ zY{i9=C+UFdxfyDbP@$(-b)&)zcbI(*f}h+#94q*#$($uVxo%pgH&1qBMJ}3A%6Xlv zIPGdX5H|?Wfjs}%tcwFI02Mi|ymX^`&&m#9Sb2Ut=W3$Lyvib8_>gjkr-XmW6#0 z^_kYFNp0=y3>XkP?=OalNr#F4mbXu6PX^s7?FIhS>{JU-va4;UW&*!dBdM4PL<97c zgQQ@-010ILD*{RgWR0r#Qi)V${6iV&es6D5hGZKvw~C6EGMj3_RAI9)6Dro$IztR- z|G9aU`5Ohp<>#I9^CIQ%8TUg14#vN^9-}F2m@l>=6lD93aGCW>XAQniudUVy9{xfr z4+Z$$GN->5A2?xykUtqYaWlgNPzEnCw@(alAy%g~-itvi?ppGGIkixCId9 zmKW*Uc+9Z%@>PZOGH2}OjjCOd0naQdt1`Xkrh)1Pqt7%?q_KGZi(JNTc>x3_v?`KU zxY{SZO0mAl?_jwGz!EBO6##+CTn3~}gGz;qDB{l3&pMgioeL-UJn+_5;>>;5+;bE*rbBRAy+)nqFQBfus4(#U;1!R-bLmW^qeF zm7rMt_9OEK4_?t0SKiWS;U+k=5qxsGvVw_yLh)f`o7sc zF>|KJP9}r57{wPdTa$P!WVPJrH*+J$)&01=VND7>ciUfS=)ZajH1dMI3zc<*K6;+tzk=4rRsk zzIQ#zlJ)tjf&DfL(}j7C@{N8kp5tUBy@(>T=rWdbX0NCcLG?}1bu zYPvz2c$k}om+s4k6C+i}v}tPz>B?L|3$>DC0=Y91kxo<=S$393qhTZh(k^lkiZ)rf z(;kwEou^c^=%&5u+}%6O*D_$B(iw7Djrb(fLH;B?(=S^g%H1 z&g%(x2&DC%gqDFW@PT(MTY}^3dq59##jnMtW1S5o(ge{g6Z@5te}SLDTnqtNLGJ$m zF~S~*&ehEl#qO66z5$K2hw;*Hh9@7YquEu9G!$e@ z!Ao74C@w=T5CeMRstsxY3)~8KjWv`{BtT*xiBhDQC-fX4-kl=;?~yFI@7RZ3zV}a% zmICM`@2L9=g4r&ej~Lu&!rTi89=+{O&>hJt?g0b=ycNh`@8)~DpRtXls@iga4jLk1 zjLzM^zb33H8{4%?@F0=uvNP<4)~qS@QdpBdRB&bDre+zyx)rwxn>G^`Yzc11D$(R| z>e#0WWt&2ohP2&0*$Tts!UnFIgHgX+P69DJxIgK)Ni9V?=in{QK**8Y8Y^i@1&vZF z;?^1CsHrVJoT z^~&XsPPJjK4QnR)DSB$oJ^L$uYfq=U$JX`t*XHQ(FzHTPKVY*)B|!C^{1-4UrhGqk zp~5hyr%`JwhPCsj5FuN2V`{gh=$ZqVY0@sa1}rQf410|I_+?yAPKH&3%|E`i(;%$} zh98VaKuh~4Ga{8vs`lK@u~=YRml{JIcbF$}zSZWzR`9HN9y@SqLzXYIH-aPc@B#HK z;6jX3dyEHoS~t|W&jC|ivKod!i4%Rw)M!jI0fsVNv=_7nP;|(*@oOi3@8|hB{LXLE zY{;UN=@9x89z|1!Y$G-r`p*&hm)C2%ITOQ5 zll=sA9qUFsiyju3Wu4LemYRF4bltxI?GW-0`}ITjw#lVsK^Jkp?dmC4+7>a;J^DGf z)U7>WCY#Pk)F9aCw^F$(K{Ce#Ni1d(3R!rH7 z{TgE?Y(`er6x8>X(UfrYSvUS{b|MQJ4BqnnENY8U$}QK3(P(FKnL9}4_>4~(0CkcR z%{cExFVmqPCS4O>LM0T|kPz~pQ~zesf>kV{nl3ZaA*$QAGHH(D4v|L&H)Cr54+894isqN9SH9hG##@Kpj2 zVCD7wJYe5Lj&8VUS$0;{&?@hCpU1;%$tv3Px3#m5W>E`1x=?Lxq0h>+d>YBhPHn>p zP`?bE&<}0gCmGsCi+bq7%P=6Q;d?bi_F}Q}PD(4iIGq?>)v7fiVBqK-o-dg+!7dYe zg~RvtlBPg4)*3R(DwPMpkpU`@s9g*4D);l8Rvyn{T;jL6vcd2SFurZ8UPAv|e=TWj;xmHB?>!1|<>_?_q)oT?&pTdq;<{o!JJ zjt@X8JhaE%*mQyn5F*h0kB&(jY)}7g4GqsvRs(5(ft@Cn;tLwmo>Xm+;fIT{D}uOO z&4lcaXT)QRW*LZ247I2e@3c(uh0NoM1DZyj4^L)!su3ma`V{up11h;9>rX1UhCsIB zM6OOdiX|IP4_igVbZcO(8#?GUMdVdGDTi3kiYR9`b$1}?*E}qM{u4KhKhi&{E zmtJ6-_1mNRw?_8sT%1>~y=eDbe67_B2Zwd+g&j{{zhAhkpY=iJd)#`TRI#ocZkH+{x!fR5yWcIg7Q{D@i(M;sbT&GEBoYDa%Dca}?3od7B+w+ng) z?Yyr=8#UC%Um$heWh1xTjr`oVQz#P8{mh}ElhXo(1YeS`})l%`FLJ5|mg9 zU6e_3sVX(;@f_ITMRBYGwst@Tg}-M;W&~n>wCl9;-dct2+b>(`vJxIg=sTy7)iuU^GfPfyi^*(m^cKsI(@lNT%% zB#Ynl@@4&T5Ps4u1Js&kZG~;u&bs9<@oEG@(f|M^XrzA+A#PqX`Z=ehhPv@W@@t5h zOign9xAgr1EALcCv1J))HkBBKlxNG8V9}Owbww-NZ5~#=1hN~(0i;T{Ck$vQ6mFNC zpqe!~t@xwt&f&KXC4{DAuw6VSJ4B!L1w5lPideQ<$8^1f3|4q;I1(?#0Q#PwaDC6w zy39dV1iEoR_D^q;96FQI(yt)ZJNkjD;X}9hmU8%(la*%$stC6Gw)J`B-JerU$V~kW zdDE;zP`e-lT}W2>Rf^^5m?D%VF)W8995oPoOz0(1pUGK7CFj5$P0qpW^V47$8EX)) z>boqaoAvY-0r6&8CoI^d1;gun>E4fcd%W9)1ZBRqYkQKuVJHs!kX0;Ixmkx}D&c%5 zN}hS6Ovw0G6YgA-9p+hQp#z@RCJo)J!9p)8bCr3}G-nrEo2-nIf7Z@{i{ooYASH;Y z*vk!W&k2<;7^K>npsGCzKr&DpWgi9I$&#q1$M|XImUCO1pH?}*urD}wmsgIk_WOVw zr2tO8g^7~v1jT$#*dB7qkOxf{JZNuxjNmMB+wxOkVkb~XscsGuz%GBUnRm~9(>2`i2Zep9*!ZC9Jt6Yz+*jPgPLK6GrEZZAZ76B|AoY=jp|K(lTtoTdvGkUpRJhJ`Z#<?3xVR7;QdFZJWNTjpsCG3&a3T6Oyn|YID{G zj|nG{OsLX6yFc+L*c~a2lIUefjX6r<`SQlc&tE$LLn&`LNh39ziiakjFjGG)dbd+s zf*Y3f`%+1$Iy?EOgwY|BR82Q(1>1dv#lhlY0IpQ|1Kq{7xz|%TquvIDF78A_JW?MHEgS&V^o5 z9V#iW;KfMfM!aw2IE6PgD!t=W&1mqv$$nf$lizjzMbWT*ie_I1DYSO{j+l`lYh94K zN*&oWECn4np}7J2y$Rn!nqtk-DSnk`Kk~S0iz5CwiKyP=)Fc4K5gI0v#prtemG2K< zi_F+P{cFJgO2eH9wzwYkXl33($ex!a^Dq6E@zHKePyDOeA15OTwRfK)2wvF6Y z{_H?MLHvz4(`Uf@>!--Ojg#X>%EPIwlz`PnIK8`oVNN zVCU-RK4&&hz$N6`m0#{(aWAkl#!oU%TktHCmk~%7&8uL^Wp54*Nk8|)A`FJz<`tHy zj1=mvTq6D&GQ7!Dff~5qU!)gss3^L0`rxgcyS&~P>^V?QPNzl&KN@34I+VBLNGiua zzcR-{BR|fvkPqyF69{%pm1jY+Y;U8sF4Z3OlGi6oQH4R4+Puw9zTA|eR zS#@0m9hHu3=J~(%J5mF$j+O7S|Rpa z291ZCSm<>A5T%o~`n4qNsZ^X}4Cc8u=V)H1x=ca%*6LHi1KgB%{$cUHhf-w4FJ7iB zTBCU3tH=avMgak%pZPMt1Q&lXv`=*zZ2p(MQ32!&6~S1y;ajXPX&fEo+B?2;VG8pY zQ)W^nh5ADsm-c~0h}r&0V$0pvK=NLRr zlaBGQxSf0_>PFyfCX~!SoFX5_ERcecbW?lbp|C_6(C`Sq0=9Kvt+U$F4^LFahb(Rb zW7FZ%n-Pw)#4@cmN{3}-H0ao-=}{U0YFRkN0a?4|)RyrCga#J*k3GU``6+j5d+=A?L%I1XC08MIaEgO+siHNx)JrMli+kv;aXYQ-gM?#Tw>p9u*iWR_Oe zA^q#eGp+IhH>qvTn#Cc|G4zXhC1(-tK_=WWwA3LZD`vNz%hSbvvg4obo}p28-Gr*30ivU`iilKoYtK+^DNN$SxF4xp91G%_Sanc=*!JTy%~*XmYA0b`449D1>Y%bQd1c~E`BiJP z4%iCCi+Qv~rhM&7!Fc8p=-L45dj<_I{lN#-SXFk%gB7SPqLLD)A4m9K_0-I%+kfWZ zh$xKw{oT>1-`Qc&g2jK~#r&Dm-sw$J)pg!SwMLM*0An$Y+^-bOg)*6t-w$P`qzqYy zOkH3UL^R0Y^QK=h&R<2#$Ady-VGH$z2Ec^?4t538sFv#GGb9wYurw0_;C-%=%z) ze-lZK41xA{0om8$E_<`3q;`rO$dz3hYQU^;ob&{h7=t0STA~7=ZX6t4G3f#Sq~>N) zKbM&6^#Zq~*eFc>)Nmu2>OFi96DkqE-pa@onWzL4cbJqqc^v(l?0C@%4R%wjQ8=(| z7|*s6D166rVc}ChMJl1%!6NkkB}5ps6|F$K4hgxE?6lSCw5dg}XM%;J)+oYeu9?Qe z=gk<@PoYuXfqih=$of$Cp0EI;UgaGa8N3!2dZvOPQMv4oJ0FWnf)NuwM~6T1mX3&7 zORINCsmU;mp*_f|Skb1%Beu?9b{NGRFZ`RB^1FMt2$==YmXtBNKvYq~nA)Zfu5caF ze>>94DgtH38xkUa%!~#hqcJmOXc>V7ow73{)2um{LUR`Jo9#c=P)Xji>XkVNkfuB> z3!XSq{4dH?cwDuTe3GU#movvUMB1U{GFoDHoi(;3SO$T8L_4BW2J%E2lTwVIAJFA> z>F&uP^uUF^BxrGC#Z9ZFI*=iwu*B>9QL@CR9e~+}umQ+euh3ub8s6Mp_Da{p9+oYE z)aqXA)k^Ow&u+?G>qK+!XPTb(M<7{vVO5#7B(g(4jbuXXeItkn`MI|CpJ@MLh2cv< z1U`TbvHEbr`~d}y3jbod6UlO}W>&y1Vxajo>x2pF3z9j#>sEk1qPiYF%oqVu94A&g z=XVZNH+K3&>FD)@JVn6imvN)Qnffm%5hm+!ZB{YIrhevPq3#y4a`}b_F!sRo`~Y_Q zQt!ij`F2^f@nk*#Ob}&o$@amd1GaR21l&AHxMJ&ZER$>c4sgRHz&6toD`wgiP7qrc zELrS;^0JtSOzsNZG@;PM5bNr?!GIU~{UD7g&sWt-;@h+{A zeTh>8UceFDOg00beqf-Iee5K(LN#Nq!pn6}>D0f=3vf5ZsZJX{n6Xehdwr(VBBxlS z<{PObO99ttKt9Kyq`Lpv!&Pt4Pzw|ytP76PAcD#ucgS@=Y^4dBG!eyx(4kTRBym^> z$3rGg1uitXs|B1Sbt%OY*UHp$;Nk_^EGfpvcilU6shk@~ph&#<<)Qvtm{1_aQB z1%TO6Jx231$lq$c-Ff>^NC#~@>tI-)5!#Hca7=Fqx_NE}cS!R2_+OKcQq$HXI%niJ zypxY4ODFrQQxARvt0}#=xrYUy)({%HdR}J1OUtNm+^G)eZU@)_DzG9L{Yo&hFx9kz zOZ3XMRfe<@nblgs`1ny@bFbWLo^T^bi*k|ItB4BOlPD}LahnepAN(=(=p^(DwSbe0 zzL>Ne-=&(@wf4Z$QC6a)M?_Wp_HLpjD6}v7CC`sidhWm9cMp2qwr(@O^acg8v~w6U zCd}2-=X+~T^pn@_B~r~k5>I(v;fAxzGfxak5hm)*6w-=;w9VXawAQr9E~`a9-4}{6 zJk(7^MDEn#w2au;LFOGg(<-3G60a75Yy~eWm8tBG;3k_tZ$bcKhh*E=`Iu>3f~FIOQ(;+2Hv`H*dvmHRldPiq}$8FV!Z4<8+z` zsR{Ntbh;#p-cKhhNre{)Hyk=O{Jw5gAmzG|J%QN(!nYG!CxI6&)7A%rXMk)x>1PY| zwvT`)x#+EeMN}n8-ABlTi$2=(o%Oq%7<)-6mYUIz|MCSU{Y>j7MU%-e#|i?DyA3uh zn^8Q7pUcXdA*~raouYuw(ai6!_s`Xyi1u(|_wq+ZD(ft5?n~MGcm3CH!=tk7f?@{I#l14x89+($X&SzZu_~*m0l1$j%+X z2m5V`|9QSACih#BJcH&$F&eAWDwN-o5=!rycQ%F%m3JbMI%g_|nSBr~c`0*RX`Z`^ z@oH&9b9vRnzXs*Wkd+u)j}M#l#o{H|8Qc}lwq;xYRT5!TtF%ULf_0L8taj=YD{bu9 z&O#WPxiMkLOX<)V-1^dkiB5lh=FMBE@5$E!3xSnnw(D*xBTMGypm0LpD8fmq`x3Ed ztBkUodbG&Ff?5o)%P6iy3tg&^gphoN*ZwQh?HKaIX8}&3z6FzL=mB@gePpS+ifz-F zKY|bCE=SB(Pf~^~9o@d47`&6gbH}F@Rt0J83@x&rwf#;Y-s@Rr9{o;i+?9~}?d{ZP zY{Z2H|EJnAe=n{EBtN2d_;1kq5r!+Zuo7`buF%Rv4FSa>2InL~2jhc4LP0(Lqn0m@~t6VA$4PA0%n%uM9Gq5z3Ja@lFDy#*PT^ z{T~2XK&HPmNjfQ9?%A9GP~R-fD`7%--4g{~zuG|O4lV-%-7la3)vnRFW9mDe3vo<4 z`34^3N;Oq!zh`xj|B~gW%w7TG%R9?M%|Y3pNlz=O-hIR3Sd5Vjn#n5gg7sA_O|dft zeQ#*dG7b+oaE+&ARF$FXWnW^X)Yck3q zXB-x7wChbppI6aTRJwUwfd!nvQl6ODA$3_)O+|z7@M`2RE%PvC(lMyZMaGSF=y+E| z6oW@;4WC!F>&9e~7;)hNfLUHBDgC^r%PluJ{ASFOp67=zhlioE%5c@RJE8M)Srm^3 zhd{!UF<5p-Fu7hlH%lG8F%!BbWO87%*4CRMMY232W3$FyUR>`pZ*0Rp9F2A<)h;_= z?6A>f9o%Phv_sv72S&ue<_hD*q@L`DK6DdpRhu_A+J5EVf+H zBFimPu+&n_ls$Ys9K5O5zBK$xik=P!M`wrQujgH5N=E*3!4OmyEVLL+#IGz>Y@nLS zURjROypY@lK2x)ESX453{tPZYQQYjP#J7c2(g{$HO>!!A!Dv=FTIG?ELd=BrKUm_H z^u0~pwf4yMt#8A46xcoYB$jRlRg$2DSY~_Z-e`S+c_d*KnW^_gs@!TVI*U<)pcJPM zgC7T1H~PJV?b&IYqac2lL^td4efDrqNd#ne8@!C|i~Pv z%57dz7&IRcT5-a1FuqzwE5K}<%Q3X7L~ufx;iCxl;svE(S=CmOa-6x!R09#lwqHU4 z#?k8%fb&3I?)(x2IcuyvL{;hrib-P-Z@ws+vJ5E=AGCAZkJFng6CT_x#_5>jey zVsr;y?{)q}jd@iM3Y2t<%h4R@MhW_6x~efElCUD@?}Lm`X*6#=;KkNiS%=l}(j$vX z5m2fXx9c#+Mh!1fsZ1_(Llla}(nZG*^>v@%mqI*c#0v#MM`WGJ!ky1|@CDv#_AQIb zu0%|)#zp$1_xreaLIm2cDlzGgCcTqa{ga;XX-wF)dL~PDT{39)H@``(%JCplpJWMg z%1HX3p@>-1OG%Pd_G-{aZ<<$>t(Ym4V^cGQ@;x;w0~VVB4GHB?)nPCONSYFfB!lUFgaIw%7rScDR6vKXtr-rx|t6?f-Qh{T0sV zPCHu8wm;s$m~8Xih%GigluLcrzC<}R3YPEb#?JO4?sI}4%2GV8GY51TY&$nMTj63F z83Fx%cHF(W>BDE96xEfBJa2=g7jxBplJ#e(g!gT!Nkf%3A0Z!rtAf zjoJ1Nuy)p-gSf8-f@>R9*r2VwCz5ZeE5E^?kf|tMb z4_`k>qu=G4WcJbIhhp%l1yuq3ha7MohcYSfX0hSf+Qog-8WWOTLpqo??0zo|bffHz zAN^(co+WAvFts2mdM)d>z&)b(lx{G)7pCXTXM4oqB2Juzhj$#aI{WN09JhTP#IZ9A z_@aatzk2T|g8=(1vS5ni2rR*&-(&?vO3aG|-jD#b@jfO|)TJxi*+&vO$yFF*dg2gK zb>=U_VD96I5OygHoue1xOu3OKT&S0m8DWSkc3SkA-2&jryqUrTqN*O-3vwhry#E$Y zXio2_Z`N~`@|50C_@hp9o}g9?QJcmG==IN$t~V8=SpUo$?l=+!+(i}79e7r0PbiI- zpp^dMeLh@L{Mf~`iZCpT``lwOY#mMaid)n`m@WhTSYsT&-4p@X{ zW4qCQ-0UK|h;u~gd^BbCAK$5G-KXI;u4sQfzBL9h( zdCb9>Vr_PS5MDH2T`&0W*&Q9(%>xP)C^p_Dq5z@a8W?zUm$BQ~Fy|%>#f0Xjfqoqq zv4eVCwxImp=B9F***nh{Ja>6^74s*fr@@o<1x=VkHt#-<&JGWIqfuw4Wt|Kr@ay%Y zcick*uk&O2>gBNerq}tYWu2Wcm+0Z(%^O$_IzQv9(b?(gU^wm_u^qB8=uY@yH0~bv z1hffgp1oo32w;kHc}7zbmsTd?)dfOcrf_o>{Pr4G{^lny}{YI^JF*e zFI!JKPoAb29YQ@)0^W4{C!HtXAx7BVWDIqBWB$GK;q04a{8MB=AB4FK}+sDA>47bXsz@8ZqX;;jq%y=WP+)TJKqC3Z+hd`gCo|-d9vjyEx{C^5edQC4mr4vyHkA$N%|j`Z^gE3`F+Gb~T?KvsH=J8do%^9>Ml zZ*M`9Z=O3_e_b~5FkA73-LS@--P~ZvNF0D7BB8uJzlbkBIy;w}bQq3jEf%+Nq&Lld zFP0*_XVFIty;Pf_-r1PQ3Kb!lwA#bm#{A=+x;8HyN-9Rj@ja<)sAM2CJW)_q$}QX; zf64^QhYQe$!-V-z2zrY((o}|;4F}4qf(dU2^8l4>YY`<@3_m=|*lU}mj8^)67>BH= z;7s6ka&L9)aPi)mhrUdVY!}G_S<;K5cVS@p(X|sU?DB~$D+zR<^3o3%(AC&bmC3K1_WqGtEG8FR=-USAY5&`K@5J6Ryh*HpGf}Z#c$e+$q9hAUmky=f%E)l}{R4%d z+c}YI^NuCqbpY7fW@%^(3L)FDgwjZ=qBYKjk(mc_oR+~fSO%c)+v$2^rwtlc5_`4a zY49z)M1wJxU9`GD>EPoH40Yf$Vp`Enu(0zhHWYlfh(3Tq5M5t83*XKzt+Id^Y4Mp! z<@7sKtL!2T0LsOyo118fC{dg(iacAD;u%5A1Dp!ww5GhY&C=jf6ZA}yn@irSAudI# zTH(cNH&M2Do7&2(O>4BGDGm<^+9VlG;Ee^>ZpI){%NjEjzju>Vs7_;4aP4Mv<*ck7 zQF84jbmi+m(1fbrJ!o^;g~|jxTc$Sfyb@}jE(Y0Gzm1|r)YMdA;o8k!F=0(;9O>2D_U@EXSSf(SC!DS_C1J-p56JWhWeZYC0#0WiKtbP+_UB=jqxoGXC zO6apLVNAM{d7|datj4f{a;gamEPm`E!5@+{}6)@?3Htr+yiQbS)P4i(eAIvD30@YJ01dBcSo!T&d>^o!o&%~qqRLJE zxGfvGhDM`Smd91%&``9j9sPK&bOy3(({P^X8*Gh|l}e<>zf)YHmE?h5&bPg20S!QR zzkoo80!EHX9;1!hvh1_*%dMYaKJ18|d+iU)FyVI#a)$R%>c#wKM>qXp=2V4Q@G{o? znkGU(*5j0L@db?1U+5HY>TpLoF*M$&&FGntymtrWKxTWvdE8OPad!uIU>Ks>Ixd!Q z&N~KGxrSvm#`?_!oa14hJWHyn)~B0bd;*4RK@K<`4Ml^z^tlhBx#VUx4U@pYSjJ821lx zgNZ-jt5N?5U*I47d3Mwvz)$=GKMy+g0siTZpbY-Yf4m&vzK3|imq&g0eblGN0X|ao z{wsLwzrx4k!Qn6eIvd~?QTmJ@21kFuEBF_GK!2&X2WR6kI_TM7)DpWVzjmRk>@U4I zWj=iVfUm&P?*Rn%7hm+TIs6xY46vj4Fa0>i=VSKxYB)GMrQh^KFZoske}GrGjoh*E zU;g8`KN_9>?AO@d$s?1HO6*Si?WKmvq$c9uI&>>@R-o5AoNK z9)HEhU-1#)5jboS+v)))^xn|J0q*_KANa|x*+mu*PxSJYBv<;(KAa7E^b-E!3mRBH zs4oWtq9^-HFNSaM=MWp_dt3BJ{A3ODCwTdKw`0HF#fK;G@B|;8!oyR1_zoVv!-wzT z;d^}e0Umz92UzXl5&q>r5DE4dU+~d-Eyn6Kex)ztH$W%+7q=2SHgaR1quCdD_TK=x z;UC&;Yc=asW8NKls@D;}z~_vA^)*xO;#jPJi%c z4_-rQ_7`6OGRJ*-IQa!1PkzC{f769-z(2TE*&Y6Z&%w)r%fZ1vdx!9f{lyp151JN((=jKs zcw#S!i3Wm!24`cUA^Qt2pga~l?LxEgh=1@WGTA9{*y(Waib*Z;1TX*9vHt~shERKm z)p6f-h~S222Ou5rU);&;*jRYfeFNq2U%68XKShs5&=10qKhUdV>LmM%FTnDHe$pTO zIXD~QhA8`sFHXA%0RE-@(_#M?{7Qe>i^0h&dI5jw#UIC1;13e1qcaej@DDwL^cenu zKj{HSeS|a}5jjV{BA8zh29Fb1`{q}N&ZAHe;+eBFP`uv z&RTebfAA-86!FuT&8{(@Ug*n&UwxVzDMr~&`rBdjN|4$vR?`5Q`h_{UaPyu_IaolJYz{uKj%$K6+?mVI_WJ?@|b z$#vp@JuK;u7tQ%!+9syw;Mxt?(-kWeUeDNH)Y$3iUGQlZEa-6_F5c0@b&#+&@WjP6 zJ;l*#>9O|kE)Z7k12vsPIE;UdLLXLegEcOX8(7bu^VnWPN6($hR2|^Qc*dap`et`z zrsN^sVxL!zd4LNRp%SDRp$laccq_0iKfznN=VUTLXsjvm?G#iPFp4IYNGMLwa2A}r znj8*JMq~1uOi*a`hLg#w!Qj<|e}=htHtdi8n4AuAr?@9mU8wlB)#|yP!3hh_r{YB;GF?X3#S$f7p1Co~I;7q3UPwn( zD6iQ-i8~TKb~%vDdGY`<%E`HIsjaKzdaiZ{f44`@G#DkH=7#xC)9i+UJ&I1Er0anN z9}kwjc^t@kzb(=E>JzS60oi@on~*A?@iwtGs;0%VQAe#^v$ozD5-FD@vbEF6M60XwAk!=;N8>-V*_$cgT?O7ddK8y*X>*+YZK$XP z3qMA_Bq!e<9)qxt@$Oyk%0c!FmM8*Z;wo0d3S$bzd$jk6?Gx5(C(VWmEp(`zkqY&C zg^jX8mXlcX0I|TUfgW`pwI~)3BvUy31jN0tai_9lk@xVz2JI$Xs<@O;kWF>@J2T^Q zQ$rIh#k4lCfQcR(+vm?-TyD3MAWqoDmoKBG8~T2*Na-EpIUkkaY0oOB#M-*RdLkjk zAl+>)N2ppAkhM~EU`;tC7XPN1I%}@~8A)2K0hkKjM@pLE)s;~>-C*4jU0V~7fO6V^ zEP}5HBK{go#Xhber8=OBwp!O-pjGVv zArvA=3rE3~{gacy;o0D9#FbstApSa>NAYSI{AHJoZi#wDHxJ9rCJ%+9 zj4hxn2-|PZwohBzIw`$J+`;Xwo`3#M?3R5UJ4a0=ASIBK5;b@ zxt?+YExkkAIrsQEFOd+~Cqd|!n-ct(X`xo&W5kDf&G@``Cl(DXWiz?%M*&-isVf$h zQZI?h5c=2d@mX&&>`eq9ky|TM?#hV|oH=&G|JN#lvJ)&TldbA9f(v(Ahk+0OT!l+O z%H{Q~KM8V2C}M6eHdHq3;WSOCL4dZ)bU)-Tv&6Qg^y1TMb_L4pO(e; z{c-2gqcAA~flqt3mIi7gn{)e%bvgH;^%}QWnB_UZFg>+fNXc8p|N3;y(pPUK_4Qjx z>5Nz#^_?#AA)8BJOJW{ZT1P!f^9tZxV1Y-lu80q=ywY{UlLVKybYacHPD%EM%6J$S zcqPXwo41Yq4)DnBRXlGx`xh*Q)IVC*<>p1R`OS8L1dA4)V=@A=ccy5w6aHZD1)Ouw=9>9cM3!7p)mVxAeS03KB%?ps425uI$ zHLP5!x`wH15OU@At~#0SY4kFwT-WkdO5b1NmVo|xmau93?{5whv6vlThkwcnD zL9zMAFw_=LX-$^%;t^&n2(HPo%nnOi?mTiWz+Agh+lWS?py&F~Q7~oe2G8;cK%4SH z3*+bP@JLlEEg}@`eEkoB`z}l>8j*#nnvw;J8!U$a_4MmrISo1eM~vLDq01mcsH^^`R{sVYUqp2}pmdOLuF?Y(o$aetcaFk=4no|r#v zS>IJ-PNkapITbCh$&~zjjInVSt0y~891M6n7Qb8!mOFaMe|Z=^h|!n$YbT(R;@8y9 z&)K7pG5{Wrhn-!Fr#tR!Ve+Wn*?8DJ?(F0%4EwKM z{_amF69K|3ANI5F31TPvmVlVya};WVXV~Q6Baj^UBx3X`z97tAP`))9XjI8STXk6K zW%`?^ej7*+tz(j-f&z$jhx|$;y>pmi89rcqp`Z(#((h5~*Z@_*8KTPr8sgFP4e|dIVCi4^}0>6u`{18m>->HK?e&nr82|U5_rv&&%*2>h& z14h+!^e(&^1~YPSK0AN=;_~r}+i%a`?pK6L%M%hRM8? z62)C&8!MG`W+0m;`Tzz)1}`rUBz6UOA1CEAy_j}ijyC`s2H7!qd#^zNde#J0$sVCX z%rbi^+qekNF!eNyk690D!(_B6hj|jLlBH9D>qZeO{76v#JMVr$vw#>#&qLf~GEw|( zCCMM(cYxPzR)=Y9wvrj*!~v571D)2N;0nH9K38a1#=*xVKgBg1OM0;WRDa+e00LD# zfFh=@vn^u(SO|>mw^vDW)4ABb*ls`GE}j~^IYXZv6Bg#)WS!W>n2G6%YH)U5NpV{+ z@1&qEo_D>EVNyH^s;5<*$@z_W?ycXn4!6z(H8m~54AN8PxJ#m?R0HLx+`vSWLo(v%Cc>^VWZVdllS-cD20y z6yCNUpKnbr8{MVj-o6gpXLT%kZjuwk&`Q}>@^^_-Ku$V?mF900-i`OjpykMB@XW~X)7U8ke)NF_CXBQtf zG5h*A-&%gSd=A4%27`UEcoyF{3-R)W+(UV`jqhLBRcPggp^SSZJ$t+v^Y_!EmnF@D zhe&fZ?-pqPtO+}dC zOb-*JtSIL*9&1}>DmAW9s5ZRKO+X!i*;q06<-AwZyqv>M-@JZGiB?WTqOp;z2yAJ^>z*AN zLEu(R76f+O0KyNZ&T5{d#aSk%ZUQpL1rgk^p}q*XHf|9K(v%-Em+>5#P=}f^CMf-? zqEF9;$M=pp1+2ax+!Sk@&SN-kv`RYs@`1k>pU%MgUlymTLwL~Wy&UNa2vF34J}}Dx z@QR65YIMZ7nwCkwoNO(MF4UW<7gh*$>ctc08MZKz5b?Ng2qDg<8nJ`2*!mO21na9r z2^#q9Uh#o|-$Mlk0w_~NAX1Psc0bM2W*=1OAj}ncF^v9Uv@s#_FOXY825cT?_kc+Xzd|fn) zG%EW};&dA4Z}(bYRPSM;nIFDu;cZAeTR(4JY+r6Ze_TSoBdBc-157UrX4lJ=;32L+ zl#yxGM0d}3FN-72*C&>%UL;>SLPieGQ5E~rPjYi4L$OlpbJeCz?U8S-l1&Bnudw};+92|E~eld>4der4wqC0mM z@ASjIgd-|s7qU|)~)l^tJUl(?lvmi20ZVhdmE-^g&JN|B~fAJY}I0MAhvTHZPqtf7a!Q{HQJ~|m(+~HpKGn4DM=~wn=!>ehW4j;m&Niu z)IJG5%)>$Xk~QA<6-~cY~15H zvI$X^4I8>j59HIthbhL0qy?^)!IUMvb{63@h*?(bn+P;DmNGkDdPLQ9_#a z08!vqPapugF9ILf)DLaRv*UIC&Tv zdE881W7}gxncW+693ox5MK`(6TDU;YvF*h%_U!W=f?^R$%}9iOz#d$!YnVarY7Bel8?W3H5pSA*4_jn=@zm2)+ptXBbQ|jA)&4 zOkG!oeQmMfA@ovKWbU|edj)HCcLti9NDW-Ccw#q;i20s2>1d4$ZF3j>|p z>@oV!Jdmeg-s3f6SefD9kV!YyCRiieZ==O_$oB{p!1@aENJ!D^c+#DMMy7)WOI}8sQL!}-MS&+ut(c`@q32jq(Ll)x3^F^6 z=7uwqU2VayO`TrUNhT9Q7ck%culhbx2J(IwqJ`!q6Miu^vW@@jfz$)&q*x{ z7994X#S@g4F_q3*`tzN}cz1l=@hXj6A?Q3arOH#aD`O)?Z-^nTZm@)Rl(L;#fo`(I z0lb&OX~CQm=CMN>y~Lj4OeO!=t}24;yQlu>U@;NT2o8AiuC^ZDt*d6 zT*tU?v8znWEbkU~Q0c~Zt1vED1beeAxDKVn*eESYxp6TWmh_XM5z(xhO4EN>7ll{m z-eQAWz+E+r1XAyn?!H0!`4_XPQw9*+AP(%v1bKLXkrTE5$+EFkCGXRKj0{v^u#5oiYPIkIC zP;EgV&8D!BHy~mQVQj7mm?>VW-{z&GQW$| zwjQ_MF$sRe9aO5HD3cSPTUKq%d&>y%f=*X9itKkLT|A|@nQk&?KRc0`V!#(3-?U3X z%L&Cn(sJ13w+2u|;XGO1E|dAKvq~b2XqDl0#sfTh`lN>y-a)B%AnT*4oNMT?38XJ3 z(5`PV4RMe$t}yjGjP@J69mowV^#3jCkO_{de;!<-Xn{XMhf14qAG#UW*o>#1S;LcZ z8PI#uMxJV&&j^DLejh_PcDb=jGrGcoDlC0fb!NeFcoFB{s zkTkv&AG~v((mBpcei0WO4Gw9M9k9AWme4Gz;nI5>++9b<+T&6!&7h0Hx#KNvm` z9o*%bogaD2@aA4A^r>QH`h421xPRt+YUE3@<}(0am@$7XEQ~rH2l3^J-<5-)Y3}#@ z9Sp2F#?-lc71&25^)S7-XR7rqfgd)_dY;K@q*%|QR5QIgRjZj=-N5|CY1J7%_fDzK zW@w#s>PpFb&AtMNUnhgQX=v}4J)IyuSmtzsW{PaN=e#KnyEJ7>Cy-y3DLp6hzFL-a z;}TFOL%J%S3V3d9@szn%3_63kk^&#*3@AmEQzIvuO@-PqUv6K5ux5hemqqkpF^)z~ z62{X{DBi^FtA+ZjL22Y}$Pxh$8YEp~31f#x)~tWSk8m1-O#$%jLf@-)V@DYGu5Xf0 zgXM2BxT7=@H{0eST5JUf!PNSLSqVreu~(gC;=(~;jBuY}`JXW+UwItvJ8^Q}p5g&O z2k`%U>Hi;`6AyH$TKPy&e8K-6j=IC~kQX`?4$Rr|UhBsH??&Vvr*LbHL6Y0j{=dUf zF&qzh=0_bQW~pdO7k`CD;$gHZJCfw2W$+3EQA$fRpBC9yel*hjP0Xcy9KH+qNn?GN z+F`l$xDCxKF#{uo=Hz>XA4%OUj0ILolw!}yMQ)qI zB^Nu}{B)#`JiUt3Q}5uUlTEAms^OgbmztX}-I&b>RHk(0T`M5$FTtl$veNfbqGAaX zN%6f-&<%B<=w1~GbE9ma3dm~Wu#{*ioyES3qflGC(^IMKc^GoI=c&Y(Ufv|G>**D77p|vKwviGar zZkR&hRMH#C?1~CfaYGPUGOzD#V;AH!ge#m#jn+L|!@ecn|GC1^o zUpy7!t<#-~<}ehm^Z4fBIr36nYi{mSNf?0gvbVR@nv$x ztJiz0(vXyj!0=HD(iY!15`tSvj;LluWU|9^aNiXmp3g2@?Cx=&9-WLlxibofX*kE* zKFda;i1<`9Cz;u6Wdw@Xtun%^a*k7<0al4G&XDXo zQnJk$H}eEdt~1{3nrr~oay$UftzJ5i)Np)dq?r9jHQ(z)g6AXM*(Jw z~pnJ*2pTjcwp^9g&7@?9g0!r8EWNnSEOZ=Uda$?j|kBTzvF%qzV6l-2{Xv&5=)Wkv}y_RhEheD%()*|(jtzU>wZ=;$6= zz=l)8H0DWeJnyg1@l0!EyLhRrB_E~yMISAe|B7UbK*_7Sa_wr-H=YUW!|vhh-elMt zpAAnYzjlvFTajUTO79%+DkzfCI=kRC6kZu~q=ETmc;wVar=iVQSH`Y8{D6+Q#6j(G z5x-Xmq$>24V+MlDUBR7d(j1aPD&9tH{J@P?S&USx!;{jTYP#XV#{wQ3U-hhn330i0 zQDt#0JURf!;dKzLl7`PQ6mij#hs5IYT&o)giKv;QPRge2=*CoZzElH1^)E^CnF#Jd z0sSr%wAl^8h?Yh$%L>wqK%n9kKLv2d?0sY10(#6uH_ddoGmVdoGdGf6x%T9$k)`0Z zL)zzO^>=#-YgKgJFEf7LV7ci$0v-NMS_L}z*iwDM1a7qmF@4LBij>+Tyg-wa`jz$nboZ>yZ6im1_pg9Z$sHL} zv}CV$H&pCBS)$gw=yjyD&YrBWKme3*rT_*YEqfjP_nYo{zW`8P=c;b6>S7TyJv}`$ z{hFTcKWguope%Mw5Clyw#&^X7l|>@lMOrpu8R4U0-$ZkA$`+r8plbRbV5swrX2b|5 zkO=lf9qVA^*6wiodlN9IwnM&HqTF>iSOfMsAp%a} zd}M-O6^#%h**ka^?Ebi8fjCTW%G7xe%s`M%uzyK+2FL&r!Q>7<)o$S#MdclX;* z2L`0sw)Z2oB4EjgYKTX0`xWd=atgQM*VnHY&xaAj zaQ!YB3%CIMdwW+egieotk>8}%>Y%v0D{`nS<}ziBRlx`S`rtkJzDaEMS4?3*fq>7@ zv_6tI$Uejj6FszSIWmf1uBhi!?&&^jc!{*D`mJxM*BYfH`RCQnHMV_XcoRS1uOGk% zh!8%g5O%JwKG@x0&|MhxRgkJ9;>Qp8@dJFEtH22PI?>fF+OLFaS0C_Sc%uo};V?Js zJNpRuz}=?!E`)__$Y;mEDcYDi$%R6$w1;z^gHasdEhqfr!yZS}hh_&trK;O(PIRgc zHUL1|potT}+uP(XFs}#7EUuwIn8c0%A?-*D(vTCB?SO^3<=1x&9Gbd{%QRW*@2=Io zY3(yOX-xaEM9&FP%|j>l zr_Hz6v^@CkwV9rI7v>_ife`N0WpR)4o^X)oRJ-c}fl!;+^@-`j^kWv8-f@S9SN(&h z3vrOuGh1`atg6){v+4*QJ>Uff9+Ov8)!Mbd&~`LKNo#mpS#=tnb}YRLs*T?e5`0Ym zJ1q-8IED{m_L^{tXAUNRv%7Nys;~nJ>?ITzrk9kexx{Kqs8A(PpbwMs$7et9?hJKf z6c)6zjLIq{gGH-OxSPUj8L~@XOKH?Kjyyx3$fr?02fBPFtq4J^^DAk93Lw!dclm_Wq?;u$`p5fWe2zx$I_ zu^f?q@G}x>KZGI;6t&-YzznnI^v;9e%UxPkggXojD7}Cj$M^%J@l(g94fLf@FRrvk ziVG(^eR}Qc zNPai`q7EO}6C-oyX|W2#^V~EEjRVyx2&{(etMcdso_NvhkUXtO6vqh@Ko!BtdrZujDM;~MEE|7&VTFXSB zC3M3;5p_kxrJ*4#m9(lpHAU)vs=^}mJp-ax;8YzS<7nF|BYdG#m-?wv#@Jdl%ql61 z<-6Og=ECo*xi9B-lmq-uip&;@!L9cC48Ky`P_J1|-BRBgKA?MR z%QOLuF8-6MRbz6t>bW8awHttC8m&6u1>u7O;90Hyuh_0yIG5q+PI|8O)@9Pw?3x9- z;(D-forK#$+r&p{m^E z+~CI4V{U3Vg25H}yG%2mJzE0TN=g+%{!aft3%0%Hmh3Cgo1enY`=b`U>$hx8VHaEP z^c_(wV1_FPTzJrb!U&dK>Q3-4q|ebTmyU5wOqHF~Pr$VND4(g>j()rZFEV^GB8oez zlciA{ukY3iGXQggv(VxU_;)?$b3igxrLS9TBGKDiY&JQrxu<4kNEJ;#l-zpObCQ9v z)H)xy`^{hC5`yZMG0hR~^yPxh4(BlRo%-{j3THdJI6WuL#ETuoOKsxCwZuzmh^NKI z+JIAqik6)yyuc>!4A?^f&NgQntMZwC8ykNP^G{`v6pKh1*4zV$x%k|HVSBtAE=&wD z8oT#WVzJe`Wtmo<91Ge`GP#3xAL;TSd*jEqR72d-mwzsc_43VUK2BZoc7E^G;4Ffs zAJWf91WLdjL>ZivKM_+<$#2s#Td_blCt^Lv$?4Y3r13_R+S`b4ye>=#paP#ROtt6-8WiIkBV?Z z>0Wztpi2sKrOd=6)Y(l|`sDxi7Qw#n;GP@vVnMtgQREM=!lyZOnv|DS+9oE{rE4jQ zD=Stcbl2xSm(W$sSh)Wp_Me~aQdi9bd&KNlakVY&xS>`BvLdE5=MI-=+Fg}ju3I5Q zb-@UJ%UnZONkH>&{}#-pn&q;ax11eC7oo7x@I_TmGn^;p5lC~Qah2Z3PnPr~x?M+= z&g-0ByGAD9MRu39&ljfzx?#*3EF2Boe5E+c8aJoU!-6+q0L8E8adk3PofuBP{39%X zTdT>dwSCd{739(KVfpwK+8W#2LeMyUfWTrzxr-VtA60fQ>wMHCbcV=?)Diwto%O_B znbW*sAlfvBtMD1C5@l>u45r1G8>-T1a?abRI$SRokR~v7ig}0EnLF|BijS%6EGH$7 zE^~ivsgE>uPiI=*tyj3eHc*GT-@KN4%X%+{fy11Scn{q(U^CAv6HHtH*)?%htvjys zyZQ*NIOI*+V3y@|1mQnH%(v+m=dbrYa$eFc)xIz}#*I$%v${wiLS|~79F-DI@nTD& zteO<%Doq3p9`7S^i@CY<+*uOQbP=fpe~0h>vAQe9viu9^uPG9a1<1h1%iIcU2Rs{10#YTf~Jg%pFalA%^MyT z7n0gRm8n-MC> zHRj7SldpCn#nyzKaV1+{&91LaB_L{nzL}Y{8F`gT6j5f_beo3b$tS6iSr?w7_9x-uZ`P`)Shnu*_n^865K1m6=!rVY|muaRpPU!x6{s3A#5-MUh>R)3>>MZO=x+^Nl1r-P3C|_XzqonUjJb ziZ*M+{`FOfu`I-EZ7!OaX4bSsj?AhWm>uDsYsY`A6sNVK!z(AOtxsh~{n%7X{@Q~K zPx)B+HF-3m>z;}syynv;@bqcVf%9v87_H8XpEt)=>p>0+qD(g*E330jZ^yB*(9@!z zM8X!%`XeU;(yuiP{v)sX+jF0e%DHV8qiCKnFMUW0__mq0 zHRYavvI$NSQk6I+3H1tr;o?bS=K18Ye5ts2wi1FXP6S87cH1LE zGn5O%UP)9gG}al}O%SFPU$@dZJ+FKWT}145Wv+_;%<)NdwFCprQE{Ft{X6^uBBGIm zGpt{m(nW2BbG#^Wf0a97FDacn40b)-6|o5`GfSI63C&TjfN8BM*XU~zE}*K1sd+uy zs?Mw8j23NsyyDMU;a5(F@-=lnk23?f&0B95>CXdq8dsa2w8uc-ZG_(N>auPrj0cMv zucOC~CM0{Tb3lYpCIYO-roOmM19%=ocy$opg2N;UstlgvugDj1D}4{2G4)xZ+uGuR zWa1RR8@?HW`6i0=)UG8WOp-Jp4REWaGEYXWgM*8qT4_nold`y^)7gD~UKY!=TzzIa z*W48gCaEhHN>zhh+=NOWhZDg8o*j}pKQez`tB@n4@&=#ZVx{58sK|l8|3un}dX8kA z%PgUF1ZMqeJtIg!Jn3$i7G-zgwyARiXrh>PO+X1{>ZptS)JHEWe%lP;Ruk0fu~r6U zjipjGL3NEYIc^DXGFYcZbnBQ=Gv{B2935{{{QPE^TqXv&W~CaJsmb2t^)i~^G}*xt zpeP;Eh?=XuiwCIUi26EmFgWhr;j#k669A@u)BZv$YoJ-L3yDp2+|+O0~N z9)}XlO}U7v8i76;2xljpZidG!sRu7PlM;Fcj2q8ZUv9ioBIh>gx589cPkidv+{}tA}1<2{COXT>AtebhG(Y;Ut}{ zZy@u{&!f|yr^D0zH^;+6PIaswt~ES58y^g(ljF1V^IxZvi~WPYP6GP8Kxu@bW~h() z-${vtYgA9c94=gwrtz_4&jSdS7<3EGdu+U}(sKVM%~$<*!#95&U0}i?<4ackLiOac z@@;l=n-b0V<%^g77hzYX45db`7)V8xKENiz^+PXM@WrEL5{z%mZt941GhiEMi}WjV4FV`WPX0IKzCt}dI)#h9 zNW9QcVi)IKvsw73Km7@-m(LL<`AY!h5sK_pN~%~nYG@11Fc7}aL+el^X}TQNtbs-x zqshD%+^8ZBy)}pBf%L3=*lXuu#75O1}I0} zE)CqjhyM;X1YEj9BtYlc`~2BWF91rydVqmJnkd6L2h@g?8^;<{3@gy`4y+C78B`mV z+KSFWSv!SCI~z$F!+tDNu5&DkVi_dqihw6(IP6XXxf%rFzZ+^@I6BD@zqnv(Ng(a) zMEdl6hxfy^XR_+>aB#%auUq-g5B!jW+Yx~w&%ALWt3OPr`%M{^pZW(UQH@``M2_{? zP#*;KFZpl&FAF+HQ}SLT4S?Wj3rS*i55epff~Tpx3;u~ow8OCHWFV?)!r7b60AWC$ zzuc&B@x9V^mOb?=@oev~z#T9)A-arC$2}%(McoptQfh349E4X$hZ&m$nQ|9Navi#7 zGyD{%OUs^d$H+PR?N@JCcMB^*4?Bpu%x`IBWvnb5d+2IFbmJo#yaThmDDR?0_FIa2 zlweUxEFaUg(24g;mflZz3F2ud?sFAH*E1XwVc`~zFYwo}ilb$EUZzB``bhZhX?hO| zO|_pV6R5ddb;1*-_ux{+eWnJ%I=#;cG6UoQu7MHpP8gAO{c=lq<{%-KE55%Ngj2Gy z!v|m{Vj@l;EpdFGAA=gkP=v26pCw}XK7Ugd_oO$=3`luP+{eG5$@c5uD$SE?X!@TM z+KQ|mq#v!K1#7RY37NtK+CbrK%%@CYgkAlCyjl0{@$-`#pX@2pBv=&z(;id)X)E}( zSO@o6-V5$QGF53G>A_!M=-b$}tsHzp>Ldi4(_+Q+54;lu>xmUw#<+@Sf4^O=meo&# z_s`xxdzSTAkQKq5`9Z6JJ}-;A1OA+pGdo%18$Nf!D$27JIW5UYf^t>HoYtzRLW9aX z=oY?gxBklV^GP23Or48SFh9lPr$!v7d3)H zY8%mmIKb3~(Z?uTKt7;Qv7u%nVW-|iJRd~n+2avD)Yg}*mDTH(N1kj=`Zqeyb(q@m z6xIfSu<(-)%pbJz(3d5+799=#%Ee!-RQ&kZuzvf0fIkjl^^SP!nH!^|86)ocz!Di6 z0q}2uApS);8vc{>Z~Oz%fQng4I#t=krXO2q))Bt5B_G-=9xH2{@HOVB*r09eIKKri z&d{oZr^|bwM@WyMW+g)`04yx8h}Wb4>Jwf|2$v%Nz5xCWl<<5KPqJ)`P_@CmM|})p zS{?rHSAL1%g~?Bz@Fy9OvGG;N76;e`v7n`L`Shuh@QYw%v?SfxIiA(L{%{~W!F;3+ z&LYbNc|Aww(<*(8Q_K@BsXgt~G9Y1bKAuEl!S<0G*oi24bz;CLhkA5*W@}6!gDDS~Jl&jPs`5}^s0=SlA zIG$=IJaUQVj(e>wz{&pK=qgPQhvye>9Ygo~SZRTtT=K`YcPJ`_c}mJi+6D-Ov?XFN z3GSj##8zIeZUcOmLm^57Aw(4{)co;Y>&C#I(DdbwxreR&RU;lLmk{UA!w(Dr=;InQ zxWnv;^G5lBeAO&A1HEb2MSzH{2drY_q;_aN77CA0Sx9C=MVi^A<{;NaRW&$(fvvSU zzmbr5j`8UMnR$T8c5l;OeI@q>kC7&5Kw(Dy)JCt* z7+}tK6pVbPV46z@3f3c&f5PQX!ooY~f7N|Pc5{cx;<@f+iX%c39_ujByfAo8gb@xb z5`vg?u(88Et(lSEiGyTXz@SZA`X7P zHq6f4Iyc%zn0J9I%wfQ*d4AnA9t&8v$KmUyxRS-czQg>(YPw{ctrC0k-45~5I_UVG>#D*{zd~@H2?q-i>|!Rp#_o(&@goE-_w;GLL6ClNjR?gjnU=uw z-dotBuab*CPOD<^(OI@b=`hF5!P`!$&T4T>bt8GSJqzXm2zH3=b=mmNhFqXI!3h*= z^hTql*fwsh(2q#)%2XL6dH5swCfVJY%dltS6=dh?@9#U;PrJ|h>8CVCd!v4EP?D~8 zukozz=SBYcu2@&P`cp?nef{oeUeZ-sfy3yRtjgR;cg2fjakmoS)ymbBjI3O^%;~Rl z{a1PobCu&EP<}7z@1@>)MSopg+grF?=d0{4y`Z&KeMqVo`FwYRvD#0viVX5u+TX$& zT{8y+R&9k}Lo5TW0Ah|30D~#az^hJ_I18luk%PBl4p#-;Ff7`Tt6}un6!3qPUF268 z?57h#UDiOUmclOWi<@y87o~ak$g+p`c&2w235IVYwXaqb00*eO4xq);sMXHifj0CJ zJQ8CiQSo&4pwR}?$?(4}ho?lVJiR=5GaOF>rIfAN1p;Izk3b2h-$190a1`%fYyxrR zL2);vEY!8_oYeOba1^EiD>a7z$R6&I-VEc)16K_`)i$kl5>Tj4uwc5ITVt0k7Fk0C9-gVT*jeyY#;Ogi(`a0Ylv^Op->amks8J5+0QEa4zut zl>>+$c|K#8Okz#6FmwZm|@~*W2?)toGV1>q*S2tEr7kBy+>?Ecd)o9 z=o_V73_F_>`AS0`Y6t5&*K2!s&!({Y%Gi$?dnM@DVUFl$hN`$m8jPgUN0#csa-6CF9i~pbK!agw z0iGQlInTdn(FsYDuov*Un*Q1LCvVR#FPflXBLZ*t`OZ!qtl=-i@vspXwgPCw7d61% z?T=4Kr$0AAW6cP-KiA?mIz2jTf(2~|pdV`i9h{vWjT+IStq8CmYJnY%P8;b3Z3v*3 zjey2&AdN%tEjEFgG;RsniU5023vB=RxCs(z64GkSJ|O4g;o%SlJe(er&2tR4?^Vs= z==lbtyS?T!ZcYDpw%Pm*UCuIO<0I%-elG}w#c z=At++3ka1eT}}w>!UD*^DP1g5nH*LB9eov(RdlyBN@rW&sju4AZMIn%2f&aLrsPSCzyoBxTK z;L;iqX>@LNb-rhqE&MtZ)6}^9JX>;>(vt%>5P>qM0xnSUBHsoBBA`x6Vr-?Z6K)}& zRRLaD_rtDBaA-D(K(~4I=&M^l)s0I*gYq?(g8oG?2yQy)t=a6Uyl`u4CibnG>z4+D z7_m7{qutuQ=V)x!?_Xw+wgGp*Ok0nGLR!8uhm&Fqf6?mT>7N@%uW>s69;e4}TyK6B zIDUj4-})>Z3p86Cf=1_m4fS-gxHhveB--FHoX;UWz{k{skQw3WIgkyS10o}D{kNKF z-UwI{U4^XB#(<#Rrx+dBX>;{ppKMZf#NpTW?cen`J);hr^idksC za`oBKGPJvHtPCEGcRc>wfc48sc7ubLYu*YY0h3phd`!!_iV0tV2Xl+GL*zaxbHm5^ zyI~?6Fzryu@_F%1@SuL4c1RF~f1Z6Ca&U)IJ4C?n{3d8nzg2rAJTFmx2Q0>$py4aO z_dDP*X?<)LPEPtLX&|&B$j-?dXl%cQaj3R$<%`j6?@mbm#%Fku5(CkZk8;{8E}Aa{ z=CU_aUh2?l-RJAsBCBp`$}<#r(mqhj(P-hNx|4-StUb4nM6+pVVm>9HToy|5d-fD2 zpdjlp+H@<+NdnL*yz>GH*ghdA-*x4~dvYi>j{fpJH`&x>j0S(*@)V z>f`Pqsw7tK$Uoi)bzN-e^J(*za9@_;lh7vrwF|a={pi8Kbs^$78|ICvWj&cxa9oR+ zFs`l5?!eJEj?zRJuMOhKsZme$-(@{vvKNI&1g5ceLL6Ygl2|C25rPi=NxZ^^ z-~JK-hbB~x+ zj}pJd7ztt}vT*vvdC~Yp@?Lm!I}?v7C4;xK12%6h2X7vy3w*Z*4s0U(KW2$5zK(@d z%chf6RH76?P%J>V8FHV!u^IW}(_Gz};ri3NH%-72gAMSl$ZBN(k;@ec(vBkDjQF-E z)W*Nn2n6n-PWCn&y4CWT;~zm5hSka+pR_E~dG?9=FyVzlC?as6Lg`8!Y^tA^mQ%C$ zp}?1rM7c{T7k*Cnt zZ365&TYct!&lcV0_?xhIsNWCRT@({jVRc(18-WmMgB}B@!nbbv=JD-6=Pt8YfNPYS zhEW{h%+^?K#zFovHcz^b;aEekxYe3d0B0szanN^5mk8yVK%pTuM`=`e$4&(50Do~` z9A-D!iaP726aWNG{)(~C!FKR`_@b-l5NZZ+Qsk@KPM5}2ZrB&+(WTk6!c9BBE!Jhl zdJi`4eUjztRr>h;6LLWEg!k`n(*FeNg3cEOB>a$T$l(Rgg54ckNYz2~tB$)n!E5@) zYX@Bh!9aaHSTlmU(;Hr->l+bEn8F-}FM2G4>Z&-(KBYG^cL(MXE8c+=>bu0jpI(tE>VXop2P>p2dSI#=++&HMo+Tz7faTQ*Oee|kX&p_s zs}&;7Z-IqZ9UuIj6I|DiP?KocY1P$`6W+It>?+Te36S{`HX;F*&>clf_rgU1Xb&|c zZIU(43@*;%mwJ-2;mJ9DZosoKVMrKzP!jm|I{ay9eRE00q4&I`9=@U^(4(S zhU!w)$j-jE0Tmpc_L&EHmQAu+MmZ#u4C6&qRpDUv;7&eC=NdtAYb(e_H->(y=^yt* z=&VUG5kTkdXz2m4Xx~!)Y4F>~KdnQ1A*Po?pFN86%)S-pX#@E8=RC8o<~%k8H|OE$ zQtXrC=Mo)J15Z7_>ZtGGP-%%0Xx_b_l#GD`@^AhONF7o?PCC$b*}U59L$4O|waHaC z#6!=;Nh4yuD1Y{i5(~~tP^G!!Wm)q@h|*tp>8)OBBj)JvXeT;2-N|9Zq$o|@R|HxG z1CuEA(cSK_X{!E!Y^DNQ+}&^|u^QIx4d@0WJR!gO?YX*ySb__stnAvE>C0ae)#|M9 zX~F*q)3GQp;5I@pHM(&B0te77TMyb2x)XPmMdPzZ#No zTXRVNeSIZ@$y8k)zNw!SLjgYpb_g2PbA%Fa1Z~rAuQz2tn$HZ9JFwSXs1#5gD*FPUelntc=?qOXxFfql_=WW9A6$!~RTd)*-j}o%Xv!j$g*c_7mOqkWp z*bok+AsBr9;Ovd^qjB(y(AL@yZ@ke~5oIo18zz#^d^eww;82fRkVx5Q8v-~xI(qEb zkUm9@{g+L<%S(vIpNvNjZVHA+;7*1IkMmIngK(La=(@^d zDBVF|VO#Kok+x1D!^Uoh0lH)cP~ z_w!ivR>gl#&Q5I_@C+ee9(wd{6|dT7kjz2BnHvJiPe#>y{(dgHnqBiydp6(MH7cKG z2xa6^HuNRiXufTC#W07Q-Zd^Q`D&AU2R0SRs-7`W)2E7jlr!-g!<|D#uPT_tS$gRPyM|klfb$NS%Skr;N#67gO2Vw;uJg0zf(U#L7ip?h- z0^?}r&)|2e;qo?9ADzd#x0@pw`9gTa9J7z9VVQLUr%+h$aifqUJep^LV0Y z)0T98Aoqfc0oVl08JNvK^XfW0U8ZN|M}#swBRmi2YkOd3Y$NfCPk79Enuo~7NPe&@ zOWhIdGQF7@a&vf?@BsVzIcbK|PK-i`*dE=})_7nHIXyCDxP zSo9(6+V@Dgd7&)v#cySCTP>rq(lhB8got{sVR8SxayS*Foxuvc*$7%>aqJ43|C%OR zP;#EIFbzV-Ca}Ks>vM+Y**}te3D1XGM`C+xVPsn^Snswm$7Vs0e6u>(W5`Q*Sg^pk zLnZu0afqMb;LvWebVY49=I`04Ppd(Q=Ez}Z72%C(`6f;Cae4!Pm1OcATIJKVD~yg8 zh1Si%Ii#0M$Bq~AbZr7pA3q;CDDIX;PK!lBa8O!Zh5vC^{6>_Ls9%&f&zRQ=BLU)c zZ#TTA@y7UPN9mpsVNuQ@I-s9dBZdWQ#~ke-TP&0XzKoN8R-$p@Cb{K3EKEaSabjR2 zB-|6s6fl~8IO#z~AFN)-Y+UkBg}KrcMx3Q2Jxks|6d@B?GZyo}W<+HqV^9x57N_kA zfdYojpqQZvIgt<&=Jh%ci`da@z<|IoeyDXyAUpYL^= zxfoXg)w9!!-HUZ(3vzuQFCxfI$14zABGO zFr#foK)tzhpo!oXWab}>EWzZnM)e~eTw}a5)PkEjq0k!m?D10aS(1KyR;`j^y~6S) zN=c>G8wD3@eYb=vLUi-%@R5w+`iGr@*~fSzj8M%))r zpMl7S70WwRAMPGeW~w0@bkz$fnbOYlIL$>9wHsqtF7mLL8Vql(-eoH^CoHzzZUV08 z<@VF}hE}#9z$V6g6S36IgH={=WKZA2WE z*0k$IdbdQOjn1zrfeSTc`>RhYDk=>9r`lBi!K_JKGdPbRK1qu;uXDAvp3oz8vq)FY zIu0U9m8L6-Nj5Kn!GY>0$=!4t2o%GI%IN{tPLvR(nJ~LM@;}vbk*#QWKU0r;@Na4u zD-JCdjE0v6p|G3CQqvrXif2qWO`Re<5?4W+-22c@wx7>KI@ROV;Og6W-zpMkR_h7& zGPUTd_NFpEEf=EFW23t?FY?xC{^uH@#*_N=4K=*?#s%{WO!Kh$N5IF~zER*5Vqs>z z0sibByU}0fy|c2H>`hTD+)K7((;F#X$X>9u>!EprFV05E-o6{-vg5(U)f^&Hbqa%f zHFUXiHP3O~Wk?Im^?gFG0O-#5V(+>w@b9fnmb3;L-?BQpJmM@-qIxzonCPq;u3r>} zuhjqWl^A_<%yJgOFq8FiS(K|Z38X$nPL}U3!>NBM9AD%uP)mNd)8ek;Ym`DyiDd_v z^@5Q58JKRAaNrNhO$KRBgxR+8AJbDM22Sd+unT@)#>$uRp;D=a#r=v9h{`*W6%oiK zlQdAIp*)_VCJXG0Re=AK^j)wAGWOP^e=;Y9U+frjsd*e#e=Q}5%YDP)`xPdJz`$z0 z7W{P}?@8l5d4*)GqYGI}B;x`;4ZkH$AH!Yo8@pwPQ4bEB-qT)iFw#G$Tkl}3ehGDqB?g*o26Y>y510>nhCd;FN^doshsU)@7Uyo;|xM(`QunR?q%+esFej z361;zQ{9<1IgBM;y!8&0g9BEW1q=FD%gI6m4xu*|BspZ;SV zEh>T>+H{mRRb7$Rj~8-C)^Vz9nmyIq$@N5do(Fwr9BwQ^iO8_X!>vw{iWH@F9r_P8 z1=sm~87&>#N@mc{s>5`?pC_lq>U6!}!NpO3I^~e26v{Fc=TgOwC&4GyCv8L&cRbxj zV+}8;{Bp^mP91&0-Zy^ZgGpveD;1FqNp}1xKE!^9T}rHaqB?^?#+Z#5ab(_HvP3hv zCP6L6(uFJy0n31nEdx5Tmq-WfSSnU6o(5ry2t9DUxt0iW8l?I9E-fKwVz9N_3wY20 z{b8pU+?Ux({6TYxZ0$JsA*0aWmhoA>aQV|<0Zg*OWl2aoh9H^D?=Gp#sN-KDL;AXI z6Zor7*TuRzDX=d?O7H+|TNpJcV17_`0SU+#_n~p|D1t{t`JG>@niZ@5x=PFa8^R6A zaU)Aec*g3Nw5*`XHo0Uk|vl1qlTt=~2Zq0D(d@^gW)& z214Oh1pi0GUTI$ zL?LJMc_k9oL0Q<{@BWO1W_!QSG1dmJQZjP3`rLy2{nceWSJ$35FZ$6I>ufi|i|1gWb|8Y0je)-*xFSoy&&*$5Je)&A!ex9Z;Ui>hh zCvo!qgN|?4GRklQjuoUb%D=d6nUxa)uq-!dam@r4g0Xi8M8eXaPDYcH{fmRQgXjF0 zi_yt&@SPW9B{#m@fWuGAjA)f_vX#ex5>?5!UV*OE!Zbh_?bJ};ITy+b#A$6mq0wY=IRqmA_4MrBDQcvS&!=Y>Q??3L z6C_DpgVE_P`^Tfh>B0WjP>eE9!b(2m#eFVod$ogfNxM;&(=n$_(42KQ14s#uVw2I_ zgsqU|5%A%Y6S_(6&0&*`5RP)9jS?&KU|*swmWhLO36Mwa&bLLif;gg+thxievLTuP zE{@0P4LP5k@bC2L0x@#$iX7Z);?6ew6L^cR-oL;9=l1nedU5*)_$jkWcA>vw*2l5w zO`O(M?R%G{V3rT@!VGC#|*;!T$vCCG+Nu+z+{W0rP@x?ck}YRl_$sNBfIKaSw!7 zX$^5rWC>QR%0eVEI?R}}04(Q}Kiv($%5E_8cK^I7Vv}@*_6`)G6x4wuhl?x5cIwmr zbRBX1S1!~INc!o9{DaYEB0@uz?F^Rr1%~65jC6(4wG-s>!y$wnVBNbmGW$gufyJ36 zMBnx8Fy)b;j+3)DKj$q*hu15M1^*5l1EZ$S!H?J)i8>&g;nGA0angFh+|J2vVdW%@ z2BQ^XSq0xOt27}pf;Y3sBc6l#QE~$ky;~tu68i_9YPKeociDW9jP9+lvSZL4Zn#MI zSG#N{>etnp38-W8Gcihw($z{hzYV7iRwUzI*#`GCzgHpB|LhmiV01W~9-I+|wSRCi z9YK~u-OS}y>N8-=1)B*mbbGPmsAqbkT+n)EBN;*@{)wp8oykX6ZREcfqd6{pQ z-=3rr^G6YNCNn#-t+e-~K}8IAcS0J)$9nt=c#LwfyCwLH!R7@E(euT7*$*}5EXO55 zDUFitJDQZw^jUU^9h~JC*v4jGE_k1oaK~I0pFaEipX3w0JY$IfyEGt%{0u4ret|my zuf)Wy{t_1Qq352eveT!C&vY)t16#yaj19u?z>DgLqfw6uyH3%BGuxfrx|JtK_vHL| zcrqmN_)uMXaU0!YPn*)e)o%XDBRvQ5RJ7I~n#mYP`DN}2q+nQYQ76agRw$f}}3(t^T{h>#6}Jd|H<080q@g;{cvgYuyLfLG#mT{>6J>0N`r;K~02 zP)i30KOHNef}sEavkwCRP)h>@6aWYa2moM6HAw&f00000000000018V003ieZE$aH zWo~qHFJo_QZDDR?EpT#gV`X!5Z*nebbL_o+f7>>)DExmv1@X65B+tWZK^{+ z$MdCA!MDM_SD%KnNpkIc_nlJ-7y{SPIH^>t`wT0`*-{IoB&dw4&Vl0(f-9&ta+(ZR z{K?-o#YZHk@mcSp+a6w=iXy|K_N&fm zyN5WQjs6w-Nqw=LC-dZX5!SE0`0T^%d^ul)%jCB1d(&x2a5cxHUUKGGUt!>3$8BXF z0znlk9I-sSQe>($;wBFw!ToB=o=5GM7q4k9@E6Bthppo_ym7;s%is087rj38wAbmk z)v~>Qw{zGZo}3-Ehe(cAzw?snZtV&1onGts`0UqVzuoH(&rXkjgMvp`M2;}@W-CR7 z*K41)0MhXAP511iJ#3wy4|}aw?P2e*+d1zKkI!01ozvH9LqO5@Q4m^YXEb&yTWV{Z zk-OnUYvAhLHO}(Ok$^6O$TEVCX82K-Xi>ppGpNMzj^*C zQ^{hm;7Fm!+tzXC2$|>tMjTieKear7KxLZM!o& zp@PSAF9?^ziXA8`!^AZF=QdRx~UQpmvC=p|kf4*4q_ z7i)_u^=`adXFi+WLW>T{9%yeq1C9r2#Jj1qxxPJOwmjaIDBI`Wm&`tfU)kxAu1CC! z!0h?Ux>2w*OTy*Mo9eUL@_n5s68%=2(J2GVkB3V=ePZ0exFsIKC(B!P2{Ps{Kx;a) z)pTkjfI6ChHY;Z5VzpNqnXnS*K6y-%Ar&9N<8b2nx9MPKz-PqwX49)glQ*k4QTTtn zoZmPfBGCJ0Kz^mZG0U?!ec@Ep(O4`akm1SPS>J;aQ#6;_D6GZE#9`78Hmh;&Sh*uPg z6%V-GZE_I_e{reO*%+3)58g63V!g~D55=+yr83v@Cx7nz!{wwv%;*YpYZjc&lhc*d z?J|=SMM*7JZlNZv@`~HsYTQ+YrJ@6~D-*gtpqLspCm0zhc8#0YmN_9jmWSwKy-7;KEVK6JZmzTSf zn&a-eeC5KDW1-Cl0)q&KoqZ3Gm)y~OJ`KH@OXek74)Za5L1rdO!wmVvc%w;-;@-hT z`E*w`v_Uj=8#J<`!Q^Uxvb~*-*tk9e_UX@2M}vVwq-*eU0Y5u2<9lRmFbt>xRH6dT zkLnW4NsjG|xLLR#sO`{{8UsE4SVhY)raq)USrdSH&Cy;CMp@PJPB#|FejwYR-BqoW z>3q_kAA;Hq6tqos)r|64F*$wp*Y%JDnY!?E6w5C5x%i3(JH6rA@zJmYYOr_(I@%}% zSp|{+=N#Y=BBwG1q?BT%s~DMuQz#R5B}dU4#2Cv4Ej>wFMTQ$mGc_dT{}n8*fP0)G z&!COcYC5_fmQfNie+E<<0b8WV2z2h`G;_5v@#m{)0P9NPjH6k=7m)pQ95lv|2&oIS zXRI?LFAlLA*px7i5uaCl>`nDW$`-V{JU=-Jlk0hqRdO_?U^T-fAjIVl^Z-%SxuLqQ z!h0aGda#;;$~&LE4igwM3mbZDJmbWh+0-jWey<+!62lDFDBn~bP`n4|k6^q-1(OI= zjubOk4~sr>4-?57J_6Z>Q7H{Su)(`a36KL4N)N82JEJ8HyNh1u^!2a}#-8THXt$0< ziS|Fw&$|7dU|Q89VXXhpQ&*vF8NdcIJ_pNeDFPwMsx1oGvMQ6CpFnX)B{%&Pa+7|% zk7AfY0X^evO2QdE2V9iE52@jGQhp6JI>yI!+C~2&z&7j1WHv6*1dYX^qHDwxNHuD`o>%u zs08=|bdxDSsf2ZrF!g`Mv~UYo5G>R?&fjXz->PckSxU z!ud{BZovd#@;t}yWgYC!2~JGz|C73&vN!;#hgA;6K5^=t`I&~X)lgJ!WzmH%8UkK2 zAEnB^G1|Ew>R`iFwJx*CnyY?jbg7`t^oTEI$ubJxhoES;KZZVsQc+wY)%{2J=!J+C zPP4U5l=3|Rg;=Eh&?lg2JRLY0bfkkpuPIh%;Ah<95D44Ilw*6WM>wx-p*{!}kt{S? zQvr9KBwMMj@YF0BRaGCJ$q=Ke#SXy!XIGT;b7Q}dC9_+vDUH@q-#Q2FMdj9u>VsZW zR1tXX_ujNJ66S^?RTyb->@Jqmys4G5OnB9O3oHu|t$#M>Etn|FTUE`nI*vc3?#?FL z4X-(N&tr3I?=E$J_!&F)Rf=HB5zKdGZjshfKZoIFQsBvbAeF!59;!~~9?ANlrJ>Yj zHCig(D572O2)pA}v#iWW5ad%|aU!R5GB&sZw!syo-P1Nx41~~JVB0DI=@9xR%7#AV zgZzEZfFd0Dj)cw5N_WKL(3=`RanDgT*0r4ua^m?+i3jS!P_1XrQPJ$;qi&fTAx=#; z^jzei>31jfC8>k| z#pTDR{x19Y;*m1Jy#>mewV3E$86Be<^QG2(Q0SA8+c6cFW5U8x>WC)#KTJf~SHMVL+M7+n=S-=d&)9(A#2QvGG^$2k zwe4*-qrf^nopbjhD@n%ckd*UBj*C$T_u_gXt915vt5Uj@8@hx1slq&+c~hEwEs6Y# z)S%Fi)x2BGm96SAikg>C$mb3ZTGPkEK09@%C z0Eyqus3L6~nu1Il3x(B+3mSjJU0BN0k?(|Ut2&c;EmMuvRN1j!M$=sLwb!xXCt>9{ ztkel-76MsUQNItySDFLGqEA?~ii;Twp9>UsA9V<4;MfHCjqUl)5Hmz6zKtX(iF0(Z zim%zOq$qv&O)5&!R}hc~wC04lJ69vVW)jIgGCn;pK81&B-%D*!u?6Pqnz7xPF-`|u zAT=pgUGp^pv6oN+M>fz5N0kpX6K^a{Jk9HqF+#^u*65C(Y&ol9%h)2nTa#LrXSl?Q zW{Xwg8UtGZDV^7*6|;L0e*4;v9IS;sX1D`T%R&)?Ssp zkAZcxRcHj_JYIku682$5R`+Oa)^XV_TY)OyIh0-%omJ%ap-tc1$ctS|H8yRWwC!H8 z!=e~`vX3 zvr{bqMrKvP5Sh^LWX_Ct=4jCO!`%Vvl=CY{z4?bLW@p&&<(;=7EP+sGISh))nyqd| z;gVhmYATWb?n%V~pd< zU)4$EJl7Am7(rlbDsLHei7oT%a0b90DuO|azTq&Aqjzh)no4b33$)3nNfIJ-{zTD; z0NPRx4tnSflL35RLmyZP9u~S+K&{_GZ>hGyWJLkB*k+jqORfKs1&|d0kRfI{5Kf5} z1pq9>QtR7-WDE!zMe+xok+I|wVN3%#wrP+8j=Vm}l=#Cixrl-SU6%#7Ty&0x=iRgO zcDMiA@QMs7`Ltd#ESQ9k)<%GPJaaD);_c$LO>F2UL zs*0(F=08CLOn~R&TGi%pZqT}+C}T0|AzTv^Rne%@e0G`Gxm3F=15avrX5rP0!mK%k z{8Xt{NXWj8*y%kQC}V6g$YrbQnB3`v&!xJM+X})|9wf!i9!k)h0#d=PRO^w5S(*{c zP}sjK15bJL8NO=TKmVOMnAD|}+GG7hDQ9P|g||#1Z)$c_k0dY07<;N3k)gbpqCTrF z=I@A%r@Z0F3>b5-kIb>Ui9SX%dmofo4=5rMmN-GYtvd+b+=Xv-AS;$2HoM&GU!Z`J)t(G>cZ za9=3(k+bRueIMR!o^;xFzU`ARxOdC1(tk^L?NZ9ma9~xgjAH z&B?4wU!Q?Efu4i7r}Iy^c|#MGxwEqMHAm`>z+ZEvihYL0exSNkwbLX_rdIq49_XoB zbr|je9bK3z- za5ocGVF00-HnAKI-kg0@tjKc@Wj@ZruE_?b8*a+OUT=8XI%yA2TIc6{$Gei#W|{iR zNwt$Wr%NLl>8Bo*`gHkiW$^pm)pqp`4^64{0)yPboFhPVTL)WMQJc+ndomqgF`$Nhz70f7i1x@UPs@lncpYo>^Z#0dXBJ zqa@DJ2ZY7#SA^Mx5=|;MBs}FWBo55T72t3<^nV7Pf=eKcJMMyr``Z%D2f0hsH_S^^H4pj@A0E?xWhD` z@#w~6uD$o1AR2>qhhb9qUEK|h{rSS?y3K}~vP${6iPF?kauZQYd_==mtZ0o?>hQza zbqvIc{1|ECBNzC%&}H_MRLP5|X?mMglyLc=9HVo*nL~4bjG>*C+1yc~aw$_42?u1N zDzlGVP40!>6!e6{6vPm{8%*2x(qkfg5lg>uOGqPz_Fkb#rfuRPzLw&?W<^=?ggq_y zPkH()WoJ*isSg}f(1jDCxCPWlRP91pqScBN1ABPf0tKma+UvJY58KwmhNVbpXC%4I ztZml_zO|4*6)L1xDT}4?lRJJ-u_YFXcLoi0FAn=>UBwrib#a=mO)J+byYQNGB=w*m z$Fo#z+%CxRzFXgmN(ew#U}#s-2umKB&bg7|kW)Dz&vmMf%-PGow?P>IT>5AI-_F~^ zSDp6pQIC1T6-@LzVGaeQG0LBf9qZm@GC!V!01NrXk#NQVC8sN>OE7>h~{~J=HdKi0ZTtBV{-M1mDDDCr0;00D^+~#R2UE3 z|8+C}Gn!64Qh2H0{+@fqC9pU{56j6c?hvL`9cmp1^I`8phSRv)|cYdAWhFKzyzz?$19uY|HHvN}9SepJ5+_|6h zB>p?>DF2*pey|cu5Ofyk1dc*9LkqJXiG;<*XWD(wlS{u0lejqU`wJTY7b(RdzI8llt+ z6+ixVx8}HRRUb9#x=fJ75+=#ty5=&jVN5PMFT(l_y6!8xmHOjqvvL`1^MAkHm1@N` zn_$nK>%ra?o2o4KqH;ZWa#dwhR=#<9MboX410CQpRPDfIqk8?{D}&1q_1$ORUTs$o zDhJI=0C-ug9{jIL9bN!T+`Hqx*H6sMqEmmok%%7x#3pJED6S!Evk8Ro=hM~AjQ^h8 zk!;8U3Kb~sfvW+b-x?TrBhLV;HfVOzPG1g26;`%u*d!K0DV2ncZQ}5ysmi}H7#O~?Y5PrQGwvXE`op)K9=fZVdwVsfbIKBDithlU4_}_7Ew{Vfvu<f<;#f)~ ze#+7SAa{>Cr$C5a^9djfMXArw#}4UP&8H3awtf1#1Iv5su-|!0!!Uf+LKU$26#Dj! zfXiqFDjB1}Qy^{+SOAM7*u!ocnu0pe`IED^(7{&sHFOZr8=k!yzC61)J?b@|0s(se zI36Cgfa;h5g#-H`#h=kzwATD#FYgoZM*pIFIz;`X`2(PH((b=GJ7S&0ynuks_l+O! z_!)$zMQyV$D0JKm7ms;Tr>b>KD@Y@Td?mJ(($92Cp{}u-Wp!eaH?+|ww3@WJRLWOC z%KiTNGTyFY!r7~;zTc4XVI}j61v=u$(V9Z}eQ+6He)Jkw+mz%@_(^2?7U5C+L99fe zC9wlIei|b|y>m%xQ$xIcXB(7p_HkcbnrCeL&KKSorfR5U;72!kL0KuYZu|U+Q|!*% zW~fNw^U(#s#(0p#vd?ulWIMFvv5w(~pOEoj7cg3BJnhAb3Z?`$zaYWqM*MKIa0a+} zVnCMk=ks?_=mhf{FPgcgv85^#ftgCgY)WxC&tyqP4;uHh5S!T#Mjz)17T6|Jw1U zVEw}9Z_M>amf&4>&GkqY7%$NQn-Smg`v(encQew~6^AaFt>M}Qp(`kaY{M)!Bvk-> zK!d;D^5(+GOhY+N%aEMJKH?|aO&hc>BJOI&9WF3B31==hZ()Jb;l~9GHRg6hVmf%f z#mz3(Q1IPs{s9z%`OS?t3tV$ml?B8|i_c6Tr{8(zxV*(5%EhY%Za`x8XAo+%?c?65 zQ(KqB+@i`A)bayrEp@vzxY8s&6Xo`j_iBhsk#()`Vx^lXTDNU&8H>{ft!O&K1A?|m zMjLo*!Ht`-NYtXnEXD8LBo!*t7!};O8C@?cYDbjZxCveF`ZqM8s&)_BoVifhfSYAX z1JCN8_UU4gedXK8TSRS5&De{UZmNJjn-a#RJJ}~{w%i7dSadFXE0%&A zG^4D&54Sj5WmFM(t}Chyq(1a0Zmkk9aZsC6eXn|yQN>nOZWiX<_K@10+afi;YHxz+ zSXDf{=*f$@(x|_b@w7J!Jm|c3mr=P?KyL2fkFd;+4z{=(L`$->ZijKWd>{ECZSjBw z)MGy@*1aU$mPvO*t609`!i(_{G@e_7Hej(|Jidu89NQnuqyUsp0!YWsHlgKJ(T_Pj zb}Ayup4!B167(%^)9Gw-*zyxX@RJ7~SH`?G3@eOcFxu1GAvn1&X3-z3f}SGEAXvL6 ztz&k29~FX{^ZnDG)EEcE%ot6qSeY1`Fzgc^YcxkVjaV=pEP1fAKqZZbA{hJ5-g;WF zV3Xm$nTKdYO71aYC@GJdAIX6x|JZ{L^2j!pIRnXr0)x!sk+XGM=a}l6ML%N5-%ptm zuo^1gt&J<9iZT6{4CyRPKFpWzXlQr9&R?vOoj3s+-q?133+Z`AwR=?AI3dYKuA!|#**iQW%Fk7e(jRtCRrkq5&ysy#B<9_WQz(Le8bN@T*Y7simgLdVSb~LdVW*K6ODa#v`1{=HTP;xtKaW-US9Ou%_lXd z-~MO6`4se3+)4%u{gAd0K*U4gPX9M$XXOX+t_h<2ynBX$3wT37hesJ=y}#8kQl1)u z1JGx?7<*4-JijnqKk0A4=Ivv==h4{(IvCo$ z!`8WRi!3kr>a2T+9{5vqdk^3APmYHdrv>Ff)#kg|pH5%)&YSM#s?qQouF*d5$ufyi zdACm(KHC~BS*Lo{$A~SV20YMv3!tU9y~$nYk#f&~Z0s2iarWc}Gz)}#t{pUsMXIV8 z6@+jWM|ecPw?U5zz~Fk}Eh!tGr`$9m(5+^>ZUAT(QsN7+un=z}y#82u)0`6@N+`kc z{DTN3pmZMkt4t$^TNzJ@2v_@SEG~)>u9DJ84nid@*q)jhQ%KkV6*GBFptJ3SG9pe7 zYr^ckJ`Zd}gtDZYgNCt)!(XpK-OpSGYGmC>BQErS3&&N1F)rh6jOh4Q#$p&vMsfRQ zk=&jw%e0xsc05j#Ip={~m#s<6aU+$K4#d&f)q?HX?)1Fzx~x?Bl`HD^8}A)K}u&kD5rR!BC?%q2h zGYfc`>2pKTgu(*kPcGULE)8cnj0xtzxlFDK$iXG4m{c2pAHc){k~mgzntuG8KIRHn z`1i)i$u7eaUn(08Sok0xLHtfDp(W!&wijs>-e>t#i05%QF1P{Q3VAmlS~r?pmjkC@ zX9s6jQHm8lX=mta1k(Wc$5GYPF;Zg>mU+AjU}q0gyo!tE8t`K;%fS?W-TDAHany>F zcX?XsGqDy5O+ioZ#lP0PMb1AvuWwz|+4p0uqIl+UZdktu23l<*lR9t{H zQj1*cMMnH8ryZp00ehfD#7*Y0*atJab{0B`Oyb zYP@S0h;z;EWdO?C5y+wJtQb${-q&fbUeGE#TA3(q7UHB=UM;8X88;Gh zcb(i!+p+I0a>h`*99T~eqk?IjoDaL`7k9t&ZWjB>vZa49P zetKbk5(9%DUGt+!Xe{)|EF{Q=ACb=HcUdzuzqDk<5+puwKrICD-#vTbJ_@gPL3k=J zu6B)O08AZ}p6yu@VOT*qW8a_85-*y?v{m;VCF0aXK(PZ9?L3i!&y{z5up}rVrDqO$ z7csm&n%}6`Eg416SIh99uqf~vykwR|Owj266Ze0W)(0$vD2YBnErXY=Q>?Xr;?l4Q zXb6GU1Q94?QWK!!@?Tg^pz zMljxkkha)(j@L#FB%=T*OeuD!5_R#;qQd2Hd@0lMyUO7A{j2TjzL^+Lp81YHM9i*9 zkEmkmBp2AsZSps%%ji3IUn@0DEQOvKg(kK_FN{LSvDsq4z@k_Xj=j}1NsB0K;M>?h zutH$6f^T63spBx72r^fAafECf5@=Ae_h{L4BFjMArVTA^IEI(;v+r;m56o5LgY-5P zDabY>C)M6nh2L?Q!VjzPk4(E9Wl>#VK*aL>CN8PU@1Fr-|oq~y!Gv|I_`~G zb~Df^_z&Qbu*{}Lx(kyghVj)*FCxdq9=j3bfUIFDOvHfltm}fcux!XS!T38*%}z(3 zvwARRHnh<8YK~UJYH(-Qiew4hWrrs1P7`0h06S-i5qruKg%?^r%@j@CR0I5;(rxMW zI?v-}ZzQ$M1o*YxIEjKF8^o(-Ala-xlva=pOWLt?=SlQ3kbCdx@GGMc>?_7&h8BUO z1zt|1d=ImxQii^P@E3vgkD+(YE@i1S5vbW359pG}zv9JRc?d{7`HM#=UW9(+@zN;X zXqEZI?1iR#dD%ea;&MdKBYGaw^VnrxaeSW9^OByI^qkOhLeC!?FXg1kmB>LmKTcbZtqEli&uq#$=!s^WLYjIjCyNC7Egs-rd_ud!<=m>{c3hAj~H&? z{DNHlyvqY?8L&-Yml*yO0U~)#++%L?6rx8w;-@?!l{a|=JN#K}UnpM`c=n)GDkSTcfeyr-r5)2+$ zN8OQSdyCm@h5C@`rLd?vnZ1<~VC}Y}xzS>5FxYnJRf5)|IDw{X?f@y>`ef7QQvms@b-I6-s@Q{_ zO7(JZdG+aT``~f?+sofS*P4HMwsm=V#rLf*LG4y5z$*L`{{T-`R2E?Wr-rc_5lvqX z*17$m5SvxnmaJKnx&Z9!{5(Qu#aegC)be|q}k_dl6ea#d52|MbVI zIMn8i;!3&d&hO${)ej~xi}<7+wzuIDGkugX8ym{456VuxvcV>T? zr7s7zca`o*WAuUC0Dnh0=4cOmCWzvkGK<*<#C=>WhVZ-QXIi2S8}j9 z4o}j)u7mN8GUH(tp*=YtuJKqMgYKJZk|h+^0J%n)P`2+qvR@B!l!)u}M!Z71puFo&vzhmw;zcgf4d~w)AX@*IUdNi_u|2qsP;3ZHx))D$~Ap zNck!b+D_*ED4B+tb~4H*S99cQV{AzoN+^a_TwcbmRSi}2Shw;!U8ad1QTOwJoaN|u zy4t4b440fxRZd*Frr4D+ z-*i*&%Npq(u7JEa`_gLjGC}&xf8@#Jv;cKyM@V1Q@{=V=RUfUf8SXM7V zC4uIDh)NWnt&zEbb6u|kBD00Ic+$%F0=X^YPO#j9Qs*5xSl zbQ6&&?`7-6VD@{u3^m-S6pUbAG$u6Vj9OJ;!Km@|d^HUmez9wqUifB#B`#{rU@Rz+ z?~U8G82pot>}7InYqs z^RK@i*YE}&fMaqXmlqnwIdQpNpV@iws!HsYO9yGV_lbE{1J$KE#^K<1;u0#LT!e!$ z-i0RaG`_PFJ)11x0kOqe0dhIxqF{e#MMg8%j83WNV3 zyfWZ-=`~n*N14I6Cf2zo*16W#foqCN)z3Mh8*MVUmT?y8C`|zt4iWQ?4uB2OnLo83 zItb0le&a2^-UtHluQz-E{6WT!S?7UBlU-uy(yR}G8n-jSVH@*dm{7E;9HcS4pj#ik zOjvYgNS0x+^24t;Dh$4DV5H$zdTaujk%Fp>K>fj`OTYfyjzF2g%idL+dh1oOiREQo zs3j*)n2rL-v5-Jcq(D=V%ozqDkiY6!P$LgBAVmd7Upi!j=R=Mg0sI<+7te3L;tWFQ zUr(?h^#8O5gUiqwEheL1ZZ)h+&Q?aj4Bv;#+pjk|1pey{4}t&h8lSC_17y$qqb8VT z#HIrYxmu{`OrwM>_6Qd_qfp zkTOIMN)o-)0VYBz>)$hTX7i6SVd!T0MmavyF!vaqxuYcwUNsb0^`|gej`l|>E%Ai^ zG)zK1)GCc+&F4-=CIN*k0T8N4*Qm+AlKYr~*eqlshy~}PRDEJWX&pS$K^j(~&*XmL zI*1=h7v}Hld}>yd7R}}*+k*= z6Vq3x9&a{WAS z7sIAw+cvw;I`)hud#U751}V8kai&=!U^;=2i*%$-;pg=09#qpYFsdra9*Tj$4 zRn>GDBQ+fc#(D z&$+dx2)EBHqVH&h6!0vWW;9_;aS3!pT5zH{QO#|hH1^}bap&>`(IiYRqJZs8SHvcC zRY^Ou&Cm4XKR7q&m_99pnri#$jw!Vb)kerf`3rXS$Ro`B%|6}6hhH1Xa^kYrZLm#s$W)%-L% zgbMI1Q9QdUta5ucJxPF>7Dca>Xnj`TsS1!(8bpH1^>tM@M#y$F085Is#R-7alwbILls-NG@-9~5IpUx-JCYwNZ zx+AQKukS?P#5^j-(9n3OPhL)TJE5smJa#7;o;sliZh#OrbZH1Zr78~fs#K5gk9y%* zb~Ikz{u1VgDvC}Q&!ZBZHcx#8l@Udmjbz4`?AXplI8+_VaH#Mf4hl-Y4~lxOR5j z;-z^XF5~d1JnWrV7}743*wj#+9C$X;baSL-U|A)(tm^OizdrFV%hdUZi!g zr@Al)zxicRkNQPFiAZI?Lce=EyP8 z(T?heTvW<-$5*M1!BZ}>BB8k`W~Nbmy&8|R33@Gpl#C=LvrbJ@{KY<>zGW(Ur{w$c zD^*;80-^qlHAl23Jkz0kLD?6^HiOrnFK%DnTKC`e9VW&bmIZyJEa=jZ_c?jNtjq=( zDT@Q1-s*dkQ+9g)Q>*E=+?vyR`LYX7@Gt&2?4F(eb^^cI1HL*s>b845c*P#@)%p2x zyAN;ZFTUuu5gPnUKl+`+<2L@L2Yl7*9N`Q6gFi2hI%n_`|G>|eO&8PczHIfN4F1c1 zygEDWvlsY;FONF#`=~>YXZT3fJFnrf^BNzI&klc~8!+IFe8vxFN58=<_!oabf2p@G zFZ%tnQ}{uD;l*L=^lb~e%Kp-ebGn(=rl? z{7Db^>J?xO|G?unN1fL384!v6#gCmX{_4`>TYP+rj|h*zVT;&S8#tkTLJu$7NB9hX z;ODDO`}nAbEFhlf#4D+5&cgfAH~) zjRE}TPxP{P*zKJ6@g;kLmuD~k-adp^>@U86e$ccyJMVKsizoJynCMI}(AhOiCzwk$;4ux%f&u$Qy)30-#$4%ZlP2YPcFMPoymFegfDT{!W;a9KY^o&pZaWe z_4)MbcW`##zx1O|NZ=p*3Eb81(nIU;7kq|4_!HqGP+&~t$_t?71rqXY3u?eW_z3F> ztON81e*TJ*9sZFC*XP21{-nQAP7AH|5a1alOC(_4DHG9vIA*fWa<4h5i!RJ<3>^=l zJTDP29m5k&IJ@1+F=1yV?vDm<%!{w*%e-&&B%fiYG9^DhPF+{o5VFE1` zKWM8!c$iMs6jS-X9dJMhOl9aL9;*w zc9z^+#tT4FrRVlao$km#Pu_cgCmlq*s6 z+AZR_DA+f#*9x31wwUu>Ym`2;`vDJY^@&s!7+D~GkwPM3BlA`-)D3ghku=O>?Ygy^ z#ojnPT+MRP(5Bvk0YkptvM zNd_w+^b3ZvJ*LG*YfD$T3RcWy>CNKB+?v|C+!$fooRQazkvz#ZWPTkC3Uie_HjW-} z=R~ng6?8Us7W{Q5Zl@W2Ftaf%bRuuL$alj+oX*CsIMCv_Rb!Hs3dUt2YUCCVZGLDq z$*t!47XI3lVnI5XJbWpT+gwUsT0JRlA@%HeYYi^R)S@F%WkVf(p7uFK*czTI<~k*k zFJPn${rCjj(^I_5voy*kg*AJK)~>cOr&Se<$pkgsCzoA1-HRERaWj!j65~(>3|HU3 zkoVEv8C$8i=O|(O19c^kOGS3n6; z`A`Gwh5l+8CAWC#8T2g~4iOq_N_;zCM(=@ZXdQF+1vGTBp1vL)o}KpkLlV8{6K{8i z!`EkLuZR3|uYGvYrR#3Howu!i=I(RCrmj}cbeye)YxjbE1a*xk8`wj+5x zTkPH}WCN)&k!hklzz8Y^q?U})4UK%YKo-h-NR8DfJLMymg&Ju7NV_P`#ezdha^0lj zc_V_CQRhpPYJ zQLC4%t#?(ae=pH_KOFK2%3+?z8hKGZ|Bd}&i^!ae!i0T^ZAO4S92Osw4*nj&OgMkzD#c&tv+$JxWUJC z1qX_2+Yx&vJQH0|Y)Tv`8A@zgL13nJPuGl3`*&i|z)~)g>%lx^3o&)Yp;C3XD$|=7 zgnrvPzGx4-?V$i9j?ft8uD$rBH^puQ|5(kT>=4W1c@>L{P(8Q6hkvZ1B_K88^_@Qm zfI`urs@zz+hI{CE`MNgsVXW0J-A8{NZvDkk$8$Lu!J6aE0(|l+)%)U8bC~y>PJN)j zYZ3^2+IKaF<(7G(_KS77(L?JsqkLhO<$&THS$3Y@=YLaAV$tbRnJi13l>l2ZJxoeb z2mlU45gx(1B0h{{!1`9^Dp~sG=XOf6KUBsWJ%Lv;tg`*Na?k`G`FtHutKPw7WdLvM zf2}!J+n3eqx4StKEH90VCc!M<<>4@qg-SovrkvQK4BEtZ`3eqK_jAvEDG?o-b2LW` zY|c+Pa)-0IeOP+eVVLLOTe}!i<#Hx#?@hbi|1!gsTKiJ#l>vDG6LuqP^6gj#=0DBB z42v&f{~7C_wVhoyOobuW>VD?xCg-DPj}$XMwK{21nzrXxB6Yq} zZO)a4w{5cmq@;msqPBsROI0^8buB`!*xpqq(>;w|CY8%tzDnu)OWXp`U(XV@jsN}4 zVS@IcHZeiWHH_~+={7f!3GA2K$(iNvs~XEz{h+MHtO(m8ec)a)FEyaY+D7p>uCJEU z>>J(++jqWLPV>i4t%Pa1mQz+~SgGnjy2siu@hZ#k{rp{FJ4Fp>we1aPRkG5O-5&N_ zYXt*S)n>%%DGx)N^Ipth&F1gJP&*@d0aKbR=h-7z;==HT9LuZ40uwfkrt^^lm{ahG zfw_)GuAt}o5T$#-#|eP+rgZ>XRpL4EC1IjwPSPx#SdsT+9%nnP~5)nL2y$cO7({$ojJW>a2SRCSm{BQLZ&h zKX-ckTW&RUin!j=m6stNpB=W2+jL_$%h24wiwNr&@b)2G9(pkM$(7=cy?a!;4)0MZ z`f!g*i})Uu;@}>YR+IZwx(~^3qvA^6n6+5A(G#;$nr_qGDS-F{FIc2f!*!*o*i)Gp zTW<$&aQ%0qV%(pa9Y)Nb-V^huHRt>Fm{X~0c23QgH)KkFI>w`ym#Zg@Cmx=sJQlx3 zcoy^M760Yq;Z!`_i@zEnl@!0mZg$QdMN0zS?>6`FxaM(l2mYS6FZ$iqakG)F(Cxf_ z(?=6_i8+4V%=hE=EBZVQ$Cj_1y`N5p0)$;Y9GLG3V$*y}KNCtc| zXY|THRO7PHNg8O8%99TJJfpu^>eqqvJUd8E0mQnQ&6Tf};RBXlZArj*`9ipMjPx~t zeVQiALoja1d+D}z{>R(-^K#W__>CR>6Z}a3{zN~<^kYmvo{WBif1fs}*bhH9;NPF< z$KH56W?TyY`t)i%+VkPxko^dM9OJ*^0Dr*$vh1`>rYTAUeh*vuF&yK+V-J7)jkhu; z@B}Lu6X3tGR>po7Fsi1#chRC7PRPOeZ1DSwtH&=se>eDj|7v@Gcao`r(|GX)s&&Sv zVHku#CflcR76TKgFT=&u^TSF(>otd8L|_{d-hYlI+8XfK{&J|1htkuB88Ym_LAAS2+y$fG>VT|4@$#iv?+#p8m^M1w+7d(JXCmO zboM*%eonK17)Z}U++?y*{P(pae|+Bo-n3aArnT9%%n&CYm>hIWY~u;8;QQrsg@&ac zeoV4cT*I-T2b)jz2krqNu&xJC#MX7TMI0OpfwBAhb&@Qam%Ep{^~byUQ-e2WOVez_ z!rmLxiJgy`n665a*{rzDnRil9=g+(L$0*641nZ|&naTOBeeP}Ev<|n-1hq9S!VEX( zT?69>;$MVn=V1lY++J)hL%u>Ux(sS@FKm(o&|xR=VlfFT-tse8nV*CApRdEu(TC4t z@AK@B`R7IaISxLrCZAW!&$rR%`s2aQ@T$^UdZW*8!qM_`|Jw6DpT3*VKljJ8Nwr!z z*y3f5y=3q4yu-(5@bqH4YSEr22c+@(zDH*v41~5dR5RYh=>QK2FSZCHQ?n&)F8C(LyhC^y{HjHH{mRXMua?RUdE3r zgZgD~1^;}wdR)DXw>SE2nR4i$;o$LccaoJO%wOSumX>ZJ+%q`r z_43J=JGnGcV4(ZAd(OAtJKsKazJ20W^J?+FL3u>RQS7VZID{As)F*=0eW}4$rE$Aoow{So~DXoWW&4t|0P0 z{W$*lDq9H+k}wI04*lz87+=q)!_;?n0m2KLnQGyR2l1o^1h`9vFl%A`T?OkHk=J;h z;Vh1z4UafX+ALfS3bkfIYZ^^*INH-M2RB^ectD&bNvKoE6O7!)L_izmBejt?9&=*{ z)opT7hV z?Y-MC1c6&MCJ5}f1q8ntBP}kjcL13)0ufwsp}q*Xwr&v#(i9&um+>4%s6)vZ6O?}I zqE9cn$M=pp1+2ax+!Slu&SQ9^`6_8fv-iL_!C&%EXJGv=i&NDhJZSV@hV(fE$m>7{ znB^t#ij7rDbi}%v7D>O1Y|V=<)SD_7RtR;<#S>;3HaC(G@wjgYA#IZwTKMc<@qvKfLj?u`C|g7zQeaI~vNe47LPnSIUu%QcsJ=b0ITQDXBYV<0;fEp5 zTm62!d&)gd2TfRpCgJ5SJdJJ^pC{4y^S>711pb+PUd$$+lW08t{2?4Is-NFSK{%(9 zH(26k@%`udWP%@W@LWceM~#;l&{YthU4$j~DAA}$e~djIk9lp@%ir7}>di+X6Jv?# z;As|VR1UnvYgPuo@7KVn-p52UKYm{ucsqYKc7EQz+`Za<{h6V5clix|Axze^+?RdXcWwhY#=qjV_88qRVoWofJn4kFV8Oe!Mo-~MtH!y?xWSsJO$HRmjV0v)>Fz3BDZN5gKLrO3axKAmm#o~pG4 z(EYXKLSPT3Ft4Hb{X1A*i(c2!ucJ^Gwz^)o&Q@QqX0PLJtHN!;^FF$_WooWb!}Dr< z*|b~J#Dgp9Yx#R)l|2jbA++}_R8x_+5NlJN-U5P&{_KZ`)b#H^%$bGw0eet-dCr0^ zUa8kFVmWK})Ej9he(-mF1w7fBgtH|7OMR6@(>0$_ke+%;^gg^0@0o~OchDvm*86CJ z4*Q{=0y|CnpH`}J4cm3~z7~Ql7WVw4$xIY41}uLL*Y?Urp-Qy?b{r-b$`DzPM6Jci zlUFitjMy52T5-$LvlzqTR>;UJqJfsHdmWyYj3HniRvy)~bXV(9>P%+yWr&9#z8-P_ z9Pe13#SsqF;Rd*dA1Tw{+i;0H!~GQ~QMSuLw3HemBCB$F`C$P6Iak}&U9jXYFJpMR z#0~a?=H+DtV_4v4wR+&z9Cv~zyyca#`?!xcg62aX4JPU3XO{yGf&t#`9t@t)zfb8> zViu>8xkJd$?VvbQmoJ-m2{vM9i*V_!nfdF7yW$cYw^}%5*@nS(^_I~Cw95dwEOxW9w%x;P zP{G1sC3h6{(sM6P$`)pmp=4ni>-A-$xED>|<(IRPq%{kcF!9}L$+2L){PLk7IHl+0 zJpMHty^q2V`7K+A)7o@&?gbmp%;@}jJ`3Hd67^exVJjtzr+ikfxL`ElRxLHo3s`!9 zh`&Uosm{@Q0E#n68`Au68J+b?lUz=yQlsORNLNNn8e=SS{CqWU`_RL@rg< z0VMHI1|E|mYX?Hg-ckdSO6s+E5@VM_lnJ7B0QGrV2Cy-+*A5j-h6hkW07?lFj5qr+ zt0CK@`003QIxac)c-E|F7GOY-NU|ri`GH5uKJ&ES-OoglcPkal-ir0QlKj4Q+Pt?S z;bAG@m z7{!6hyMUG)GjQ+$td=Xezg#HcBpg!cOH`7}3aiFfXlRrzy99xP=tf{9(n5t>vx0Tj zt_Hk2XUjLy&RdluN@Rz@rE7wj(IH=V~749Try zOu96rzY*6Gae^33J{qL=1eqE1cG0|ZwmH!4EKr})SSmo7#~*5PbMkVxav9VwgS0A) z*Wc<5I%c3&6jkXSNAw;TX_8h|_gbmxTVEKcb_h5x3MWhISrSjy)^ow-%dwohvw6nVfnL-MWPH_-46 zxxmYAhw^5Fh?HPG&yNoBVWRI0P^ESYC5D@#RxYwJi_*U(v@tJe&_JhL)F4)R@UTI` zuw3E@|it{@iHSG$ko5)7G@I2JO$6A#lcfsC^oKm_{?} zPQe$9MmAK-K;UcAV-|imhA#EzFPAnMmToWCY-7GT>AEj<7KDjI&cj*>9OUh%db zije$PuELI4E52+ z%5Fe}uF?a=vEsuR&jqFhu9xAMU3BQpqH!3rn-CZCI0@M`iSg1`E;iKLK0WIXTgS&| zzqaYJLf!*Jp>=+K-0l;Am#to#9@-}_+eh@&dDVrI^myDk{e>P*TKzZdq1|uM!`aKf zw+|VN-eI?M&L1&3E_-_Wn*R3NC+Ekoy5yp1xgo>6$$G2YsEC+N!Pi=b%nmye;w0Y0 z!P}LbXL7lDQP;0G@Ic47fQ3zDn~SVGZYQs`?Y^Z=am^In@Bm9A?v6^>uDLw`)&_ov$+cE(HZ#x@=`abK{wteU4}Wdw2u_O&)=Y zD`Cy~6nnE^H2>Ii-Mhkc==UUt8&OZea^)_hBC2HWoy#UcDAlh|sIoL&Jdn5R$1(N{ z@24H{i#nL$W4O6k{(3HS3rd#3JdqVCb%7e@?Y~^_8!w(@H zZ*)0x7LVXbn0VcAj7LW|8OJnS(Q=ka1i1^nw1mfS{dNR%b)`FBX7q^9F0zw%g}9_R z`)SUFN4pa|YX9VKP$+YY<-^b&FWv>Re{%7Zzz&{0e(yHjB_l762OtZ*YF23WHwce? zXSJL@CtUAx#|jp6oGo~V5okBkA&|c|_=VRJNyn%2Jo{0ME5B<+b$=ja&Rle9wV66q zI7xEmJ@kTR8^gaMFIv()EZE5I@AKJi#LtCPRd1ELf;^HE1dXF@ylDc>C3z!Jrfcl_ zpc*Ufv(l63eK@N>s_I@J?&~uWtlF16Lz_{twGTy3^r7LDTNlc%4O5O!s}KX@REfP| zW3sEQS=&>#2%?zVT7K1RBd--HIsB^KfYTj;*7i&B$b3dB554kiY@?!8%W_i9fdz-X zsPRjwikM1gE&cgUV?5ze^w%1>LeTkkN~K46Y}a!tV%;S%1_HJ#K7bdx2E z<-HV63+9|4R}xDgOSy!c4^eW>N~)Ks$#kMXoaaQR9D7+|7^LH)0(q!Nk{mmar)c9D z$8$8`NBwIUIxf>Z$tyX`!1NuU$&I&2Z%AD%=b#oR5ng)sD5VH#w2T$h3ssmcx#j{& z`}r#Mk|x9HV=JiKJyWCtU_K2?#$Z*q9TjOom66mmFnpT(h}WH8;+o)^JBaeNCbqMJ zJ1l{ve)&6!0^05>W871|ENd}I=o)uW>Be_0Hy4CR@WF0A^C%7SR$)oH4-GFskbW{W zBC2JtPYNE^Md25@x7gt3a90T#QMaGQ92Gba@8Ng{i{ z^DkZ@4^-JJSBj|rCHJjJJnywl<(b<>BV}B2ZeO{d#+|DIi=BI%8!V%d%bW~y7gvZ0 zX*iBiyBk$CHFP5n%Q#<86<(HfeIdUGt%PG*=`0E;A~m61`0ZrgseU5k9#n2w)iDyD5#j}9)T`v#?@YS* zN^v{gUw8uBE(I+oEKmUFK$YJVOQ*=E$@23unSS$1lRFeOt_kCvX-DS-&rq0}@%RVaC&C!c{Uax5q_+hWs%raStYc)-j zN?xf+)kaIeG;%j&fq(}M@&+|X7&}Z; z=KKqOMB@l-3XJ5=^}TAhG)Hm!W|7>UEq|549fjE!%rH3f5(`7<#D+0#L0Mj@&^DN!2jQ+|G#lgs6O>H9^ipTg5nGQ-*A*2jxV@n zx%|LfEbp~${Qqu5?vZ)1)EFe0E$#m|9BYQ-A@e+`gTyQqP3hvV&`3O-uZq%8d1)EE zwpNtVE*DLU94J33Y0iG;Qa+B}g*>~YzDw<~`%}0L%`5RkcoLeI?GYUlLv=Sd7Fa1! zh&?Nlv76+ViWVzrVxOtUE=+J;TP>9onQe-Z!_vG^Y@zg#)71_8f%DAq_k%Rtjj~x` z))#LOTxo8?bYnIfP?^$|cP)pozl67iWTo$gM8y&|lHz-vpj+xd(OudS=2p=_<&f3J zVJXp4I*WZ5PocJWr(d73?_LNKNisW}t zlsHJAHxyz@p9BEU>`(e3+YNsjTCWTB_?Lpgq3;LcDHm^@?o>2`p?ICekH;Jo1}A#5 zR6e%6ggoM|p5V@jOx$>$EB#agLSzG(_%b;FTR^10;{(O}t4c#sDniRgDM)L4<46c@ z^RQ_YNIX0MeI$X~aL z2(QXHk+FaPtHc*)$O1b-CAG)J)Fw}|BDfLVFpUNm(fZ2RUekzN!-!1wul1!=jK_Fz zeTAcPO+&#pcL(?rx7YBax}UDH5H%9;6})sqEIXTMDqu^B*^G5FPtfGX@Mf1}1E`ka z0eJTn7yzOEcaMHLz383Cp1 zbh5TY*Cqa5O*t{@t4Bo{_81A6LyC>M;mvHP6dt4pguX}Udn)>Di3JIfHf2tvfS%t&3)u1sn8rTIt>^vqIc~H@wu_(2TJllKU-Z#o zcOH;z5h(d(SFSxR`o_0meb_pD(;jx){fqAD@NMguv=tear}WPAufseUt+NYWJ?s}T zM;e%4ghxhw^eWnn9m&{rj~~zx7x$_?&g1tr0%;xk$}t1MPYWc-|9x$$%kI{Zmm1v>ax z%fv|FRU#eGs^td9a%1 zXmV1&a{j8FV`?}r;QeFL^gftH8LQM!pSnU?gMiWPzm`Ls&haF2oF1V^s$hIM*GNZfO z&wg4kfMPqjADI<_Lk6lLO~IY#$eAz;cku0t=UnDv3;5nRif&HTnB4+@BA;R2bIUSuQjcb@Hl8(QQ2<{Z{n2RPSFQQ z5T+`G#?@e&t%i;6VWZETP;HSuPU+(mKaN#kK)#AMxF-7*s5Y3=6YXdscGS#-f9D?& zAKcrN-{oSF78JeX;1q34?c_osS6HJykI^W0XqOWors-WgIcQcEuw2I1(HL~93Kc*= zJE(~R;GG@#h30ir>BSXrpn@F$fpSm+3JQX94p^8hzq(l?p_!|A83rr;+_lP^89u|A z#SF$Z)_ag3PndRBMFNpFv6r_@ABFED&-9L4G`#o^kuJnS z)|}p&ZANjSCW-ed%p%HW!KTS`rfThFz_4;GLrH0PTTy)KomMh>6}%27boJW*gv)t8 zIF1it_5viuu0_aC_8PBH6}CV@UZUl~^pY|)7p%5`Evf(o>+n_n`0VvwqpcgGIG~k< zw~Rw*%u6cnUWlhB-XPa>mAm@ zIHd2$;O~mq&rp%J40yWN?GdM-)6tCXNUt3DYF#qMsW?JRiv+Ou+bf(FUhbsGP)PVe z15TZNrQZteQlbSmC%0hE6OR$I6=c;Ki z*Q3YmFy^@-BNr72Ls69pMfm;|Tlko|0W31M?Y6sJLL*MXg@otOVFcXb7=_NCpbDh{ z=_371{^(9}M_1@QV+!a%F&DBW`h|Ffc3nDtCB)s`HyW1+_vSWQS=psR)wzwq_}4s| z+4YRfNGEfVJ&bB;M<%F1QC!_uoILiqA{0gYWHHHNP6cM=6}cvazkrs6jI5_zLK#zq zc#|Q7p?pHr-Klz7Xkbzp!L~*Wr$RU*U<^TG5yB-m4YSgD1KF%e=7MlCf>9hx_GP5l z+ME`a&Ec;{i-ti9|JsWR>{X*6o+P6dN7GP?JITUSix#*F?mdl#yCA&?qx71Hw8Ux@ zD58#t+%z;6OC_ypo|=;CeyYNf>U#!6Il!UXKE=_NRYt@>hc@+7rHsK^1;Q#=&KJL4 zM+F;xUo3rvv||$BffSi7S_Zeu>oa0YaYMZ(@!o}BnLeAYPNnoXU5mR@RG0$YppX!3 z11WF1fjMAun4`Rf?g2OI07CO>i>%Es)chIp6;M#8*hD08jP-Zpev0B z57!BVEwlr6k}dks?l}yU)spZ8=(vf9VTvh0eF4KVsh@=AseT2a?ua29Y-E5i7P>+p zgcIKqQ@?z%d^ClKf9u~z>#6ZfpW@(g`PFo<+}e>+iY=SU)U;_WsxE{~%4Mj!ZVG8I zG4+^9fkZH*qBxgn=CkKRU>nI)g-GACe|fO&m9S)=qu#uYocC8PdN<#)H5WTSb57q9 z#e!zIGQp(>{eU7^_Lw^%e<1T5&FRo_sY$7_gW?XDmLHQd1?-rQmy|_@Pew*@dqr!h z=liRh)zl2Y++Z%0m;?D-FXSAOOjYTN1{+rNG8>!g9M{5AGcr~cO+QSf^{8eg0~e`9 zK5+Y)zreN#sw`ugBf{w`7Pf3ShoSEj&j)pJ&Sn>9^JG2od<*fyEb;t8;spi7(_&+@ zfJ23f89PyWflb-z@Ph(EY>qThm1p{GZ2VcwKUF|7EIg%IlLrEG@Pz{->+xQ*VPY(! zzMYqXj99%{EW{<@wC zAu0++$hXWjbd>}&-+kwdQ#H$GH*Z-h$|_P}W8sUco@O{t%qbAgK;v5G9)8NKo}k-R z)YW-4W81Et33wXaMCJ3vDS>VjvxWo50ym#4&a$=4ndf1loiK!wujdJMGE|)yR=@l` zEdQ)lGmBT*jkYf!kCqQBPhOF&v9lu=8mkWwMU1@eqCm?hl|5H<-m4S3K;%TKNPnp= zdi-jd(|k=stf-G$;Uj)al)RHf0BoY!7_v|3CtO<-tU<}F@l;l#U{zYo*O zX{Y4Wdf$s-;Be<7?L*fL*xd8V7bdX)W$(mQ zwQj%2@0v$w#UXFn2BTOWzrrP5&Rf5Wo-QX z)p=s>@bJK>i&^+SoQZobF`86Bb+rXoOOGSdZKBssgB)Sjf+Te%4T38rLViGA-rN*n z6l_i~ydY@dfo#4CT1c$l<&jC#s_9P(4Xwka!^-ANRfZ4G{?1kl%m+kMWLVMHe~<4C zP~`0X2&j~fu^6UNdTPg0Y)#~hL0Wn+`ajgYdtVzlvM~IAK1Ji*_qTR14&*ioY$lHZ zllTnS9GgsL4zT|9&Cn;t?RA?FHk0rEs7m)+cbjB(pLgb*9jum0rBbO>Dpi#(FHI#N ztbx9nnY0>tl}Z#*cCcwxb;pxW(nDsMdy3kgY%iq2M2=e5U(37lh0tq9{2G+!i%28* zo>($qea!A_Zh5^5UDFqK%)ML$?C@$_glxRgauA#CcGNvV zw}z=GvMX{Lo4Z$cZ6rM3NTSm{y;O6Lpna1WDF~u?W)0b2-<254LcH|MMHACRRa4~1 ztg3<87UsEn^2bVXTDo<3_X&&j>E2P^H`S8AcOgS4AA5dHE{*WAtzrn#eA)muH`@-J zf5yOQb!2?KIasX?IV^}WUA?TV#x}hj%f>=a^MVoyTe#>CodQU|)-dFcyymYjeVVHL z+T6r9?u1<;>0~RxC9t$PF{a-RBK2)s+##u-_(v^#y6>| z@muBAp4D||_+M05Sz82yHs(P53*R!tbyvm34(YA*x{#+D(=WwW8Q^)hL zV*o$%mY<9C@WAcL+2$+lA<%a!p;ts*mQ95bu&Bv8y6k8|vWFT6gbQUNz6;ARK>1zKC1tJNS&L&l3HtEdnGH=k~j1%n*z>QFc%5S|Y?GNxP&1 zvRW$hWRw~>_%>9!ThjHUOfG3Oyqljc^F_K`-Lsr)?iUNjsmm8iRfAp9gzi2LBZ31w zTO?(6WFB9ukfTBO8w|h2mxe>*MGh=~OX`XD97#VPvV^`P5Os>%h#&#}q&qG8D7y={ zb&VT96XjS}1(Z;xjJhaKee|N+Z=EjOYJ&QDtd&7o6RA{9P)*}(AGbDe(pj@)>(()& z$DDs3anI4A{%#U&*Q#As8FyPKkBwd8d zEGcmoaSt+a=fW~XE#26Og4$&M^XpkYmrReZOMc~GVri!klBUHCM*<85H5|qZkfb7S zrIWh)`^b(pNwq!O7sb^=e_{zStt4Fi1R<2!{HpLQjEc@}kuJMe>3r28>oY@M`&wFo z%-rcREmpagD_w1GSJ@0M=i}=SysX)va2i!8ksi;M=nMJ%T{1uo`F2B{Rwv_ruMV2M zh$(8jeg0#n{!LU<&aLTu1HPL(5V*1+*y8h`o$oPuEL;6+E! ztWlG3LY=Dh1`AT19?KWFCB50h*z6lrO0!)D9X)*)pBxUmAEUIp4W7kBw-P!`Q`G zViJnHlHvK&%a-`{giYebljiw9E{eU&&DIk_iZq6JA={x#>rT-n8jTurtCGnfcV&v~ zaxOBqgOK5*aQQyFx-LuohF)BJuY$K% zV;a5605CW8D)wj^C%c;LkwEAc_#LPq8YkK2AWS8@+^2yjY-e+i!Jwh3#G zE&L(0tleMkKUdV6hNf5HF-BFhVxE+2h)T_qFeazXyl`Y?Uzb_}R6UX%XY<=H-`^{O zsn_F2B4_fu^(M;MCj(Tk*MsY2ev=Nz-{0-QayYKj=MPkLsD1*1HK^h_MwDiYU*$dF z^lrZ09i07vQlb?!&$qW;cR&%Ku$wec8I=OaHSrd=T%vq5wmaJm@yKfF(o^~*eNlPz z2MCxyU3@Ho9 z#Q#PIJ*gbEqh}z*PAxjHy+-MtmB6Tp_SFLIt9jA-W3OWTHTvQ_O_g)P8-n=2qtGFl zhL^8i{_*A2%gM{)%j-_QPMWV8*Vn_(x@%Y0@Z_>xdV0L_; zdx!7JE4=F+{4xxb_hhUZAA9@1^v_CxoDBE-$F*t>PkWDSGrXRA%VVQXyfitcht8* zQ(#v0BweM;8$zyAwr4p=qA7uHIitCNqj@KkhiGG0mJm*lyJttk(TNS)M$0i&POa`i z>7MhkKR6`3S6b(|Klt!lX^r1@b}DwZ!_lyRSX!rl`hGYl-?96rT@MUStg5XM$l>3& z7%jXNC?UL`fePM_oCMwqZ2TqPyNC8#!Rf6ahEJS8<8^d#Tbv2zc_0QHKqVI9K;)2C z$LUoV-{aY}LS$7Oplg`}q`K}}w0x;NkRG)8t}W8kF*=Drc<%=Yr;UwJh;gCP^J_bZ zDdT5hlv?CeMY?qhaVilWNCs%^AOeihCFz84d0=-OK>cH(t%Pym^*|I@`|1NaGjKT& z=za$Uuyu{jL)X~B)hzr~hDnt1AXBQb33u^B4{0+2V`yYqwBD%F-FzIIqaPy?d}J!{ zob^>KU02$ku{VX^1|Ku5k;u9JSesFLm3|qe#qDgxn#(JB@NtWn{ib1E#A^otXyWeY zFpn`V@FY)CjNrh8zZ=Z6E((4Qlt*8v^@JY2fa2PlV^!#{BYlj6p1cHfsp`fIJXwCe z*fotX-1NaGzyS*m2qq{vXTW{hMRL)R_i3eI`WBFjsQGpmZq5H#er}!b2A2;&jw+xg zWU8VQ1kuo@gKqz3n1)@P9s-%AHH#JRe*5qK$^-?m~(`Vt~ zXsj|^HSJhZ1_R3B@PLqTa7Ipchh%a6{KhSH^v+!9x{$HJXuYksM0~Q`kg?`r&lcBj z+4InigYkF=lOR)X=a9}O9pGCknIXG}Z%%hG8t+9*U7li%C24ef1#f-5>kr;ddV}u% zaZjiShrRs|@3e|UO*rUH#>d0c)88lKv+lt!+M$qE!p#^x@co&g#S@bX33==Q%?L;| z7y!YZLf(kPg^0_fuu;X8&BlvoFFMcY{U?1SnTGL*j#O0XlM~nNVAc*6T;3-5Xo&HR zIuV3T@xT^D17)*x5Zwrv!eYy+LJc4@xa{XW<$Bt?Gjh$Hxs-LlH@Kg&%98J@G_iBp^97;+_>p0^RfE zQt>$vArQf4&;Ye(kA2WHLZ*<)AQU-i742@?GOINnKYkp5fBzI=l3xNS&&kH}@bZ`~ z!_OtAZ>lsd=IQ~3(mzSlMXzKIG~yUlrtLuF_=S3S*^4;xVQa72sP2?k3{#aVN}hPg zl&imtp?nV_!~q`$P2WKIo_ZVO2T|VNCl~) zbm#0)>ryg~)v4%KpylmY>(bMy)-8>Wadyh;DaTu9B}rr8$7RaBtY>+?2tdDyS80OW zX&_gEApCPh<0%}CWRG86FtulI?f2O9;rSNt?9ww>wR>1NBH8t|{By<^IRsiFFqD~B zPGt2|tYu|Nw|v!qa}w1k@e(=Kv*Gz5sK4aj{4WbSM^nn)mM)isOj}42t2_jwTL_t^ z$}ad5eYfD$=n^2BvlbI?ws51Hi|<_uBTZ+!B5Z;24og)8;WePV(BZiIq_t=u7M%bY zlq2_|bEHGW20@10LXuoI+@tAziPMD@!Qu9UbGGXi?^ic7D<>H?xF%mZ<8YcnmCo(_ zZVAbhJ#;l7y77?$-htUXU*3eX>|ZJBQ9?v1*~^%&g<*@oX6fBHzg@=ZhvjV2j5}Nf z(e(_+Kv;qq#~1k3E8=jGf>V0B{7mHTAiV>H225Pz1rfeQvvI=o9-OMU!_**{r;9m3 zW)~%Zt7AmG*$BzJe!V6#b2n)RG~?`UV?r3a@ePED7>E-{O&l-g$DoEW6yYm-!56W- znD5hzO!gKkl`U}xe?gV4pM&#so?JrJ{~FU;WcJ{}Ko`Ng!RUR zh4{JID8hNRBC93&Oi(VCF{kw-B{oZg${Xl0O|l*t=ye)@N)xg`m<6)H7lKJ+c&v-+ zA-~M?yZKo@4p&(*y+0!wI6(^C&b^odf?EX=H7H0QH)*h#-4?<7v$NAD@IT|=!{`_m zjaqeAu$VRqCWf?AyI+1dCQu72B793L?%%_bYc}riKBY6uV~l6+z%rFH>QfXMEyan5 zNW3|mh8iE{pMYNU5Y(V&Bf1cG@iEu%bC}KG1+<28hKj@!#d?)*+8L$Ia~jd;CMjCc zEnHplgf;1Jyq(ZtYRglcHUNZ$pL|l|o7Nvj?+K|zdxKwd@rzCu{5}Ku z4V3VF5=p3Sj8L^f-lH}KF{~#4`;C9c@WSLPPh4{txd7wy2AdoZ7vuyjmCMad<%vUr zkx`R07Y2QUg<_NP8nR=2f!QHhWb}vEa-<%RBa0vdB6B_~)SfiUaVQPbiS*OIQ@@p2 z93dYB$d}wZ9ngK`}LpBcHjjieu{P;-0#3TW(OH@t_D;{H^Z1Gpg_DH3KSbrXQU~GUssS$yhy)D)ol?P(gNoJtAMf5E|WD^CfVq>K;|6U4D zUeRH`3*9Htv50)57iL$#0T{$uo%I`v9naB!i`{FwfysLB)7c_jGGN{%dw!_}B}b)0 zXCSMre45@P-W{NJp-6qMHdeSh&X)1*jKC09A-PmEvw;ZedyXkA+YQ~Fp93;~McI(uoS$G}Yvo$qs z)#@_Jb4Zco8^&sRo8lm*@c4VZQHTULHq7SKS~nUaO!4A=3LTzL=a*Ieu@s$lKYZR4 zQ?mH$Ilj2AJ`j(iRkH0o-$s5U%RuEB#z~T{;!PFPK*xEmrEYHe6@qh3I7EmL7m>6Y zyWi-GAF$zaOP^*NgxxPL*+MZ1y|v+a?=9@DuaJ{IN{f8<*?HBfG?*fD@Vb*gyI6HH zl1JOKV2T@Q*BRegk#A^Da00~=z0s&y5xnh3BzR-0jGN^L&1PliwDXwu6s{jQafD(3hB3X#obKU$Y`}KQk`gU=VjJ0bZ?~Pe{+o zh0BzdPW4iH4Rb!nMWB=~Y57vGy`rV7OPht4xARqYlY%*=1W7e@3Fl7gl9CmqlY4po z7N^l$W`F~m^WCrX?JQvJxmTUpjt`IvcMgw!lX)i9bU8stCj zU8Gc|H`58BPOIvY!Y=Let5F)~OY`oLUQmNQL`fk9=EIfo)$C3H)bgSJ^A@xgdTM8x z?W`>p%R);0XZg4E%d0nZ^errN@-r?AQ*TcB*z*W=jX-sRaL=RLq9aOM7 zzB=n-r!Vw!EDh1(=wbgBGP>DN=n>WN7?jbnlNIz2vP<>mU}#Oi`?qlr&gc0mxFw3K zvqN%zyUuS{0p4zd7VHFm&^_%Q^v`~0ioQr0t7S1X8xb1y*?#O9mo)}feInf?{Z$mF z8>5m(wQ>OQBhN?d+LKrnEitEe|CY7~e3P3$6xp9A>6ZzApt}?WNpaDPJ%ugO#DTZR zY&J2pbMYobga9X)|2okXh!%4P6AzCvP`FLKc~g!VyllT`u)6HaIYX3AqIdrU*!=8W zV%xfb#YI71FZHr^vN4gb)a9YHvzBwdws!Vx3ajrb_%UO7(H$J7n>JNc#r=YkFGC939rWk0@vQFsqwS2}4?mn$LBmP}-pQQ(#+58VYY|}2N`ZBckEF; zPL2ul9K+f7ykv2-eVtKmFZqnD>Hp4{&0hgH$p4ixh5tJYvHa_({PVbEY=q30Wil#d zKA8Bs5Y`lzVL~>e4p67Q#-(~`jn3)QQPzV+dxkl)oLRuq7aCrewUIcFsE|i%qo26m z#vsdunbf^0GY~|hH|SVykgh{P{UWjU%r*T=e&vvZ9eC>kei#4sg>4WD{5xYnCUlvcRdoQ|uUmwch9? zoQGONEjhRbdzN3F<)_OWT&0#SBLp^K4rE}I&S$B74q7iqTg7-4-Yj^8x9>Z(RlBO( zgv(E7q#8QV8G+EQIy^bJTJNU#xXgfA>8MUfbrY1Mil0WBeWltaIrms2bx`DR&h+Yv zb!$Y<3EG!y^KaP^T%Jb6!(rFDI^Q;qE&MtZALeq|c{b!Ir6mV$AOdAfIb5L3^Z6DW zAOdQnB!{ikwZbjrvm(F?>rSKP+Bmc`i9ok{_UJnUeySUnf(GSFE(QIQU=Z9i&|9O~ zQ)S`CMkM%FechZogBZR!&O^J!y{CBCEazW#Agu%LfE{f;1`2udm9N$*hvBbU-e3K5 zW$z_M=O3|p48!&MYk}iO=<#Q-g=2wcjYUvt{4b%NP8Jt4i-SZRJbKe9Jc#l+^&n(= zczPCOh30_B$Xox7YMNI9mPA(}E3`2nX!j{b1Gd^+E!ZcUR5HVd#*@=9BZtC~!esC) z**p)hYv9O^cE4Yua;T4nKv7tFpI^SrP|K&2aDzjZYt{-QEr)k2`JDQ4e|#?< z%q&t5k-Km?H*B0g3=?61sfS87pXPrG9@NfL4+*01PqROV9NeH(50Pm$|8w|*+O6s% z;fX}~0a%RIL8JI{RxLNg)k9?Fl%x;Z4TM(IY{|E^G_hafaH!U=WsA|z-pvO2jbV79 z;seo?K{@pm7tIy|W7&(8NSz4X#ZGUdSyo(6#EUhNJRdYwpHS7kR5!A~dogYsiFT%; zPmwAP<-%!Fe;UOn1QcXFhc^9`<)nf@R<8?In@IINUlX~4lg#^st-Ri=-Vez(jVCHk zq=0yOjUAGjE$bm~(*)#n>f`1isw5U}&p%!XbzQ9JvuX31a9@^TNNAP)+6CLbe)M4A zx)5=!4fDp-Iz5?Ga9oR+FfJ`-ci`yjN2wwXuNB*qQ=_zudlj!=cn4e#8;=n+=TXjl ziT&F_hdQIHl%x+rLQFa}y1Oe;n>WMNy#we~`8nb!Umkc;RB7{LzgTF6Fxitrb_Axe zHXGQ%E=yveWJU;@v`9qZLfQWbWRil2Mktfw77G=s9GqN&K2Hz#(hMK4frzGTmtU6wW%auqd%^Y;AA$M4eP2caI=4w_ASK9)8d!KUv);3rH z-}0L_3X_TS9I8YxMxR_;j+@kD=HD# z^-j$;!t!yJepv-poN-!>0wK}{Jp@pJ zv2Hr^`1sGsWtIqV^>S6wi^HAS>Z?vaC|^eAO7{sIs|)70TCxgY&4eos`exzULiyXr zP>~)-saJT@e)`w}{_HM4%&sz)#&|*jfYapf=nEZe1y6g=T6zwlY5*tsd<9Qmp+QylDF1x1HcxeuS#FmhD^%W8 zUjic%U>IvLu97 zbcu06Ky?3IyvTOWlfHg@7;?K9kU%~zk z-4<5AiqdHG8tP$;O()vABIty`I2-QW6bPDo+Cx(M$@qTtr0iLD0$*Jy;r*W)Qc2&A zYi$yqxgp!ST78XTgH~QvIK1s() zm@3gUIHaV07=SPgI{O=(;C#@#AIGAoUjK;p6Jh# zJaqv7c*zrex8$)QxFruymtwCRzm&kdQP%oZd%b`~r6o$BdH3Eb83T98-#iRR?NVP( zI?#IAyz20wSBv@H|g1?MHGQr!_*R(%nov=>%-tCd=b89F@L zi4IOTau_}-N>%q2f%bxdNtAN$ZnxVsRexY_rW>@lyWvJ+)vep>&<#jW2b9D+~ zgQdHyY}$k=~*bcewHAb#<85vlzBVmm4Iz z|1e^8p{~b;rVdcn)CJY$4O0gsv~$68`IFRv2kjJiz{YoJlq@rvgy}2XJ&+;ne*H$& zlAAoaouz+;6mpP!?XRNdUs<(@c2DeF3pJsXF4>weJW`}iYnm9R;LU0BwmJTs==rtTor-qtO<1=fV-30$Xl)lWU)HtP2IoN7|~jEU?DSHvMYuc^>LpK znMgLcDR!{d5q2Z{+AGStJTHP&R4gHa68?cnM6!J>v~4(9Bk zV3>)T!`XfC(73VsyCDg)HHY*+m*>KnOx5M#oBByPDB!2Sc0r?hj!@zar)~P}=XC{; zW;2824lKG0l>+wc;{%{-hBE~$?CumQFG0P8r+jd%Pw)uPmXAaEuPYg(C~37+Wp3RS zO!s{oS3Ee)W`2Arx-|yb^mRdX#6O23y8ihvqO7?)AP?)C1KXxp`n+`{zOqB|%oZ#K z--9+;X4z4mK3E@;9VX1)%~%r-q#@Y-{?1v9@`G{kZ=todA6|JaRuRu!xELmsVZQ5+ zNJyv$O-QKl*_r@`M@J9s8`7u9zW=^%b9o8z@Rjl4&drVC0l1Uy!Q%W-42%u$Vfe4V z7-_e#fIx+-Zp_l6e%&7pKaP8&-9|)TFCzN;!EwJgINNQ+vy3z*1&5>luTX`8AO)wr z5xn%>9USy_8;f*_rmJ}jPj?VlSQji|q^@(5VSU#_aO(_>#u zqPE-BJNP5;8Y-N*v8o|BZFY{VeL!JX7W^Z#vb|q`D>k#PWM)HIGLN2?hOW4gAIg#NrgbfcFDe~VlXI4cB?42e3 zE3(K_#%mKQG|wU9yj7p@)GA$)nm~*!E$~v*M`a?nIHmm~>hg!ZSoe;dpYM9~8d!ruCVl&dGo+P?U$EV328@UCUjF$fX1 zUEL!8y>S>7<|JSG0VByea^684wX3XBRR-0O#5Y3Up z&I%$M)8&4e&PVAL{92O1H|Z;%F0L>dp54&b;U|ELc5e zXotPULRsL;BFd4xyMUAupLT4Hvaq(;9ml6ts( zqdV_^-=@p^KA%RF^n@Wg|J1$$DbA~ApYuA+Tnu|Y<#=A+Ogys8znDurtNu-_ELdZv zc}M8mje7r-i0vAP%p8_J_V%g9%3YL{Zxzl=uA0hm!&TEfcr@gTOfF|gwUzQoo)MJx z5zv8d(Y%91x@mIOubO0!tTJX;fWY%PjVce9aE!JE0k!5%fhIy)kdc4RvjmgR8m}L5 z=Nco4{&N@gO7_@NsSr->BIBMWix*K`7@;dXpmdK~;X}$Fs)<38^Z4c7fiqp$F^0-bq z@@(T@9@g=qJnqFqGp2~z?|HM04Lbon)uxTOFQ7I9kq;}Dcc?zxJzJTnhOE(4e@MyP z?L5J0E}E##n80$8hxyc?du#DATj6oS65I6#;PPIsKYXuiWeozXbC|CpmdZ@-bFPQ9 zDs9(U9o}QIs~-meIh^1B@D0X> z%RC>~g37L=lzq!jR38kuQ}Y-+Fx+C0-toPv&K5^^YufZIy;Adq5A=%|cx{YdVM|RhpJ~OtN|s3<*>|NN%QE zV?!})sGJ^f+6fb)G!tQWL;h1NX4#6m_cQgl4S&;vv0~6-&S-dP&=BV)GSxIkqGB1- zkEYHoJQP)iX$Mz)>LLps&sRblE|n{SmJCn~iBdxcu~UA(FEPoE1>>9N*bniqMi zH-ETBLz77z8bb~7-Z)|Y4bxm~{vI$m+t&-MLVTE6uYkqwzANoz-a9LM%J%bo=ANS9S16)hP_-)rQNQt67fAE<nlZpOEZMZR36 zNg(wpva)=48BYC6k@zBSf%@ckJuU7$zQkQxSx~mrT+?k%s5-6g633XUqcpE9pC9 z0Wvo0(Vxsn;oo+Qv6KWym0wE<;&R(?<6?!0A<(g!&jpVT1cTP;oxlY%V79%Ao5MgdVDB7kp<8C z);oMx@^yIH8+9F@JyTFwkrt9}$xW$YQ5lQ9jru*iMZf2* zj`LwPfKqQ0xd7_1$=jN<$vmWHVN@uUnO_T}dC$nEmVarsyqIN0e{oI3`f%A_Q_`C>i3m;F#6 z^xkWuY9{ldobAPS@?%KFz?HDQPJ$9@B`MMOZnAm$Yq~5l`kuSP|D#;^xw0PFmC;PI zELP-9)%&t|x6E$|W>1(LyLi$(-`;xNx!i0$5q`BLJv(<*O^o|LbF*at4$pTkMJBxP{OP4?@>Q-+ONPbds0F%Ng1(!sOwwKyn+jpUuQ2p4?e%8J zdYDg5dR7m(|D;?tV0FGiIwqj}ZUq8Lvl3erRx_su0!R4|C9R6TFSf+}W3WVH>88Uf z`O)5n$SU;?F(#+(aLJ(;K7M0(ii|~3zLK@r8BHrA$n@q{5^q0BdNU@>C%xa!dIKcQ z+o~Fq{&>xQdlD)#f zK@}Gh;>mEoe+;dt*1U(0owb1jz z-r25=-_CXkf-X2~Vd#L)Igfy!KoYgyXn)izGkx&=33@HxRhv&c&r192AM_4LXD4G) z__2TR{)cq>-0G5^j3zJr;N{t=0{BY{_{aX>aQKnPGPfOzPS4g3#9`G~kYvMQuYvS? z^b`XZ$*OxbQ}AGs9~?NHncKlZU;m))Vh1Dr+cGU~XDj&dLH}^O%4UV$cW0J|u9TH# ztMf*71D95f%VvYX&u^D;y8GnG71`J5Re15_x6^~+$p@(1`QPHkbdiI;TE6h!5L5dS z4z-xr(q0ZmodMa6N2B3rG8j(!gR|b~sC!^}ImMmypSR(xAjqMM6}>7fq-B=Bt4vrp z)g3?Ds`D||b@8N0+D061EFybJw|J#$AD~sFD6PxT|7KJ0c7C@E7Y??P3MLU}>6GkD zgM2l(o$*{BVP`VokR}w$B25gvAyf?$VTV=vuQ9!xH7aX(!9(mHIMj)wEx6wqWo|_k z1IY--4=^w4M{Kgh?UWOfE1+g2MjZK!9UM61oCKv9OOI~pmt!f#vE|Pe+Eb(hc1#r= zeTU{m5drhy3G137NHLtw$@a8_7{=X=op!)u0BON?JGfhBEAfM-_TJbw-H0Xo{I-aP z^O?)N6(+zWE6C&qZP}Bw*yW=Qt*hB6yT9pVvL+I`&jG%uxarq5o>1SsoaH*;$V7QHDwH%Yv{;>WRe1 z^&Xjrv~Bf}ra7?dyF^nzM9tIHUB3MEB+Iu75ywNQO5`Nb&}j*Oa4YW2)4LC&J~Aw+ z1j$X=yIbN@L_a0$F^CQE8bsrN!_Q%X-mMta5qFCCI=xA~hs{K!TTQ^j1>7rXJN^T| zOqu5;{Um-tWGnPfGz!`V9_0{9!(SSj3u7wsXpYaiXT8bzYFgQkEhx04{+f&;(b~gw<$nO9#UJ(W2JKNuW7XoQ~3n{L@1H^GQ|I{af zS45LP0E!(7=n%i5&{NjnJhsJGwd6|A$29yj;%QRWY-?VI;G?p9C#Ncnr7(kvGZ-qm zjhdv5ELBJ$B*GW}%vECa1<9}{eh*}Qt1;Sw8g7CUQ_Z481QV20^{)?&5Ge1JA(<8* zJ_STpsscl_=8Z__ZLUS`zEnbA> z#WH|Dvanl=1FhD;gEmN$3ym2sZBi-#Za|U0@IyB%!T>kKh{+HBH#ubIg>}dftO_PH zQ8i&E81d$|T8Li%_qa^<6brOnZ^rgJ+au9Ud1QPJnlnAsP8%_sQ%nnkS+^S~5$T{= zDI{A8qx^QY8_mM`CmN}WaTNdQRRTS3Y&(_;P!FAjodyxZyuOgxv=r5_UWhk14(~6+ zd3@bc7HD*v&D8Kwxi)#sEwyxj=W%$I0x8C;C7GV9`=*F6ZqS@jNN$tA94s&TQO~#J zOjF>gi9*4tOi7PRFI2y5QPu9W?sB##x}nF}@)J;s2b@AUH!ld5!HhNy3Pv3Ins1`c zcR3|!62O^`0X#ZFc*;i2u`vlZTQ(zeO39Mx6E4P_JCSax>wpWLz)0FkQnDz`ktH=%^BCpiWtKN&2 z9K|%yAEe*&k^=$`;142nnuZ2S5u(z<#ECu|;QrQ}3ThC+vCU~AIh&BBQY^X8sb%Oy zg2ZLGMG7Ga9^A|T(v-;lB)^0Glm102aEk)ltMppRT`KTDd?bAO5x;x&c?E>H`z>6p zoLz>Z4Ll>nH@O;piA_zqVZ`|iAIbQt6<{U{5awUQ8Ii{kSbrLSnQl*CO{b8`V!q0V zYIk>?t*|^yqvR(jC;C45y}do1(t70gO}K=2!5e@1iIgSJq4Zz3O9qZsi_+{03tmiL zBrz0Z#Xo6})AV@^ZOBd-e?rjk4=o^@K$?WJn|z+os!@!F8Hy~_qtMCk&sk13FjD#| zd>W-sp_FWOb5an#cp5$pq2P8oyT8kGfR&`tt5-0fI84$N1NdV4It`)g_&Qv!mMPhG z*{HT@X--HNB0-X;FJJFKQqnkIhBHL&r|FArS}>o^^1F1&puT+m`UTpP;7gIsK4IFA8 zDIWx()SPm`^i?eS%a`$W2Kc^y{p@KRv(janFufs8;()7P(G{uJ_3viY*kUQMI; z74NKoiDG1X{_0sG@WT&`8c(Os$-nxC)cQcy*gtRcte`Uxr^yccAb9RIAz$(gO4D?) zAZLCY`=KS`GPAeANr!%r#faQ|u6q$t)L9_#R^7|yc z;}V6ItpuT8zK%eG5DA!tbILh!@*;i_v%)JF&~so?7>1gVi15m$Q{-5f43u26?CP3J z8=?WcN?-CqAxHS2X(?UfDVGIUC}=GxN2WSVo{I03?8!6u7dU{GQXF4zr-Y4U-BhcK zg@Ulr%Xo(uiseVfvW?4+7R&YbbUS()$`69&U;PxPQ(3O8zn^}3_3HI&<4fxJvP#n# zgBESa&y$pYkt87hq;yy}DHEUD{5Qvt2$V2$7$NMR;c1KHMc9Plf?Bi*D) zc6+03c`ska367b5Q{*(xH!T$+E(%|~Kr++v#qE-ux?oP8{j{A#qFkZrvp9P8(~kV2 zNVT7$m#@-PepTJ%5$#prECns1#$%=BJ$(uYjv>vShCC>dxz( z*FPZ%$YBkxc5morKE-*xAxhW%GB5ako+83|9EU|VXJrvUorj;p|IMX{O2{di7T@#T z4LTwG4S7hQN-}+c^MktzlL_0~ydYVI5llk#Dt!uMRd$&01+9i9ba2z@b6&{iBMAxJ z0sJDIrK$)^)ASWiD}LZBhiovfU$H`!py8C%PuT~RoMgM)#ywyWF2ehe417V!F-?FR zi!_X{7q`&s8MYH*x1&=Jz3AXwP?EzQ&m>h@_gOyzZ;$`HP)rSj+`N_-gy7 zr&uyi1kCC4@cB#VNR<%jtLVi~w5+%$OP4O(7f8HkYWPoE}OGW(2Dm<*l# z3niLRNr4{fl6V=upmJ6dGGzED@HF`%3g=vWgviU*G9r2%6e|+w`O8;Nal=`ma8Ae% z+%{GzO7Lwi!Qo)G!Z{$?$20-XS>-q3DyN&)v*$nwZDEqxOQ5AtEC?GuMdI9Dr{N0M z9MN2#VS(7^>DGV+#ZCT+>)E(FJ<2v=S$ic8Aoi)Ks!rwe@v&2Xk*&B(YnrDn;2#tuG zZLXI2?L46bBuZ8SxegZU&k+b*wO~JA5r$Dqj?*ctL1&7b=3y(tq6W`vg6Xg%LhpOO zP0mLB)8pRRWYhz6p8N$J55ui#ckAe~<^SxEpQY)0voGrtufF6onl)o^@BvZ63D)A2tKRiO*2{fY9OPX}ZYFk168`I>6MtfIjPzy zZlhwgY~mwi?O^Anph)bj_e|8Io+);X7aAmnz$7jIuRHCh-~Rd}Q`?T-?RSl4q!p}<*4v9_^CBUQNYnO3@wVj0_8&WcY+rOPlE}aw2<>@7JS`a1AF4+`_lIOfNbbyZ2 zXzPFa;svDT!@sFJwNe_3(nKjuL@9Fm4wTuBV{B3rf`%GD^~hkmZ^n!{Ck*Fn`;YUT zt=E@ia<<7_^U0|!E1$H7&DoEdvdEaS@0g%SDfLbUTVZ9BfnqMnZ#pcr_lWG`Gz= z#*h-1kF&E+>Tg>Y5eER#U1elZW2f`Fv(r#U(;p0agjT)Z&UR~hX{BM5iu z9rrNoiEZ1zJAm8c@a2m5*xUc5e@1jKitPKdljF&t*E<|f#s{R$A@9xZq#Ydh-gOUt zpY(f^QFri;u)+6v%d0F{kYkE!2Igg*{+s|>b(8-kTjYENFOQ$*MYf_rTVK0JXT8yW z?_Gbe+X$yCa@0t#GRUKYA9{mBR-Dd3@!szp4M#mzJxam$#Ou>f*nob378Wv@g^bs^ zAv7x!LW2_-0@PnpXTEf?8lEV+EYekfK2Mjf&SXzefpoxi7bpD41AchBDhHoqg$IG> z2LF%CY~^u|1|M4Tu~`P$gL!uzU+2sB%XC`eBEE+nBp@~M8OeDJnQ-*ZJ}hUpfARdtVdt85XV(Z;*6K^zY*1989xNm9@(W5FQzuwv*j&0fhHs7>96$Q zW4WUxQLF#d9{STiy$f)k1K#V-NvkqJu*9#ixCiIaoFOR8MLGv@hHsD36Dire8^!8= zmKN7(x@y2Vf-VklW>~HY_TQ$5OYDKPgTH+k9S1k0Jc!c3u0TrTkO*w>9GNu&em2(7 z_#3*rTg+cZHuMeVO=@GylU-DThvRM4LhJl28Lm&9`iBNQZKMYr) zkKGdb?R)r*X3+g}S(^D8{r^Fv=8JURpF6Isg(pWlNR{J$6|P}9u3F~rCi+9sTkRHN z()1!9q9^%VZRtZ=$(0-(ra@o`%aPuIYxhB(FOzH@`gTwBulT}=hjB9WDJmF_bmzO* zYeX$JIosau6#uz+me2jZ!QvqV0|0dx`NF)o?v;Vj$4-SCr@!M>PS>8d?*>}F7!7Dj zLjL=n+Q3M!Ezba{cd(nRBFpI;8gsL;jSqH%g9p$SC=RBZFVxH9p8mQgb->NvN6{ps z3|O+V@D%zb*aF!6C7OHud9SeF2>>qsN%nv^c#O#y6Y}50&pYJz72)IC#O3>F0R;>m zBOaUBJ^X!N0zCXzc5@4n3O>-XRXD$zrOoYjunoJ(mv#l@f=tmeO%8t);WToUP1KZm z2$ph(m-7`&1QunZyuEpNKbx|j&5C}M6`f`?dr=8lf~){_*cxtWa>V$0uL?%$IbV&y zbe89i7uFID@%KIazQRkKFB+4n_2Ii(e~R_*>(k;8FN;02z%DhKDZBG3=VeNQb@_Qr6r>WU zcUgkFgPhds6mFAfWPt_gyEbOl7i`D$Pu!q+e^AW+c5Kzy`NPy6Xxfy6ZL7nq(0q(u z*U@?C2qB;E7peHL@j100qc8N}o?k(XjITFjM& z_!S+blmJS-hfttQRnhQK^pR40lzI=r=SS@GY*jk8h3XC8g$_Ib`Pun8w+PBoRvw`s za)VwZcaSG4lDl#XF;=6_e~1Uqr&fjSQRaFYz=P}0e?F>USYhd8|NBFK^vf92>;+23 zbEU@ktUEaDjtrSe4>#w6K$F* zq~YB>UGnQG%*e4TnadKnSrE+a?!wT59dsx=&U8~3mr)^#zqJyWK+ zNgMKv9KzD@#s!wOLL2`e4^l>jDa!Y|j4a?Rp;2$9iT1DV{+)AJ?BAb-SK$2AohJtn z1nIq<@H34KM5DNjx$~jm?AUSelB{l{6NmE;MT$uV#)Me$3LNHQV7QoOUgD+Q*{sQu z_-bpo?syuH8+1_K5q;Nynz4g61NwZt?-N-N=i8U+U}{t22a$qw-%>)oOBYxz^7zSW zEg;v8mw(m7oM^iu+*w7}ML56c*?`QVCU;>(xKUij{U(9kR}^y7$6#Glg=n59h|PYC z5!smYiJS{RK)NC7fXMPDD_J4E>=Cw@t06q{ZMp;6!)(H%LrwH7MHY&&EB=x^OFKpn z)o!j;eWQGJnmjaB^QH>e3+#LBmw3wuG|g>lXd(Z(+Jm!kcs{+{n{IB(#z;8AVx4)O zq`0(T+{t;mxp@h!C&EF$@!q&A=9?hp-}vq;9jEL>Vvdoq$);2$(X1YZ-*SD*CZFZx8(tycIena<73>-Nb-vH7HhLf=UgI#8P+DmknqQ*vwa z>`nG6Q19^I6)yfNQpvV#Jc<-4N$eu!Q6zd*&BES69l_t7xG3OdZd_4>k&&EAB|%f|JP1arAU*7ldIx9HWo>fOJ)OW4c0`*Lxz7@+6@iz^is%y2Eq8J8LO4$@ zap=3+RiW~*FeKRxmsz;gkdABaT5#LE)o@^tupUBq3yUT8_-2SPCvw2PaXOnV!UW=_ zcN_5Il>Q*w1^g-&VJtq4=@0mn!3@W(#>fXF#Kt?V}Fe=*SM z3+2k)2Kn#50X9$2+nt0Q`pJTsvDp;81M2!Wng`~sS-MLK^68Wal=n*CTCNL8HoYyq zGI2GBZAaxY=sOkB5wQbGtU(dmI#s`aM#SO2DYH1G=qL1d`CC$1&Gl+=2&DQLW9N05 zjvE;0ipOs>F@x$X!r7vwav|-<^e(b0thK^u6RFr&0WVtv{#J~;`J=`r*V0ux(YL?QXqIlL>_#NEY+^5SaiKWX2?C`9ih&nD=oK->fx|7Qrlo-qy-el9}c)fKM?pprc)T3O?;e)m%ny=3inZ}r^ z_JEMPSy|jiIuhwrTrf)s0}l?&dFK>SYWf42Y#cN(u{03{wGA$!g=Sq@Ug2Mbd5#s8 zE6fn&U zA)O~pB^eSKNs4LkQiLW7tKy+od- zc`_<^0hmsXO2OmoQwndxh|m=(!Jr%d>8*OY=0{PhZn3iJu5vm_Q$Tl$4yi-~VY#Wk z>8I!frG~xMt@U4NI~TbFbw0DKVj4+ngA;SWCMYz+GgvhIGS^+>th;~QgMceE#%Mff*WDi;{*IBiSIlZd7R}z3WHQm!wX>@c^fSYzGhoxb znQHC91cuIbhYcx+w8aT2)5uIf*Z|aA=wk50Jd4R3bq4$6Qvu*w8{$GU{!F!R*J5R9 zsibA+EJWulFJ~Q3gR;9Dqh|R=XVL4h|ErR5(6QH5guRJi3ugcp2u=K|$0^16JPuc` z2&VlJpbVBbmI{uN7ZQ3eixvLR?;M?7+JC$ISG2h=z%mhs<;UNdd&{?N5lG1wO~7!nQ}ryI#Q9= zc0ZG*=2Vc=rP_E;Y{1&WcfxmX_@2+X4Q=P;01H=u97k{AffE9KapBi&49|tJzG6+ErJ1c5A7qb*X zcvklmazZqAv1m{IFzR(3#rxfH&s98f6dnwZouwxygk+8{y_5Z(tNdt0P7#js_pVO+ zC+}RPgVPVLQTBbX`{VxLu=kte%P+m(-}MHL56At%FOK5D5c?QAKaCGY{ZkiWC%rQl z`G@=e)jM$2KkbrE9Od2)#={Sz1J}sMXTKl2%FjmK1K0RIin(_%pZbEHrP(9nyQNvE zi;$M9dC3)zdekU$&Ovoh9F5z-j?s}KC*2EF$jNArT6P`cFx17ZLs6%3-Qz3*v&cRM zi@OIGG0Op}NO;PTzZn$TyyvhtZ6P1wxb#{ou?ykIgd#J;V@RC66 zVCV5A_ZM)^O}Vlda_gQL&s*)MHZy3`u^kgwG99ZU+eD%O-h0H(p)qgI`mm>EIty1s z-}WEDkiFV$C)T?Vcjs}%CLtcWC9>$9x?Rv6M$*!{LQp?8H+FOlAJ52M#t%^cG3HhS zVD7j|SD|B_kQH3A7ENFdlaxC_2oR7x^S1GZb075aR{gQ7o!GP43c_9#PHkHVDKr$b z^QL4AcU_(G_p%v#*do*AMu#DrbVk&6)a+pu8y-CavYy#zrjaUh%kq&M7#@cYLU0zk z@H0!R(SsHoJ5z$|Ets6DiQn96NHMg_t8rAMq??APOGu@7TRaHUg|jim*8Qy-W8O|; zT~6DQvk8?GOc>YFX65D?ykT)T3I)-~Z{TNW9HA3c&u-y-BU(*tMx~^3jxpD_BK)~ z^Cd9fwC&*U3Zt1Y>p2P=AZv?oy{}q623A*htkoL_8=vAdRA>uaH>lbRJ?Ws3Y0bBx z>t3q9ZYYNDTGy}2y>@5(>pMO+AcYmJYE^5An|;or{DW!r;Jg+&)}3uv;07cSXJW5C zk=4YX9~AHH?H34lbipD3p|)L%(ahy3p415yUp>vovT-}7k7*|81Ipa}LjL|aKNay@ zSl$jcHk#f>=oiBCGfF8K(Yb_+bs-2MhsLZ(g2=)BtkVJJ{7QVs7x6r*N%d`$=(WaO zKGdg#Id%whY-uy8;>lvqOxI|_=JRYCc!5>Q_F$Pv&>9+QXV{RW^mRV{{$ zlh_`KEX=|@zy~7M?qb9uPVxI&cp2xh1&VG4L`1hD58hVn38)#~T9zlY0np`*T6zFEI zoEKwAvpEYFg?OPSakov>wh=2b+j1*4r_Mfv2ZYP}(>x;iNY> zY-{OLYS6gqV#9UxcZfMDiiB|rm&{(GF3$~!h*Vw46Td7jXW+!XxpCDiIT;88${zJ_ zFqKJFAmWh2QgNqXzGIkLGDt{$bCb`z@K)O@cZK_@<`!-l zwDavtUYXC%`6cy4?9T~~*$SO%kv0+D??!mP8#%6qr>yanitc%Ixp$?QVWyqid2yXh zSIsMS+k9n7E$*<7J}3O8D?mvE(}Td{7fOP~NCiH41K-q%FLa&|0uU72c(1*)ca4L) zRxht{69pbk&aa`W8k51OIo)F=-&BJX49(!)sii_|BF4c1)Xt*^3WXRbL>5jQ&gVI1 zy@PQFWL!e8>NHfTQFrTRnYF@BuA!y5uh}*saB*iB^(7-wlo-9LP!xq5TD`u!=Nb8~ zx!I@ma%*8{?w*1gPu9%@3s08 zh7NhAr$$t#J(yyr8Qo<&;Z!06ssbG`eOT7Ol*=Fe;-(oYuw9XZE~SI_uUzq`YVuv6M&c~?6nu8p!mnXeg4 znUF-~c^U(4WZuH0~XPLyP@k z|HIkYaG-y%Cd@Ut9#U;EvK)zTFo(S50mh3#d)EsN)PRSQ_>E;}Cj9o5#h8X#92t)R z<)s(``3+TlXV1-=j6-iXSV|u88~d_!cc1br_m`?G0{H@kpaE(m?5THnZ<+LAD79R4 zh`i)PImzO1mi;Roq<8RyQ_*CP3_$CarSx*O<6QNwx5vbHF7X;Os)tsH1YIipRir1u z#h313@Z<_|`!-s#9E!2DAtKL|Ru{KVx3~9|?`u#F4?hMHn;ZcIM*g5Nk|05is{gns z9zSV|qzT>|&QW+*KHoZ3t7y8TYiN?FejamaGs&Ctm8ouCEHCDNTrB^%n77!J;+DXaC8bTt5z09hw_>7dRjiYW7UvTFr94}h z2cBwWu*T|%!4J-@(Wy#b$-xF^gS0*7*&b>{x2mBArO;w9?3I9?tI(raO6TjGA|G`$Uvxkb`bZ@$~ zr6U8D4HQFa!}IB-V){_cFfJJ&V&0hdLd*}Gi>>sY=UJS@)VE00>q95r7xsZD4ELI}l2alNqa6rAaCh}N=7Z%{*}OVs|T zE_J0Nsd%o{Rjrft6~0`AHyU*kwP^+h`r>5il?IoE?z~aFrbEVaq@ZK3cVu%TrS@pC zvfcn2(6eML#JLFHRFdq-6QGf%NU38bETU>5D2?_NokqyD^W1so09pc>d@1gn*HOk? z#flcGT%!xAO*4s51(F|CFfT}qPcXKGuy$D*8xkVbLuugjo?zn0#kOJ9u12ul+%&c~ zrw>~ta)hBZJW8v@3zTTjX3 z8!bguNdj0*Z_BU8VBlsp7V%Nf)#!w;r!rT&Rp}+zk3+DGE znbo_q-3>fl{>a3z4?#i8VOLI;+VuO=@~~P1bZ%9Z$dzR5EX7A=?1UwxBeNC`4@BWd zV6aa5(rV88ZjAoA2LF}jRrJUmE!U!Y!y!LZ)9m{);nB2MNEv0XsW)3cAk*9fI{vO~ zKGqubG9!tM%-f5&Nkv)Q{S5b z;~|^W56|cD5F~y?-2X!)w(ZSSp~yb0n;)K|?fa2#&Pw$#HrYcdu8*Aqi2A8=n^eLfEu;9S>gEm(6@`_J#b&9r z{m3$4R*v5YTGR-jeyb9%GU86kRaREn)CwL`KJ$6Aecyu8MYnroAn)ofb0+Ey{8+aFO` zVAkhql9obreXozB2e<0^@l5m8n$v8#8EDd2`&b{CxEyx@qaW)5>-s@;>jBd4H!T5Q z)WDI3Im#8m;E9ldzm_lG`~!rXYCuj#5~UL_$8)r zkC#t=m{E0FClHdJgv%uRS2~6kqDRP^p*<6#MPLIA)v0iDI6Rn~j(V@~)*9XRY2O$J zu68KH(IFCmx>?#U?;wOa9lpjJ-)+(tyb~kCs~9A4&#Dr$8ObMmWK5#v25UT7hN+2! zpDU&nrr`-nJiRv3@#%5@Y=X|<%6lQh!DQS!=^qS_hlBBC)O*+a4IdDBa=v%D*?jw^ z`F5B5-}yfpmya8*uTQ_V9^>DCZ7JXWcKP^k{M+B;xAT8ATbGY7n(V(V_zZvjwe`e6 z%|Gj2?_7HI{Lld+DIGq0deUI$)jD_K0Vhi$;)l~_W0$9W1y`O#_!*uPEN5Aak5VV# z2*!SbL(ER=vK>67KCjaChdargZ(r)mh_L1^JoI(GLz*@A_#00&6vT4Ol!5+GmuIdF zmt8_I#e;>XUw~JnNIjclu7t(;-o4r+&fSdy0D=ye0hQiTtd@BMfTu! zwYY;stjy>A9$&TAIWN9W<4;lkg?fymgU&Kcvb@0phQ;gL&T*u!oK@62#y4!mA!2pC zB-$`M_yDzg%VoZ7ioXsB(K*2E_H=vur{Lf|%Kvp69EVZS4*K)BW7pbw8oVP+OLz;vKMGFMrZJKn=n+%}i(*jZ z)72e0_>tO4K(v)S&O%@XZfOiLwfr=j5$(RYx`yPKtOd9YuJT7gl7=&I1cZwMxz(ovMs!b}zvs-ZZ7oTU@O~$$)%^w9wfC7*wVyca(wu75I$)@n%6i2qWjb>SK zO+p2{*#1AV$Hwz%@ijfIBzPl!hmNu5GctqC4 za!xu;u~Cu}vSFX#HwPt9f11x``5lao9LEz(kW%b2h6tnlbBe>EQ%v}rU`vsJSy;%q zWuJ=ckYFFBjA*3eZ2l++l@Tog0oagN8JPgM4}>1gkpkzOz3&C%;nCU0?x+{^$HD1n z_-p^LcNjFfWAdAkAvapQP4jj zn|F^C_6G;Y9}fG2cLCYG1G1=t<38bg0`+W&Ju+DR-WZ^r^hO8o$4(wjaNHvZ91^&L{@`dtxER)p!X|??(zHX z@iFxEDCmA50~i5{!NKtK_fh}d`?KKv@c6Jt3io>iHxM?oFEXx!<8J??9UOK~y6<|} zYDmD4;Xyr$VDRyM56Ym&F8RL$5Y{k~gW&-3z@D|qKu2ey?Z^I@2(#`8vgW=cqZ