sliftutils 1.7.67 → 1.7.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -76,7 +76,7 @@ function summarize(files, weightBySize) {
76
76
  return summary.totalSize;
77
77
  return summary.count;
78
78
  },
79
- expectedOutputCount: SUMMARY_COUNT,
79
+ expectedOutputCount: 100,
80
80
  });
81
81
  let addStart = performance.now();
82
82
  for (let file of files) {
@@ -195,5 +195,5 @@ main().catch(e => {
195
195
  console.error((_a = e.stack) !== null && _a !== void 0 ? _a : e);
196
196
  process.exit(1);
197
197
  });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isa0VBQWlGO0FBQ2pGLG1EQUFnRDtBQUNoRCwrQ0FBNEM7QUFFNUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLFNBQVMsR0FBRztJQUNkLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsMEJBQTBCO0lBQzFCLHFCQUFxQjtJQUNyQiw0QkFBNEI7Q0FDL0IsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsR0FBRywyQ0FBMkMsQ0FBQztBQUsvRCxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQWMsRUFBRSxNQUFrQjtJQUMxRCxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDckQsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsTUFBa0I7SUFDdkUsSUFBSSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RSxLQUFLLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztR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QyxDQUFDO0lBQ3BJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNmLElBQUksS0FBSyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUEscUJBQVksRUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUYsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QixTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7O0lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFDLENBQVcsQ0FBQyxLQUFLLG1DQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBzb3J0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgVHJlZVN1bW1hcnkgfSBmcm9tIFwiLi90cmVlU3VtbWFyeVwiO1xuXG5jb25zdCBTVU1NQVJZX0NPVU5UID0gMzA7XG5jb25zdCBUSU1JTkdfUlVOUyA9IDIwO1xuY29uc3QgU0NBTl9ESVJTID0gW1xuICAgIFwiRDovcmVwb3MvcXMtY3lvYVwiLFxuICAgIFwiRDovcmVwb3MvcXVlcnlzdWJcIixcbiAgICBcIkQ6L3JlcG9zL3NvY2tldC1mdW5jdGlvblwiLFxuICAgIFwiRDovcmVwb3Mvc2xpZnR1dGlsc1wiLFxuICAgIFwiRDovcmVwb3MvaW5mZXJlbmNlLXdlaWdodHNcIixcbl07XG5cbi8vIE1hdGNoZXMgdGhlIGdpdGlnbm9yZWQgXCJ0ZXN0Ki5qc29uXCIgcGF0dGVybiwgc28gdGhlIGNhY2hlIG5ldmVyIGdldHMgdHJhY2tlZC5cbmNvbnN0IENBQ0hFX0ZJTEUgPSBcIkQ6L3JlcG9zL3NsaWZ0dXRpbHMvdGVzdC1maWxlcy1jYWNoZS5qc29uXCI7XG5cbnR5cGUgRmlsZUluZm8gPSB7IHBhdGg6IHN0cmluZzsgc2l6ZTogbnVtYmVyIH07XG50eXBlIEZpbGVTdW1tYXJ5ID0geyBjb3VudDogbnVtYmVyOyB0b3RhbFNpemU6IG51bWJlciB9O1xuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0RmlsZXMoZGlyczogc3RyaW5nW10sIG91dHB1dDogRmlsZUluZm9bXSkge1xuICAgIGZvciAobGV0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgIGxldCBiYXNlUGF0aCA9IGRpci5lbmRzV2l0aChcIi9cIikgJiYgZGlyIHx8IGRpciArIFwiL1wiO1xuICAgICAgICBhd2FpdCBjb2xsZWN0RGlyKGRpciwgYmFzZVBhdGgsIG91dHB1dCk7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0RGlyKGRpcjogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nLCBvdXRwdXQ6IEZpbGVJbmZvW10pIHtcbiAgICBsZXQgZW50cmllcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBsZXQgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgICAgbGV0IGVudHJ5UGF0aCA9IGJhc2VQYXRoICsgZW50cnkubmFtZTtcbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGNvbGxlY3REaXIoZnVsbFBhdGgsIGVudHJ5UGF0aCArIFwiL1wiLCBvdXRwdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICAgICAgICBsZXQgc3RhdHMgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZ1bGxQYXRoKTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKHsgcGF0aDogZW50cnlQYXRoLCBzaXplOiBzdGF0cy5zaXplIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdW1tYXJpemUoZmlsZXM6IEZpbGVJbmZvW10sIHdlaWdodEJ5U2l6ZTogYm9vbGVhbikge1xuICAgIGxldCB0cmVlID0gbmV3IFRyZWVTdW1tYXJ5PEZpbGVJbmZvLCBGaWxlU3VtbWFyeT4oe1xuICAgICAgICBnZXRQYXRoOiBmaWxlID0+IGZpbGUucGF0aCxcbiAgICAgICAgY3JlYXRlU3VtbWFyeTogKCkgPT4gKHsgY291bnQ6IDAsIHRvdGFsU2l6ZTogMCB9KSxcbiAgICAgICAgYWRkVG9TdW1tYXJ5OiAoZmlsZSwgc3VtbWFyeSkgPT4ge1xuICAgICAgICAgICAgc3VtbWFyeS5jb3VudCsrO1xuICAgICAgICAgICAgc3VtbWFyeS50b3RhbFNpemUgKz0gZmlsZS5zaXplO1xuICAgICAgICB9LFxuICAgICAgICBtZXJnZVN1bW1hcmllczogKHRhcmdldCwgc291cmNlKSA9PiB7XG4gICAgICAgICAgICB0YXJnZXQuY291bnQgKz0gc291cmNlLmNvdW50O1xuICAgICAgICAgICAgdGFyZ2V0LnRvdGFsU2l6ZSArPSBzb3VyY2UudG90YWxTaXplO1xuICAgICAgICB9LFxuICAgICAgICBnZXRXZWlnaHQ6IHN1bW1hcnkgPT4ge1xuICAgICAgICAgICAgaWYgKHdlaWdodEJ5U2l6ZSkgcmV0dXJuIHN1bW1hcnkudG90YWxTaXplO1xuICAgICAgICAgICAgcmV0dXJuIHN1bW1hcnkuY291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkT3V0cHV0Q291bnQ6IFNVTU1BUllfQ09VTlQsXG4gICAgfSk7XG4gICAgbGV0IGFkZFN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICB0cmVlLmFkZChmaWxlKTtcbiAgICB9XG4gICAgbGV0IGFkZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtIGFkZFN0YXJ0O1xuICAgIGxldCBxdWVyeVN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgbGV0IHN1bW1hcmllcyA9IHRyZWUuZ2V0U3VtbWFyaWVzKFNVTU1BUllfQ09VTlQpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgVElNSU5HX1JVTlM7IGkrKykge1xuICAgICAgICBzdW1tYXJpZXMgPSB0cmVlLmdldFN1bW1hcmllcyhTVU1NQVJZX0NPVU5UKTtcbiAgICB9XG4gICAgbGV0IHF1ZXJ5VGltZSA9IChwZXJmb3JtYW5jZS5ub3coKSAtIHF1ZXJ5U3RhcnQpIC8gVElNSU5HX1JVTlM7XG4gICAgbGV0IGxhYmVsID0gd2VpZ2h0QnlTaXplICYmIFwic2l6ZVwiIHx8IFwiY291bnRcIjtcbiAgICBjb25zb2xlLmxvZyhgXFxuPT09IHdlaWdodGVkIGJ5ICR7bGFiZWx9LCAke1NVTU1BUllfQ09VTlR9IGVudHJpZXMgPT09YCk7XG4gICAgY29uc29sZS5sb2coYGFkZDogJHtmb3JtYXRUaW1lKGFkZFRpbWUpfSB0b3RhbCBmb3IgJHtmb3JtYXROdW1iZXIoZmlsZXMubGVuZ3RoKX0gZmlsZXMsIHRyYWNraW5nICR7Zm9ybWF0TnVtYmVyKHRyZWUuZ2V0VHJhY2tlZE5vZGVDb3VudCgpKX0gbm9kZXMsIGdldFN1bW1hcmllczogJHtmb3JtYXRUaW1lKHF1ZXJ5VGltZSl9IGF2ZyBvdmVyICR7VElNSU5HX1JVTlN9IHJ1bnNgKTtcbiAgICBsZXQgdG90YWxXZWlnaHQgPSAwO1xuICAgIGZvciAobGV0IGVudHJ5IG9mIHN1bW1hcmllcykge1xuICAgICAgICB0b3RhbFdlaWdodCArPSBlbnRyeS53ZWlnaHQ7XG4gICAgfVxuICAgIHNvcnQoc3VtbWFyaWVzLCBlbnRyeSA9PiAtZW50cnkud2VpZ2h0KTtcbiAgICAvLyBWZXJpZnkgZWFjaCBlbnRyeSBhZ2FpbnN0IHRoZSByYXcgZmlsZSBsaXN0OiBhc3NpZ24gZXZlcnkgZmlsZSB0byBpdHMgbW9zdCBzcGVjaWZpYyBkaXNwbGF5ZWQgZW50cnkgKGV4YWN0IHBhdGhzIGJlYXQgcHJlZml4ZXMsIGxvbmdlciBwcmVmaXhlcyBiZWF0IHNob3J0ZXIpLCB3aGljaCBpcyB0aGUgcGFydGl0aW9uIHRoZSBlbnRyaWVzIGNsYWltIHRvIHJlcHJlc2VudC5cbiAgICBsZXQgYWN0dWFscyA9IHN1bW1hcmllcy5tYXAoKCkgPT4gKHsgY291bnQ6IDAsIHRvdGFsU2l6ZTogMCB9KSk7XG4gICAgbGV0IHVubWF0Y2hlZENvdW50ID0gMDtcbiAgICBsZXQgdW5tYXRjaGVkU2l6ZSA9IDA7XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBsZXQgYmVzdEluZGV4ID0gLTE7XG4gICAgICAgIGxldCBiZXN0TGVuID0gLTE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VtbWFyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgZW50cnlQYXRoID0gc3VtbWFyaWVzW2ldLnBhdGg7XG4gICAgICAgICAgICBpZiAoZW50cnlQYXRoLmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgICAgICAgICAgIGxldCBwcmVmaXggPSBlbnRyeVBhdGguc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoID4gYmVzdExlbiAmJiBmaWxlLnBhdGguc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RMZW4gPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZS5wYXRoID09PSBlbnRyeVBhdGggJiYgZW50cnlQYXRoLmxlbmd0aCArIDEgPiBiZXN0TGVuKSB7XG4gICAgICAgICAgICAgICAgYmVzdEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBiZXN0TGVuID0gZW50cnlQYXRoLmxlbmd0aCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJlc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHVubWF0Y2hlZENvdW50Kys7XG4gICAgICAgICAgICB1bm1hdGNoZWRTaXplICs9IGZpbGUuc2l6ZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGFjdHVhbHNbYmVzdEluZGV4XS5jb3VudCsrO1xuICAgICAgICBhY3R1YWxzW2Jlc3RJbmRleF0udG90YWxTaXplICs9IGZpbGUuc2l6ZTtcbiAgICB9XG4gICAgbGV0IHNob3duUGVyY2VudCA9IDA7XG4gICAgbGV0IHNwZWNpZmljUGVyY2VudCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdW1tYXJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGVudHJ5ID0gc3VtbWFyaWVzW2ldO1xuICAgICAgICBsZXQgcGVyY2VudCA9IGVudHJ5LndlaWdodCAvIHRvdGFsV2VpZ2h0ICogMTAwO1xuICAgICAgICBzaG93blBlcmNlbnQgKz0gcGVyY2VudDtcbiAgICAgICAgaWYgKGVudHJ5LmtpbmQgPT09IFwic2VsZlwiIHx8IGVudHJ5LmtpbmQgPT09IFwic3VidHJlZVwiKSB7XG4gICAgICAgICAgICBzcGVjaWZpY1BlcmNlbnQgKz0gcGVyY2VudDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWN0dWFsID0gYWN0dWFsc1tpXTtcbiAgICAgICAgbGV0IGRpZmYgPSBcIlwiO1xuICAgICAgICBpZiAoYWN0dWFsLmNvdW50ICE9PSBlbnRyeS5zdW1tYXJ5LmNvdW50IHx8IGFjdHVhbC50b3RhbFNpemUgIT09IGVudHJ5LnN1bW1hcnkudG90YWxTaXplKSB7XG4gICAgICAgICAgICBkaWZmID0gYCAgRElGRiBhY3R1YWwgZmlsZXM9JHtmb3JtYXROdW1iZXIoYWN0dWFsLmNvdW50KX0gc2l6ZT0ke2Zvcm1hdE51bWJlcihhY3R1YWwudG90YWxTaXplKX1CYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgJHtwZXJjZW50LnRvRml4ZWQoMSkucGFkU3RhcnQoNSl9JSAke2VudHJ5LnBhdGgucGFkRW5kKDYwKX0gZmlsZXM9JHtmb3JtYXROdW1iZXIoZW50cnkuc3VtbWFyeS5jb3VudCkucGFkU3RhcnQoNil9IHNpemU9JHsoZm9ybWF0TnVtYmVyKGVudHJ5LnN1bW1hcnkudG90YWxTaXplKSArIFwiQlwiKS5wYWRTdGFydCg4KX0ke2RpZmZ9YCk7XG4gICAgfVxuICAgIGlmICh1bm1hdGNoZWRDb3VudCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYFVOTUFUQ0hFRDogJHtmb3JtYXROdW1iZXIodW5tYXRjaGVkQ291bnQpfSBmaWxlcyAoJHtmb3JtYXROdW1iZXIodW5tYXRjaGVkU2l6ZSl9QikgbWF0Y2hlZCBubyBkaXNwbGF5ZWQgZW50cnlgKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYHRvcCAke3N1bW1hcmllcy5sZW5ndGh9IGVudHJpZXMgY292ZXIgJHtzaG93blBlcmNlbnQudG9GaXhlZCgxKX0lIChzcGVjaWZpYyBwYXRocyAke3NwZWNpZmljUGVyY2VudC50b0ZpeGVkKDEpfSUsIGNvbWJpbmVkIGxlZnRvdmVycyAkeyhzaG93blBlcmNlbnQgLSBzcGVjaWZpY1BlcmNlbnQpLnRvRml4ZWQoMSl9JSlgKTtcbiAgICAvLyBFbnRyaWVzIGFyZSBhIHN0cmljdCBwYXJ0aXRpb24gKGVhY2ggZmlsZSBpbiBleGFjdGx5IG9uZSBlbnRyeSksIHNvIHRoZXNlIG11c3QgbWF0Y2ggdGhlIHJlYWwgdG90YWxzIGV4YWN0bHkuXG4gICAgbGV0IGVudHJ5Q291bnQgPSAwO1xuICAgIGxldCBlbnRyeVNpemUgPSAwO1xuICAgIGZvciAobGV0IGVudHJ5IG9mIHN1bW1hcmllcykge1xuICAgICAgICBlbnRyeUNvdW50ICs9IGVudHJ5LnN1bW1hcnkuY291bnQ7XG4gICAgICAgIGVudHJ5U2l6ZSArPSBlbnRyeS5zdW1tYXJ5LnRvdGFsU2l6ZTtcbiAgICB9XG4gICAgbGV0IGFjdHVhbFNpemUgPSAwO1xuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgYWN0dWFsU2l6ZSArPSBmaWxlLnNpemU7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBlbnRyeSB0b3RhbHM6IGZpbGVzPSR7Zm9ybWF0TnVtYmVyKGVudHJ5Q291bnQpfSAoYWN0dWFsICR7Zm9ybWF0TnVtYmVyKGZpbGVzLmxlbmd0aCl9KSwgc2l6ZT0ke2Zvcm1hdE51bWJlcihlbnRyeVNpemUpfUIgKGFjdHVhbCAke2Zvcm1hdE51bWJlcihhY3R1YWxTaXplKX1CKWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRGaWxlcygpOiBQcm9taXNlPEZpbGVJbmZvW10+IHtcbiAgICB0cnkge1xuICAgICAgICBsZXQgY2FjaGVkID0gSlNPTi5wYXJzZShhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShDQUNIRV9GSUxFLCBcInV0ZjhcIikpIGFzIHsgZGlyczogc3RyaW5nW107IGZpbGVzOiBGaWxlSW5mb1tdIH07XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjYWNoZWQuZGlycykgPT09IEpTT04uc3RyaW5naWZ5KFNDQU5fRElSUykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBsb2FkZWQgJHtmb3JtYXROdW1iZXIoY2FjaGVkLmZpbGVzLmxlbmd0aCl9IGZpbGVzIGZyb20gY2FjaGUgJHtDQUNIRV9GSUxFfWApO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC5maWxlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgY2FjaGUgZGlycyBjaGFuZ2VkIChjYWNoZWQgJHtKU09OLnN0cmluZ2lmeShjYWNoZWQuZGlycyl9LCBub3cgJHtKU09OLnN0cmluZ2lmeShTQ0FOX0RJUlMpfSksIHJlc2Nhbm5pbmdgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBubyBjYWNoZSBmaWxlIGF0ICR7Q0FDSEVfRklMRX0sIHNjYW5uaW5nYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgY2FjaGUgcmVhZCBmYWlsZWQsIHJlc2Nhbm5pbmc6YCwgKGVyciBhcyBFcnJvcikuc3RhY2sgPz8gZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgZmlsZXM6IEZpbGVJbmZvW10gPSBbXTtcbiAgICBsZXQgc2NhblN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgYXdhaXQgY29sbGVjdEZpbGVzKFNDQU5fRElSUywgZmlsZXMpO1xuICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShDQUNIRV9GSUxFLCBKU09OLnN0cmluZ2lmeSh7IGRpcnM6IFNDQU5fRElSUywgZmlsZXMgfSkpO1xuICAgIGNvbnNvbGUubG9nKGBzY2FubmVkICR7Zm9ybWF0TnVtYmVyKGZpbGVzLmxlbmd0aCl9IGZpbGVzIGluICR7Zm9ybWF0VGltZShwZXJmb3JtYW5jZS5ub3coKSAtIHNjYW5TdGFydCl9LCBjYWNoZWQgdG8gJHtDQUNIRV9GSUxFfWApO1xuICAgIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgICBsZXQgZmlsZXMgPSBhd2FpdCBnZXRGaWxlcygpO1xuICAgIGNvbnNvbGUubG9nKGBjb2xsZWN0ZWQgJHtmb3JtYXROdW1iZXIoZmlsZXMubGVuZ3RoKX0gZmlsZXMgZnJvbSAke1NDQU5fRElSUy5qb2luKFwiLCBcIil9YCk7XG4gICAgc3VtbWFyaXplKGZpbGVzLCB0cnVlKTtcbiAgICBzdW1tYXJpemUoZmlsZXMsIGZhbHNlKTtcbn1cblxubWFpbigpLmNhdGNoKGUgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoKGUgYXMgRXJyb3IpLnN0YWNrID8/IGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuIl19
199
- /* _JS_SOURCE_HASH = "656b9eea92595d2b1164fb0d91cdd090fdb580dd665e47749657855c28eb87f8"; */
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isa0VBQWlGO0FBQ2pGLG1EQUFnRDtBQUNoRCwrQ0FBNEM7QUFFNUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLFNBQVMsR0FBRztJQUNkLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsMEJBQTBCO0lBQzFCLHFCQUFxQjtJQUNyQiw0QkFBNEI7Q0FDL0IsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsR0FBRywyQ0FBMkMsQ0FBQztBQUsvRCxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQWMsRUFBRSxNQUFrQjtJQUMxRCxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDckQsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQUMsR0FBVyxFQUFFLFFBQWdCLEVBQUUsTUFBa0I7SUFDdkUsSUFBSSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RSxLQUFLLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztR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QyxDQUFDO0lBQ3BJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNmLElBQUksS0FBSyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUEscUJBQVksRUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUYsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QixTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7O0lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFDLENBQVcsQ0FBQyxLQUFLLG1DQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBzb3J0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgVHJlZVN1bW1hcnkgfSBmcm9tIFwiLi90cmVlU3VtbWFyeVwiO1xuXG5jb25zdCBTVU1NQVJZX0NPVU5UID0gMzA7XG5jb25zdCBUSU1JTkdfUlVOUyA9IDIwO1xuY29uc3QgU0NBTl9ESVJTID0gW1xuICAgIFwiRDovcmVwb3MvcXMtY3lvYVwiLFxuICAgIFwiRDovcmVwb3MvcXVlcnlzdWJcIixcbiAgICBcIkQ6L3JlcG9zL3NvY2tldC1mdW5jdGlvblwiLFxuICAgIFwiRDovcmVwb3Mvc2xpZnR1dGlsc1wiLFxuICAgIFwiRDovcmVwb3MvaW5mZXJlbmNlLXdlaWdodHNcIixcbl07XG5cbi8vIE1hdGNoZXMgdGhlIGdpdGlnbm9yZWQgXCJ0ZXN0Ki5qc29uXCIgcGF0dGVybiwgc28gdGhlIGNhY2hlIG5ldmVyIGdldHMgdHJhY2tlZC5cbmNvbnN0IENBQ0hFX0ZJTEUgPSBcIkQ6L3JlcG9zL3NsaWZ0dXRpbHMvdGVzdC1maWxlcy1jYWNoZS5qc29uXCI7XG5cbnR5cGUgRmlsZUluZm8gPSB7IHBhdGg6IHN0cmluZzsgc2l6ZTogbnVtYmVyIH07XG50eXBlIEZpbGVTdW1tYXJ5ID0geyBjb3VudDogbnVtYmVyOyB0b3RhbFNpemU6IG51bWJlciB9O1xuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0RmlsZXMoZGlyczogc3RyaW5nW10sIG91dHB1dDogRmlsZUluZm9bXSkge1xuICAgIGZvciAobGV0IGRpciBvZiBkaXJzKSB7XG4gICAgICAgIGxldCBiYXNlUGF0aCA9IGRpci5lbmRzV2l0aChcIi9cIikgJiYgZGlyIHx8IGRpciArIFwiL1wiO1xuICAgICAgICBhd2FpdCBjb2xsZWN0RGlyKGRpciwgYmFzZVBhdGgsIG91dHB1dCk7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0RGlyKGRpcjogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nLCBvdXRwdXQ6IEZpbGVJbmZvW10pIHtcbiAgICBsZXQgZW50cmllcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBsZXQgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgICAgbGV0IGVudHJ5UGF0aCA9IGJhc2VQYXRoICsgZW50cnkubmFtZTtcbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGNvbGxlY3REaXIoZnVsbFBhdGgsIGVudHJ5UGF0aCArIFwiL1wiLCBvdXRwdXQpO1xuICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICAgICAgICBsZXQgc3RhdHMgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZ1bGxQYXRoKTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKHsgcGF0aDogZW50cnlQYXRoLCBzaXplOiBzdGF0cy5zaXplIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdW1tYXJpemUoZmlsZXM6IEZpbGVJbmZvW10sIHdlaWdodEJ5U2l6ZTogYm9vbGVhbikge1xuICAgIGxldCB0cmVlID0gbmV3IFRyZWVTdW1tYXJ5PEZpbGVJbmZvLCBGaWxlU3VtbWFyeT4oe1xuICAgICAgICBnZXRQYXRoOiBmaWxlID0+IGZpbGUucGF0aCxcbiAgICAgICAgY3JlYXRlU3VtbWFyeTogKCkgPT4gKHsgY291bnQ6IDAsIHRvdGFsU2l6ZTogMCB9KSxcbiAgICAgICAgYWRkVG9TdW1tYXJ5OiAoZmlsZSwgc3VtbWFyeSkgPT4ge1xuICAgICAgICAgICAgc3VtbWFyeS5jb3VudCsrO1xuICAgICAgICAgICAgc3VtbWFyeS50b3RhbFNpemUgKz0gZmlsZS5zaXplO1xuICAgICAgICB9LFxuICAgICAgICBtZXJnZVN1bW1hcmllczogKHRhcmdldCwgc291cmNlKSA9PiB7XG4gICAgICAgICAgICB0YXJnZXQuY291bnQgKz0gc291cmNlLmNvdW50O1xuICAgICAgICAgICAgdGFyZ2V0LnRvdGFsU2l6ZSArPSBzb3VyY2UudG90YWxTaXplO1xuICAgICAgICB9LFxuICAgICAgICBnZXRXZWlnaHQ6IHN1bW1hcnkgPT4ge1xuICAgICAgICAgICAgaWYgKHdlaWdodEJ5U2l6ZSkgcmV0dXJuIHN1bW1hcnkudG90YWxTaXplO1xuICAgICAgICAgICAgcmV0dXJuIHN1bW1hcnkuY291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIGV4cGVjdGVkT3V0cHV0Q291bnQ6IDEwMCxcbiAgICB9KTtcbiAgICBsZXQgYWRkU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIHRyZWUuYWRkKGZpbGUpO1xuICAgIH1cbiAgICBsZXQgYWRkVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gYWRkU3RhcnQ7XG4gICAgbGV0IHF1ZXJ5U3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBsZXQgc3VtbWFyaWVzID0gdHJlZS5nZXRTdW1tYXJpZXMoU1VNTUFSWV9DT1VOVCk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBUSU1JTkdfUlVOUzsgaSsrKSB7XG4gICAgICAgIHN1bW1hcmllcyA9IHRyZWUuZ2V0U3VtbWFyaWVzKFNVTU1BUllfQ09VTlQpO1xuICAgIH1cbiAgICBsZXQgcXVlcnlUaW1lID0gKHBlcmZvcm1hbmNlLm5vdygpIC0gcXVlcnlTdGFydCkgLyBUSU1JTkdfUlVOUztcbiAgICBsZXQgbGFiZWwgPSB3ZWlnaHRCeVNpemUgJiYgXCJzaXplXCIgfHwgXCJjb3VudFwiO1xuICAgIGNvbnNvbGUubG9nKGBcXG49PT0gd2VpZ2h0ZWQgYnkgJHtsYWJlbH0sICR7U1VNTUFSWV9DT1VOVH0gZW50cmllcyA9PT1gKTtcbiAgICBjb25zb2xlLmxvZyhgYWRkOiAke2Zvcm1hdFRpbWUoYWRkVGltZSl9IHRvdGFsIGZvciAke2Zvcm1hdE51bWJlcihmaWxlcy5sZW5ndGgpfSBmaWxlcywgdHJhY2tpbmcgJHtmb3JtYXROdW1iZXIodHJlZS5nZXRUcmFja2VkTm9kZUNvdW50KCkpfSBub2RlcywgZ2V0U3VtbWFyaWVzOiAke2Zvcm1hdFRpbWUocXVlcnlUaW1lKX0gYXZnIG92ZXIgJHtUSU1JTkdfUlVOU30gcnVuc2ApO1xuICAgIGxldCB0b3RhbFdlaWdodCA9IDA7XG4gICAgZm9yIChsZXQgZW50cnkgb2Ygc3VtbWFyaWVzKSB7XG4gICAgICAgIHRvdGFsV2VpZ2h0ICs9IGVudHJ5LndlaWdodDtcbiAgICB9XG4gICAgc29ydChzdW1tYXJpZXMsIGVudHJ5ID0+IC1lbnRyeS53ZWlnaHQpO1xuICAgIC8vIFZlcmlmeSBlYWNoIGVudHJ5IGFnYWluc3QgdGhlIHJhdyBmaWxlIGxpc3Q6IGFzc2lnbiBldmVyeSBmaWxlIHRvIGl0cyBtb3N0IHNwZWNpZmljIGRpc3BsYXllZCBlbnRyeSAoZXhhY3QgcGF0aHMgYmVhdCBwcmVmaXhlcywgbG9uZ2VyIHByZWZpeGVzIGJlYXQgc2hvcnRlciksIHdoaWNoIGlzIHRoZSBwYXJ0aXRpb24gdGhlIGVudHJpZXMgY2xhaW0gdG8gcmVwcmVzZW50LlxuICAgIGxldCBhY3R1YWxzID0gc3VtbWFyaWVzLm1hcCgoKSA9PiAoeyBjb3VudDogMCwgdG90YWxTaXplOiAwIH0pKTtcbiAgICBsZXQgdW5tYXRjaGVkQ291bnQgPSAwO1xuICAgIGxldCB1bm1hdGNoZWRTaXplID0gMDtcbiAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGxldCBiZXN0SW5kZXggPSAtMTtcbiAgICAgICAgbGV0IGJlc3RMZW4gPSAtMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdW1tYXJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBlbnRyeVBhdGggPSBzdW1tYXJpZXNbaV0ucGF0aDtcbiAgICAgICAgICAgIGlmIChlbnRyeVBhdGguZW5kc1dpdGgoXCIqXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByZWZpeCA9IGVudHJ5UGF0aC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggPiBiZXN0TGVuICYmIGZpbGUucGF0aC5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYmVzdEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdExlbiA9IHByZWZpeC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlLnBhdGggPT09IGVudHJ5UGF0aCAmJiBlbnRyeVBhdGgubGVuZ3RoICsgMSA+IGJlc3RMZW4pIHtcbiAgICAgICAgICAgICAgICBiZXN0SW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGJlc3RMZW4gPSBlbnRyeVBhdGgubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYmVzdEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdW5tYXRjaGVkQ291bnQrKztcbiAgICAgICAgICAgIHVubWF0Y2hlZFNpemUgKz0gZmlsZS5zaXplO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYWN0dWFsc1tiZXN0SW5kZXhdLmNvdW50Kys7XG4gICAgICAgIGFjdHVhbHNbYmVzdEluZGV4XS50b3RhbFNpemUgKz0gZmlsZS5zaXplO1xuICAgIH1cbiAgICBsZXQgc2hvd25QZXJjZW50ID0gMDtcbiAgICBsZXQgc3BlY2lmaWNQZXJjZW50ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1bW1hcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgZW50cnkgPSBzdW1tYXJpZXNbaV07XG4gICAgICAgIGxldCBwZXJjZW50ID0gZW50cnkud2VpZ2h0IC8gdG90YWxXZWlnaHQgKiAxMDA7XG4gICAgICAgIHNob3duUGVyY2VudCArPSBwZXJjZW50O1xuICAgICAgICBpZiAoZW50cnkua2luZCA9PT0gXCJzZWxmXCIgfHwgZW50cnkua2luZCA9PT0gXCJzdWJ0cmVlXCIpIHtcbiAgICAgICAgICAgIHNwZWNpZmljUGVyY2VudCArPSBwZXJjZW50O1xuICAgICAgICB9XG4gICAgICAgIGxldCBhY3R1YWwgPSBhY3R1YWxzW2ldO1xuICAgICAgICBsZXQgZGlmZiA9IFwiXCI7XG4gICAgICAgIGlmIChhY3R1YWwuY291bnQgIT09IGVudHJ5LnN1bW1hcnkuY291bnQgfHwgYWN0dWFsLnRvdGFsU2l6ZSAhPT0gZW50cnkuc3VtbWFyeS50b3RhbFNpemUpIHtcbiAgICAgICAgICAgIGRpZmYgPSBgICBESUZGIGFjdHVhbCBmaWxlcz0ke2Zvcm1hdE51bWJlcihhY3R1YWwuY291bnQpfSBzaXplPSR7Zm9ybWF0TnVtYmVyKGFjdHVhbC50b3RhbFNpemUpfUJgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3BlcmNlbnQudG9GaXhlZCgxKS5wYWRTdGFydCg1KX0lICR7ZW50cnkucGF0aC5wYWRFbmQoNjApfSBmaWxlcz0ke2Zvcm1hdE51bWJlcihlbnRyeS5zdW1tYXJ5LmNvdW50KS5wYWRTdGFydCg2KX0gc2l6ZT0keyhmb3JtYXROdW1iZXIoZW50cnkuc3VtbWFyeS50b3RhbFNpemUpICsgXCJCXCIpLnBhZFN0YXJ0KDgpfSR7ZGlmZn1gKTtcbiAgICB9XG4gICAgaWYgKHVubWF0Y2hlZENvdW50ID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgVU5NQVRDSEVEOiAke2Zvcm1hdE51bWJlcih1bm1hdGNoZWRDb3VudCl9IGZpbGVzICgke2Zvcm1hdE51bWJlcih1bm1hdGNoZWRTaXplKX1CKSBtYXRjaGVkIG5vIGRpc3BsYXllZCBlbnRyeWApO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgdG9wICR7c3VtbWFyaWVzLmxlbmd0aH0gZW50cmllcyBjb3ZlciAke3Nob3duUGVyY2VudC50b0ZpeGVkKDEpfSUgKHNwZWNpZmljIHBhdGhzICR7c3BlY2lmaWNQZXJjZW50LnRvRml4ZWQoMSl9JSwgY29tYmluZWQgbGVmdG92ZXJzICR7KHNob3duUGVyY2VudCAtIHNwZWNpZmljUGVyY2VudCkudG9GaXhlZCgxKX0lKWApO1xuICAgIC8vIEVudHJpZXMgYXJlIGEgc3RyaWN0IHBhcnRpdGlvbiAoZWFjaCBmaWxlIGluIGV4YWN0bHkgb25lIGVudHJ5KSwgc28gdGhlc2UgbXVzdCBtYXRjaCB0aGUgcmVhbCB0b3RhbHMgZXhhY3RseS5cbiAgICBsZXQgZW50cnlDb3VudCA9IDA7XG4gICAgbGV0IGVudHJ5U2l6ZSA9IDA7XG4gICAgZm9yIChsZXQgZW50cnkgb2Ygc3VtbWFyaWVzKSB7XG4gICAgICAgIGVudHJ5Q291bnQgKz0gZW50cnkuc3VtbWFyeS5jb3VudDtcbiAgICAgICAgZW50cnlTaXplICs9IGVudHJ5LnN1bW1hcnkudG90YWxTaXplO1xuICAgIH1cbiAgICBsZXQgYWN0dWFsU2l6ZSA9IDA7XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBhY3R1YWxTaXplICs9IGZpbGUuc2l6ZTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYGVudHJ5IHRvdGFsczogZmlsZXM9JHtmb3JtYXROdW1iZXIoZW50cnlDb3VudCl9IChhY3R1YWwgJHtmb3JtYXROdW1iZXIoZmlsZXMubGVuZ3RoKX0pLCBzaXplPSR7Zm9ybWF0TnVtYmVyKGVudHJ5U2l6ZSl9QiAoYWN0dWFsICR7Zm9ybWF0TnVtYmVyKGFjdHVhbFNpemUpfUIpYCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVzKCk6IFByb21pc2U8RmlsZUluZm9bXT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBjYWNoZWQgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKENBQ0hFX0ZJTEUsIFwidXRmOFwiKSkgYXMgeyBkaXJzOiBzdHJpbmdbXTsgZmlsZXM6IEZpbGVJbmZvW10gfTtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGNhY2hlZC5kaXJzKSA9PT0gSlNPTi5zdHJpbmdpZnkoU0NBTl9ESVJTKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGxvYWRlZCAke2Zvcm1hdE51bWJlcihjYWNoZWQuZmlsZXMubGVuZ3RoKX0gZmlsZXMgZnJvbSBjYWNoZSAke0NBQ0hFX0ZJTEV9YCk7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkLmZpbGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBjYWNoZSBkaXJzIGNoYW5nZWQgKGNhY2hlZCAke0pTT04uc3RyaW5naWZ5KGNhY2hlZC5kaXJzKX0sIG5vdyAke0pTT04uc3RyaW5naWZ5KFNDQU5fRElSUyl9KSwgcmVzY2FubmluZ2ApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYG5vIGNhY2hlIGZpbGUgYXQgJHtDQUNIRV9GSUxFfSwgc2Nhbm5pbmdgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjYWNoZSByZWFkIGZhaWxlZCwgcmVzY2FubmluZzpgLCAoZXJyIGFzIEVycm9yKS5zdGFjayA/PyBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBmaWxlczogRmlsZUluZm9bXSA9IFtdO1xuICAgIGxldCBzY2FuU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBhd2FpdCBjb2xsZWN0RmlsZXMoU0NBTl9ESVJTLCBmaWxlcyk7XG4gICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKENBQ0hFX0ZJTEUsIEpTT04uc3RyaW5naWZ5KHsgZGlyczogU0NBTl9ESVJTLCBmaWxlcyB9KSk7XG4gICAgY29uc29sZS5sb2coYHNjYW5uZWQgJHtmb3JtYXROdW1iZXIoZmlsZXMubGVuZ3RoKX0gZmlsZXMgaW4gJHtmb3JtYXRUaW1lKHBlcmZvcm1hbmNlLm5vdygpIC0gc2NhblN0YXJ0KX0sIGNhY2hlZCB0byAke0NBQ0hFX0ZJTEV9YCk7XG4gICAgcmV0dXJuIGZpbGVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICAgIGxldCBmaWxlcyA9IGF3YWl0IGdldEZpbGVzKCk7XG4gICAgY29uc29sZS5sb2coYGNvbGxlY3RlZCAke2Zvcm1hdE51bWJlcihmaWxlcy5sZW5ndGgpfSBmaWxlcyBmcm9tICR7U0NBTl9ESVJTLmpvaW4oXCIsIFwiKX1gKTtcbiAgICBzdW1tYXJpemUoZmlsZXMsIHRydWUpO1xuICAgIHN1bW1hcml6ZShmaWxlcywgZmFsc2UpO1xufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gICAgY29uc29sZS5lcnJvcigoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0=
199
+ /* _JS_SOURCE_HASH = "90802e23dfaf68469b5c319fa6270629c6b9178410c4c003fd4293ec3f46f4f9"; */
package/index.d.ts CHANGED
@@ -3000,6 +3000,35 @@ declare module "sliftutils/storage/remoteStorage/accessPage" {
3000
3000
 
3001
3001
  }
3002
3002
 
3003
+ declare module "sliftutils/storage/remoteStorage/accessStats" {
3004
+ import { SummaryEntry } from "../../treeSummary";
3005
+ export type AccessSummaryState = {
3006
+ total: number;
3007
+ };
3008
+ export type AccessTotals = {
3009
+ [operation: string]: {
3010
+ count: number;
3011
+ size: number;
3012
+ };
3013
+ };
3014
+ /** Counts one storage access, in memory only. size is the bytes involved (0 when the target does not exist); omit it entirely for operations that only count calls, which then only get a count tree. */
3015
+ export declare function trackAccess(config: {
3016
+ account: string;
3017
+ operation: string;
3018
+ path: string;
3019
+ size?: number;
3020
+ }): void;
3021
+ export declare function getAccessTotals(account: string): AccessTotals;
3022
+ export declare function readAccessSummaries(config: {
3023
+ account: string;
3024
+ operation: string;
3025
+ maxCount: number;
3026
+ weightBySize?: boolean;
3027
+ }): SummaryEntry<AccessSummaryState>[];
3028
+ export declare function clearAccountAccessStats(account: string): void;
3029
+
3030
+ }
3031
+
3003
3032
  declare module "sliftutils/storage/remoteStorage/blobStore" {
3004
3033
  /// <reference types="node" />
3005
3034
  /// <reference types="node" />
@@ -3544,6 +3573,8 @@ declare module "sliftutils/storage/remoteStorage/storageController" {
3544
3573
  /// <reference types="node" />
3545
3574
  import { ArchiveFileInfo, ArchivesConfig, ArchivesSyncStatus, ChangesAfterConfig } from "../IArchives";
3546
3575
  import { ServerBucketInfo, ActiveBucketInfo } from "./storageServerState";
3576
+ import { AccessTotals, AccessSummaryState } from "./accessStats";
3577
+ import type { SummaryEntry } from "../../treeSummary";
3547
3578
  export declare const REMOTE_STORAGE_CLASS_GUID = "RemoteStorageController-b7e42a91";
3548
3579
  export declare const STORAGE_AUTH_PURPOSE = "remoteStorage-auth-1";
3549
3580
  export declare const STORAGE_NOT_AUTHENTICATED = "REMOTE_STORAGE_NOT_AUTHENTICATED_cf2f7b1e";
@@ -3630,6 +3661,12 @@ declare module "sliftutils/storage/remoteStorage/storageController" {
3630
3661
  clearWriteStats: (account: string) => Promise<{
3631
3662
  clearedBuckets: number;
3632
3663
  }>;
3664
+ getAccessStats: (account: string) => Promise<AccessTotals>;
3665
+ getAccessSummaries: (account: string, config: {
3666
+ operation: string;
3667
+ maxCount: number;
3668
+ weightBySize?: boolean;
3669
+ }) => Promise<SummaryEntry<AccessSummaryState>[]>;
3633
3670
  getIndexInfo: (account: string, bucketName: string) => Promise<{
3634
3671
  fileCount: number;
3635
3672
  byteCount: number;
@@ -3699,8 +3736,8 @@ declare module "sliftutils/storage/remoteStorage/storageServerState" {
3699
3736
  flushedWrites: number;
3700
3737
  flushedBytes: number;
3701
3738
  };
3702
- /** Zeroes the write statistics of every bucket in the account, including counts not yet flushed. */
3703
- export declare function clearAccountWriteStats(account: string): Promise<number>;
3739
+ /** Zeroes the write statistics of every bucket in the account. */
3740
+ export declare function clearAccountWriteStats(account: string): number;
3704
3741
  export declare function setTrustedMachines(config: {
3705
3742
  account: string;
3706
3743
  machineIds: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliftutils",
3
- "version": "1.7.67",
3
+ "version": "1.7.68",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -0,0 +1,25 @@
1
+ import { SummaryEntry } from "../../treeSummary";
2
+ export type AccessSummaryState = {
3
+ total: number;
4
+ };
5
+ export type AccessTotals = {
6
+ [operation: string]: {
7
+ count: number;
8
+ size: number;
9
+ };
10
+ };
11
+ /** Counts one storage access, in memory only. size is the bytes involved (0 when the target does not exist); omit it entirely for operations that only count calls, which then only get a count tree. */
12
+ export declare function trackAccess(config: {
13
+ account: string;
14
+ operation: string;
15
+ path: string;
16
+ size?: number;
17
+ }): void;
18
+ export declare function getAccessTotals(account: string): AccessTotals;
19
+ export declare function readAccessSummaries(config: {
20
+ account: string;
21
+ operation: string;
22
+ maxCount: number;
23
+ weightBySize?: boolean;
24
+ }): SummaryEntry<AccessSummaryState>[];
25
+ export declare function clearAccountAccessStats(account: string): void;
@@ -0,0 +1,86 @@
1
+ import { TreeSummary, SummaryEntry } from "../../treeSummary";
2
+
3
+ const EXPECTED_OUTPUT_COUNT = 100;
4
+
5
+ export type AccessSummaryState = { total: number };
6
+ export type AccessTotals = { [operation: string]: { count: number; size: number } };
7
+
8
+ type AccessValue = { path: string; size: number };
9
+ type OperationStats = {
10
+ totalCount: number;
11
+ totalSize: number;
12
+ countTree: TreeSummary<AccessValue, AccessSummaryState>;
13
+ // Only exists for operations tracked with sizes; count-only operations (getInfo, del, ...) have no meaningful size breakdown.
14
+ sizeTree?: TreeSummary<AccessValue, AccessSummaryState>;
15
+ };
16
+
17
+ const accounts = new Map<string, Map<string, OperationStats>>();
18
+
19
+ function makeTree(getValue: (value: AccessValue) => number): TreeSummary<AccessValue, AccessSummaryState> {
20
+ return new TreeSummary<AccessValue, AccessSummaryState>({
21
+ getPath: value => value.path,
22
+ createSummary: () => ({ total: 0 }),
23
+ addToSummary: (value, summary) => {
24
+ summary.total += getValue(value);
25
+ },
26
+ mergeSummaries: (target, source) => {
27
+ target.total += source.total;
28
+ },
29
+ getWeight: summary => summary.total,
30
+ expectedOutputCount: EXPECTED_OUTPUT_COUNT,
31
+ });
32
+ }
33
+
34
+ /** Counts one storage access, in memory only. size is the bytes involved (0 when the target does not exist); omit it entirely for operations that only count calls, which then only get a count tree. */
35
+ export function trackAccess(config: { account: string; operation: string; path: string; size?: number }): void {
36
+ let operations = accounts.get(config.account);
37
+ if (!operations) {
38
+ operations = new Map();
39
+ accounts.set(config.account, operations);
40
+ }
41
+ let stats = operations.get(config.operation);
42
+ if (!stats) {
43
+ stats = { totalCount: 0, totalSize: 0, countTree: makeTree(() => 1) };
44
+ operations.set(config.operation, stats);
45
+ }
46
+ let value: AccessValue = { path: config.path, size: config.size || 0 };
47
+ stats.totalCount++;
48
+ stats.countTree.add(value);
49
+ if (config.size !== undefined) {
50
+ let sizeTree = stats.sizeTree;
51
+ if (!sizeTree) {
52
+ sizeTree = makeTree(v => v.size);
53
+ stats.sizeTree = sizeTree;
54
+ }
55
+ stats.totalSize += config.size;
56
+ sizeTree.add(value);
57
+ }
58
+ }
59
+
60
+ export function getAccessTotals(account: string): AccessTotals {
61
+ let result: AccessTotals = {};
62
+ let operations = accounts.get(account);
63
+ if (!operations) return result;
64
+ for (let [operation, stats] of operations) {
65
+ result[operation] = { count: stats.totalCount, size: stats.totalSize };
66
+ }
67
+ return result;
68
+ }
69
+
70
+ export function readAccessSummaries(config: { account: string; operation: string; maxCount: number; weightBySize?: boolean }): SummaryEntry<AccessSummaryState>[] {
71
+ let operations = accounts.get(config.account);
72
+ let stats = operations && operations.get(config.operation);
73
+ if (!stats) return [];
74
+ // Count-only operations have no size tree, in which case weightBySize is ignored and the count breakdown is returned.
75
+ let sizeTree = stats.sizeTree;
76
+ if (config.weightBySize && sizeTree) {
77
+ return sizeTree.getSummaries(config.maxCount);
78
+ }
79
+ return stats.countTree.getSummaries(config.maxCount);
80
+ }
81
+
82
+ export function clearAccountAccessStats(account: string): void {
83
+ if (accounts.delete(account)) {
84
+ console.log(`Cleared the in-memory access statistics for account ${account}`);
85
+ }
86
+ }