@matter/tools 0.12.0-alpha.0-20241219-af74a6a14 → 0.12.0-alpha.0-20241220-ad0dea627

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.
Files changed (49) hide show
  1. package/dist/cjs/building/docs.js +1 -1
  2. package/dist/cjs/building/docs.js.map +1 -1
  3. package/dist/cjs/index.d.ts +1 -0
  4. package/dist/cjs/index.d.ts.map +1 -1
  5. package/dist/cjs/index.js +1 -0
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/util/file.d.ts +15 -3
  8. package/dist/cjs/util/file.d.ts.map +1 -1
  9. package/dist/cjs/util/file.js +24 -82
  10. package/dist/cjs/util/file.js.map +2 -2
  11. package/dist/cjs/util/glob.d.ts +10 -0
  12. package/dist/cjs/util/glob.d.ts.map +1 -0
  13. package/dist/cjs/util/glob.js +111 -0
  14. package/dist/cjs/util/glob.js.map +6 -0
  15. package/dist/cjs/util/index.d.ts +1 -0
  16. package/dist/cjs/util/index.d.ts.map +1 -1
  17. package/dist/cjs/util/index.js +1 -0
  18. package/dist/cjs/util/index.js.map +1 -1
  19. package/dist/cjs/util/package.d.ts.map +1 -1
  20. package/dist/cjs/util/package.js +3 -2
  21. package/dist/cjs/util/package.js.map +1 -1
  22. package/dist/esm/building/docs.js +2 -2
  23. package/dist/esm/building/docs.js.map +1 -1
  24. package/dist/esm/index.d.ts +1 -0
  25. package/dist/esm/index.d.ts.map +1 -1
  26. package/dist/esm/index.js +2 -1
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/util/file.d.ts +15 -3
  29. package/dist/esm/util/file.d.ts.map +1 -1
  30. package/dist/esm/util/file.js +25 -83
  31. package/dist/esm/util/file.js.map +2 -2
  32. package/dist/esm/util/glob.d.ts +10 -0
  33. package/dist/esm/util/glob.d.ts.map +1 -0
  34. package/dist/esm/util/glob.js +91 -0
  35. package/dist/esm/util/glob.js.map +6 -0
  36. package/dist/esm/util/index.d.ts +1 -0
  37. package/dist/esm/util/index.d.ts.map +1 -1
  38. package/dist/esm/util/index.js +2 -1
  39. package/dist/esm/util/index.js.map +1 -1
  40. package/dist/esm/util/package.d.ts.map +1 -1
  41. package/dist/esm/util/package.js +3 -2
  42. package/dist/esm/util/package.js.map +1 -1
  43. package/package.json +2 -2
  44. package/src/building/docs.ts +1 -1
  45. package/src/index.ts +1 -0
  46. package/src/util/file.ts +41 -109
  47. package/src/util/glob.ts +118 -0
  48. package/src/util/index.ts +1 -0
  49. package/src/util/package.ts +3 -1
@@ -7,7 +7,8 @@ import { existsSync, readFileSync, statSync } from "fs";
7
7
  import { readdir, readFile, stat, writeFile } from "fs/promises";
8
8
  import { dirname, join, relative, resolve } from "path";
9
9
  import { ignoreError, ignoreErrorSync } from "./errors.js";
10
- import { globSync, isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
10
+ import { isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
11
+ import { globSync } from "./glob.js";
11
12
  import { Progress } from "./progress.js";
12
13
  import { toolsPath } from "./tools-path.cjs";
13
14
  class JsonNotFoundError extends Error {
@@ -416,4 +417,4 @@ export {
416
417
  JsonNotFoundError,
417
418
  Package
418
419
  };
419
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvcGFja2FnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBpZ25vcmVFcnJvciwgaWdub3JlRXJyb3JTeW5jIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBnbG9iU3luYywgaXNGaWxlLCBtYXliZVJlYWRKc29uU3luYywgbWF5YmVTdGF0U3luYyB9IGZyb20gXCIuL2ZpbGUuanNcIjtcbmltcG9ydCB7IFByb2dyZXNzIH0gZnJvbSBcIi4vcHJvZ3Jlc3MuanNcIjtcbmltcG9ydCB7IHRvb2xzUGF0aCB9IGZyb20gXCIuL3Rvb2xzLXBhdGguY2pzXCI7XG5cbmV4cG9ydCBjbGFzcyBKc29uTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCBjb25zdCBDT05GSUdfUEFUSCA9IGBzcmMvYnVpbGQuY29uZmlnLnRzYDtcbmV4cG9ydCBjb25zdCBDT0RFR0VOX1BBVEggPSBgY29kZWdlbmA7XG5cbmNvbnN0IHBhY2thZ2VGb3JQYXRoID0ge30gYXMgUmVjb3JkPHN0cmluZywgUGFja2FnZSB8IHVuZGVmaW5lZCB8IG51bGw+O1xuXG5mdW5jdGlvbiBmaW5kSnNvbihmaWxlbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcgPSBcIi5cIiwgdGl0bGU/OiBzdHJpbmcpIHtcbiAgICBwYXRoID0gcmVzb2x2ZShwYXRoKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBqc29uID0gaWdub3JlRXJyb3JTeW5jKFtcIkVOT0VOVFwiLCBcIkVOT1RESVJcIl0sICgpID0+XG4gICAgICAgICAgICBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhyZXNvbHZlKHBhdGgsIGZpbGVuYW1lKSkudG9TdHJpbmcoKSksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgICBpZiAodGl0bGUgPT09IHVuZGVmaW5lZCB8fCBqc29uLm5hbWUgPT09IHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm9vdDogcGF0aCwganNvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUocGF0aCk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBKc29uTm90Rm91bmRFcnJvcihgQ291bGQgbm90IGxvY2F0ZSAke3RpdGxlID8/IGZpbGVuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHBhdGggPSBwYXJlbnQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISFpZ25vcmVFcnJvclN5bmMoXCJFTk9FTlRcIiwgKCkgPT4gc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWNrYWdlIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAganNvbjogUGFja2FnZUpzb247XG4gICAgc3VwcG9ydHNFc206IGJvb2xlYW47XG4gICAgc3VwcG9ydHNDanM6IGJvb2xlYW47XG4gICAgaGFzU3JjOiBib29sZWFuO1xuICAgIGhhc1Rlc3RzOiBib29sZWFuO1xuICAgIGhhc0NvbmZpZzogYm9vbGVhbjtcbiAgICBpc0xpYnJhcnk6IGJvb2xlYW47XG4gICAgI2FsaWFzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICBwYXRoID0gXCIuXCIsXG4gICAgICAgIG5hbWUsXG4gICAgfToge1xuICAgICAgICBwYXRoPzogc3RyaW5nO1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH0gPSB7fSkge1xuICAgICAgICBjb25zdCB7IHJvb3QsIGpzb24gfSA9IGZpbmRKc29uKFwicGFja2FnZS5qc29uXCIsIHBhdGgsIG5hbWUpO1xuICAgICAgICB0aGlzLnBhdGggPSByb290O1xuICAgICAgICB0aGlzLmpzb24gPSBqc29uO1xuXG4gICAgICAgIGNvbnN0IHsgZXNtLCBjanMgfSA9IHNlbGVjdEZvcm1hdHModGhpcy5qc29uKTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0VzbSA9IGVzbTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0NqcyA9IGNqcztcblxuICAgICAgICB0aGlzLmhhc1NyYyA9IGlzRGlyZWN0b3J5KHRoaXMucmVzb2x2ZShcInNyY1wiKSk7XG4gICAgICAgIHRoaXMuaGFzVGVzdHMgPSBpc0RpcmVjdG9yeSh0aGlzLnJlc29sdmUoXCJ0ZXN0XCIpKTtcblxuICAgICAgICBjb25zdCByZWZzID0gbWF5YmVSZWFkSnNvblN5bmModGhpcy5yZXNvbHZlKFwidHNjb25maWcuanNvblwiKSk/LnJlZmVyZW5jZXMgYXMgdW5kZWZpbmVkIHwgeyBwYXRoOiBzdHJpbmcgfVtdO1xuICAgICAgICBpZiAocmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwic3JjXCIpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3JjID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwidGVzdFwiKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1Rlc3RzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTGlicmFyeSA9ICEhKHRoaXMuanNvbi5tYWluIHx8IHRoaXMuanNvbi5tb2R1bGUgfHwgdGhpcy5qc29uLmV4cG9ydHMpO1xuXG4gICAgICAgIHRoaXMuaGFzQ29uZmlnID0gdGhpcy5oYXNGaWxlKHRoaXMucmVzb2x2ZShDT05GSUdfUEFUSCkpO1xuICAgIH1cblxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc29uLm5hbWU7XG4gICAgfVxuXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzb24udmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanNvbi5leHBvcnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNDb2RlZ2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RvcnkoQ09ERUdFTl9QQVRIKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnBhdGgsIC4uLnBhdGhzKTtcbiAgICB9XG5cbiAgICByZWxhdGl2ZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlKHRoaXMucGF0aCwgcGF0aCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2xvYihwYXR0ZXJuOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICAvLyBHbG9iIG9ubHkgdW5kZXJzdGFuZHMgZm9yd2FyZC1zbGFzaCBhcyBzZXBhcmF0b3IgYmVjYXVzZSByZWFzb25zXG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucmVzb2x2ZShwYXR0ZXJuKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChzID0+IHRoaXMucmVzb2x2ZShzKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXJyZW50IGdsb2IgaW1wbGVtZW50YXRpb24gaXNuJ3QgYWN0dWFsbHkgYXN5bmMgYXMgdGhpcyBpcyBmYXN0ZXIgYW5kIHdlIG9ubHkgd2FsayBzbWFsbCBkaXJlY3RvcnkgdHJlZXNcbiAgICAgICAgcmV0dXJuIGdsb2JTeW5jKHBhdHRlcm4pO1xuICAgIH1cblxuICAgIHN0YXJ0KHdoYXQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBQcm9ncmVzcygpO1xuICAgICAgICBwcm9ncmVzcy5zdGFydHVwKHdoYXQsIHRoaXMpO1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgYXN5bmMgbGFzdE1vZGlmaWVkKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocy5tYXAocCA9PiB0aGlzLnJlc29sdmUocCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxhc3RNb2RpZmllZEFic29sdXRlKHBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgbXRpbWUgPSAwO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHBhdGhzLm1hcChhc3luYyBwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGlnbm9yZUVycm9yKFwiRU5PRU5UXCIsIGFzeW5jICgpID0+IGF3YWl0IHN0YXQocCkpO1xuICAgICAgICAgICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0aGlzTXRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSAoYXdhaXQgcmVhZGRpcihwKSkubWFwKHAyID0+IHJlc29sdmUocCwgcDIpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gYXdhaXQgdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gc3RhdHMubXRpbWVNcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNNdGltZSA+IG10aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG10aW1lID0gdGhpc010aW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbXRpbWU7XG4gICAgfVxuXG4gICAgZ2V0IGRlcGVuZGVuY2llcygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEFycmF5PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcImRlcGVuZGVuY2llc1wiLCBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCIsIFwiZGV2RGVwZW5kZW5jaWVzXCIsIFwicGVlckRlcGVuZGVuY2llc1wiXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmpzb25bdHlwZV0gPT09IFwib2JqZWN0XCIgJiYgdGhpcy5qc29uW3R5cGVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uT2JqZWN0LmtleXModGhpcy5qc29uW3R5cGVdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJlc3VsdCldO1xuICAgIH1cblxuICAgIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiBQYWNrYWdlLndvcmtzcGFjZUZvcih0aGlzLnBhdGgpO1xuICAgIH1cblxuICAgIGdldCBpc1dvcmtzcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5qc29uLndvcmtzcGFjZXMpO1xuICAgIH1cblxuICAgIGdldCByb290KCk6IFBhY2thZ2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgSnNvbk5vdEZvdW5kRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0IHdvcmtpbmdEaXIod2Q6IHN0cmluZykge1xuICAgICAgICB3b3JraW5nRGlyID0gd2Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtzcGFjZUZvcih3b3JraW5nRGlyKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd29ya3NwYWNlRm9yKGN3ZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghd29ya3NwYWNlKSB7XG4gICAgICAgICAgICB3b3Jrc3BhY2UgPSBmaW5kKGN3ZCwgcGtnID0+IEFycmF5LmlzQXJyYXkocGtnLmpzb24ud29ya3NwYWNlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3Jrc3BhY2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB0b29scygpIHtcbiAgICAgICAgaWYgKCF0b29scykge1xuICAgICAgICAgICAgdG9vbHMgPSBuZXcgUGFja2FnZSh7IHBhdGg6IHRvb2xzUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9vbHM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmRFeHBvcnQobmFtZTogc3RyaW5nLCB0eXBlOiBcImNqc1wiIHwgXCJlc21cIiA9IFwiZXNtXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlLnJlc29sdmVJbXBvcnQobmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUV4cG9ydChuYW1lOiBzdHJpbmcsIHR5cGU6IFwiY2pzXCIgfCBcImVzbVwiID0gXCJlc21cIikge1xuICAgICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgLi8ke25hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBvcnREZXRhaWwgPSB0aGlzLmV4cG9ydHM/LltuYW1lXTtcblxuICAgICAgICBpZiAoZXhwb3J0RGV0YWlsKSB7XG4gICAgICAgICAgICBjb25zdCBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cG9ydERldGFpbCwgdHlwZSk7XG4gICAgICAgICAgICBpZiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZShleHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJlc21cIiAmJiB0aGlzLmpzb24ubW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZSh0aGlzLmpzb24ubW9kdWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmpzb24ubWFpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmUodGhpcy5qc29uLm1haW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHBvcnQgJHtuYW1lfSBpbiBwYWNrYWdlICR7dGhpcy5uYW1lfWApO1xuICAgIH1cblxuICAgIGZpbmRQYWNrYWdlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBsZXQgcmVzb2x2ZUluID0gdGhpcy5wYXRoO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGlzRGlyZWN0b3J5KHJlc29sdmUocmVzb2x2ZUluLCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXNvbHZlSW4gPSBkaXJuYW1lKHJlc29sdmVJbik7XG4gICAgICAgICAgICBpZiAobmV4dFJlc29sdmVJbiA9PT0gcmVzb2x2ZUluKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBtb2R1bGUgJHtuYW1lfSBmcm9tICR7dGhpcy5wYXRofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZUluID0gbmV4dFJlc29sdmVJbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQYWNrYWdlLmZvclBhdGgocmVzb2x2ZShyZXNvbHZlSW4sIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpKTtcbiAgICB9XG5cbiAgICByZXNvbHZlSW1wb3J0KG5hbWU6IHN0cmluZywgdHlwZTogXCJjanNcIiB8IFwiZXNtXCIgPSBcImVzbVwiKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgICAgIGxldCBwYWNrYWdlTmFtZSA9IHNlZ21lbnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgICAgICBpZiAocGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIkBcIikgJiYgc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9IGAke3BhY2thZ2VOYW1lfS8ke3NlZ21lbnRzLnNoaWZ0KCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBrZyA9IHRoaXMuZmluZFBhY2thZ2UocGFja2FnZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiBwa2cucmVzb2x2ZUV4cG9ydChzZWdtZW50cy5sZW5ndGggPyBzZWdtZW50cy5qb2luKFwiL1wiKSA6IFwiLlwiLCB0eXBlKTtcbiAgICB9XG5cbiAgICBoYXNGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNtYXliZVN0YXQocGF0aCk/LmlzRmlsZSgpO1xuICAgIH1cblxuICAgIGhhc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4jbWF5YmVTdGF0KHBhdGgpPy5pc0RpcmVjdG9yeSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcmVhZEZpbGUodGhpcy5yZXNvbHZlKHBhdGgpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIHJlYWRGaWxlU3luYyhwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRGaWxlU3luYyh0aGlzLnJlc29sdmUocGF0aCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgY29udGVudHM6IHVua25vd24pIHtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRoaXMucmVzb2x2ZShwYXRoKSwgYCR7Y29udGVudHN9YCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZUZpbGUoam9pbih0aGlzLnBhdGgsIFwicGFja2FnZS5qc29uXCIpLCBKU09OLnN0cmluZ2lmeSh0aGlzLmpzb24sIHVuZGVmaW5lZCwgNCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRKc29uKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgdGhpcy5yZWFkRmlsZShwYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgZSA9IG5ldyBFcnJvcihgJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKGUgYXMgRXJyb3IpLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBcIiR7dGhpcy5yZXNvbHZlKHBhdGgpfVwiOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVKc29uKHBhdGg6IHN0cmluZywgdmFsdWU6IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGVGaWxlKHBhdGgsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCB1bmRlZmluZWQsIDQpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWF5YmVGb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBmdW5jdGlvbiBmaW5kKHBhdGg6IHN0cmluZyk6IFBhY2thZ2UgfCBudWxsIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBwYWNrYWdlRm9yUGF0aFtwYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChleGlzdHNTeW5jKGpvaW4ocGF0aCwgXCJwYWNrYWdlLmpzb25cIikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYWNrYWdlKHsgcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmaW5kKGRpcm5hbWUocGF0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYWNrYWdlRm9yUGF0aFtwYXRoXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kKHBhdGgpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1heWJlRm9yUGF0aChwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGFja2FnZS5qc29uIGZvciBcIiR7cGF0aH1cImApO1xuICAgIH1cblxuICAgIGdldCBhbGlhc2VzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy4jYWxpYXNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2FsaWFzZXMgPSB7XG4gICAgICAgICAgICAuLi5QYWNrYWdlLm1heWJlRm9yUGF0aChkaXJuYW1lKHRoaXMucGF0aCkpPy5hbGlhc2VzLFxuICAgICAgICAgICAgLi4udGhpcy5qc29uLmltcG9ydHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzZXM7XG4gICAgfVxuXG4gICAgZ2V0IG1vZHVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3RNb2R1bGVzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBnZXQgc291cmNlTW9kdWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdE1vZHVsZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbWFwIG9mIG1vZHVsZSBuYW1lIC0+IGltcGxlbWVudGF0aW9uIGZpbGUuICBJZiBcInNvdXJjZVwiIGlzIHRydWUsIHNlYXJjaGVzIHNvdXJjZSBmaWxlcyByYXRoZXIgdGhhblxuICAgICAqIHRyYW5zcGlsZWQgZmlsZXMuICBXZSBkbyB0aGlzIHJhdGhlciB0aGFuIGZpbmRpbmcgdHJhbnNwaWxhdGlvbiBmaWxlcyB0aGVuIG1hcHBpbmcgdG8gc291cmNlIGZpbGVzIHNvIHRoaXMgd29ya3NcbiAgICAgKiBldmVuIGlmIHRoZXJlIGlzbid0IGEgYnVpbGQuXG4gICAgICovXG4gICAgbGlzdE1vZHVsZXMoc291cmNlOiBib29sZWFuLCAuLi5jb25kaXRpb25zOiBzdHJpbmdbXSkge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25kaXRpb25zID0gW3RoaXMuc3VwcG9ydHNFc20gPyBcImltcG9ydFwiIDogXCJyZXF1aXJlXCIsIFwiZGVmYXVsdFwiXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7XG4gICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiBleHBvcnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIG5ldyBTZXQoY29uZGl0aW9ucyksIG1vZHVsZXMsIHRoaXMubmFtZSwgdGhpcy5wYXRoLCBleHBvcnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb2R1bGVzO1xuICAgIH1cblxuICAgICNtYXliZVN0YXQocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBtYXliZVN0YXRTeW5jKHRoaXMucmVzb2x2ZShwYXRoKSk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGltcG9ydHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWF0dGVyPzoge1xuICAgICAgICB0ZXN0PzogYm9vbGVhbjtcbiAgICB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbmxldCB3b3JraW5nRGlyID0gXCIuXCI7XG5sZXQgd29ya3NwYWNlOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xubGV0IHRvb2xzOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBmaW5kKHN0YXJ0RGlyOiBzdHJpbmcsIHNlbGVjdG9yOiAocGtnOiBQYWNrYWdlKSA9PiBib29sZWFuKTogUGFja2FnZSB7XG4gICAgbGV0IHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogc3RhcnREaXIgfSk7XG4gICAgd2hpbGUgKCFzZWxlY3Rvcihwa2cpKSB7XG4gICAgICAgIHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogZGlybmFtZShwa2cucGF0aCkgfSk7XG4gICAgfVxuICAgIHJldHVybiBwa2c7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZvcm1hdHMoanNvbjogYW55KSB7XG4gICAgbGV0IGVzbTogYm9vbGVhbiwgY2pzOiBib29sZWFuO1xuXG4gICAgaWYgKGpzb24udHlwZSA9PT0gXCJtb2R1bGVcIikge1xuICAgICAgICBlc20gPSB0cnVlO1xuICAgICAgICBjanMgPVxuICAgICAgICAgICAgKGpzb24ubWFpbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubW9kdWxlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoanNvbi5leHBvcnRzID8/IHt9KS5maW5kKChleHA6IGFueSkgPT4gZXhwLnJlcXVpcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNqcyA9IHRydWU7XG4gICAgICAgIGVzbSA9ICEhanNvbi5tb2R1bGUgfHwgISFPYmplY3QudmFsdWVzKGpzb24uZXhwb3J0cyA/PyB7fSkuZmluZCgoZXhwOiBhbnkpID0+IGV4cC5pbXBvcnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGVzbSwgY2pzIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFeHBvcnRDb25kaXRpb24oZGV0YWlsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB0eXBlOiBcImVzbVwiIHwgXCJjanNcIik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGUgPT09IFwiZXNtXCIgJiYgZGV0YWlsLmltcG9ydCkge1xuICAgICAgICBsZXQgZXhwID0gZGV0YWlsLmltcG9ydDtcbiAgICAgICAgaWYgKGV4cCAmJiB0eXBlb2YgZXhwICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleHAgPSBkZXRhaWwucmVxdWlyZSA/PyBkZXRhaWwubm9kZSA/PyBkZXRhaWwuZGVmYXVsdDtcbiAgICBpZiAoZXhwICYmIHR5cGVvZiBleHAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZXhwID0gZmluZEV4cG9ydENvbmRpdGlvbihleHAsIHR5cGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHA7XG4gICAgfVxufVxuXG50eXBlIENvbmRpdGlvbnMgPSB7IFtuYW1lOiBzdHJpbmddOiBFeHBvcnRzIH07XG5cbnR5cGUgRXhwb3J0cyA9IHN0cmluZyB8IENvbmRpdGlvbnMgfCBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25zPjtcblxuZnVuY3Rpb24gZmluZE1vZHVsZXMoXG4gICAgc291cmNlOiBib29sZWFuLFxuICAgIGNvbmRpdGlvbnM6IFNldDxzdHJpbmc+LFxuICAgIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZXhwb3J0czogRXhwb3J0cyxcbikge1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBhZGRNb2R1bGVHbG9icyhzb3VyY2UsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBleHBvcnRzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhwb3J0cykpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBleHBvcnRzKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV4cG9ydHMpIHtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgam9pbihwcmVmaXgsIGtleSksIHBhdGgsIGV4cG9ydHNba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzZWxlY3RlZENvbmRpdGlvbiAmJiBjb25kaXRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZmluZE1vZHVsZXMoc291cmNlLCBjb25kaXRpb25zLCB0YXJnZXQsIHByZWZpeCwgcGF0aCwgZXhwb3J0c1trZXldKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmRpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYWxmb3JtZWQgZXhwb3J0cyBmaWVsZCBpbiBwYWNrYWdlLmpzb25cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRNb2R1bGVHbG9icyhzb3VyY2U6IGJvb2xlYW4sIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbmFtZTogc3RyaW5nLCBiYXNlOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIGxldCBwYXRoID0gam9pbihiYXNlLCBwYXR0ZXJuKTtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcL2Rpc3RcXC8oPzplc218Y2pzKVxcLy8sIFwiL3NyYy9cIik7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICAgIC8vIFdpbGRjYXJkXG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi8qXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdpbGRjYXJkIGluIG1vZHVsZSAke25hbWV9IGRvZXMgbm90IGFwcGVhciBhcyBmaW5hbCBwYXRoIHNlZ21lbnRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgICBjb25zdCBwYXRocyA9IGdsb2JTeW5jKHNvdXJjZSA/IHBhdGgucmVwbGFjZSgvXFwuanMkLywgXCIue3RzLGpzLGNqcyxtanN9XCIpIDogcGF0aCk7XG4gICAgICAgIGlmICghcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1hdGNoIGZvciBtb2R1bGUgJHtuYW1lfSBwYXR0ZXJuICR7cGF0dGVybn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtwcmVmaXgsIHN1ZmZpeF0gPSBwYXRoLnNwbGl0KC9cXCorLyk7XG4gICAgICAgIGNvbnN0IHByZWZpeExlbmd0aCA9IHByZWZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExlbmd0aCA9IHN1ZmZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHN1ZmZpeC5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aGlzUGF0aCBvZiBwYXRocykge1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVyID0gdGhpc1BhdGguc3Vic3RyaW5nKHByZWZpeExlbmd0aCwgdGhpc1BhdGgubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOYW1lID0gam9pbihuYW1lLCBxdWFsaWZpZXIpO1xuICAgICAgICAgICAgdGFyZ2V0W3RoaXNOYW1lXSA9IHRoaXNQYXRoO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuICAgICAgICAvLyBBIHdpbGRjYXJkIHBhdGggaXMgb25seSB2YWxpZCB3aXRoIHdpbGRjYXJkIG5hbWVcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaWxkY2FyZCBpbiBtb2R1bGUgcGF0aCBcIiR7cGF0aH1cIiBidXQgbm90IGluIG1vZHVsZSBcIiR7bmFtZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkIC0tIHJlbW92ZSBkaXJlY3RvcnlcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvXFwvKD86ZXhwb3J0fGluZGV4KSQvLCBcIlwiKTtcblxuICAgICAgICAvLyBMb29rIGZvciBzb3VyY2UgaWYgZmlsZSBpc24ndCBwcmVzZW50XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNGaWxlKHBhdGgpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc291cmNlICYmIHBhdGguZW5kc1dpdGgoXCIuanNcIikpIHtcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLmpzJC8sIFwiLnRzXCIpO1xuICAgICAgICAgICAgaWYgKGlzRmlsZShwYXRoKSkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIFwiJHtuYW1lfVwiIHBhdGggXCIke3BhdGh9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRbbmFtZV0gPSBwYXRoO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLFlBQVksY0FBYyxnQkFBZ0I7QUFDbkQsU0FBUyxTQUFTLFVBQVUsTUFBTSxpQkFBaUI7QUFDbkQsU0FBUyxTQUFTLE1BQU0sVUFBVSxlQUFlO0FBQ2pELFNBQVMsYUFBYSx1QkFBdUI7QUFDN0MsU0FBUyxVQUFVLFFBQVEsbUJBQW1CLHFCQUFxQjtBQUNuRSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGlCQUFpQjtBQUVuQixNQUFNLDBCQUEwQixNQUFNO0FBQUM7QUFFdkMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZTtBQUU1QixNQUFNLGlCQUFpQixDQUFDO0FBRXhCLFNBQVMsU0FBUyxVQUFrQixPQUFlLEtBQUssT0FBZ0I7QUFDcEUsU0FBTyxRQUFRLElBQUk7QUFDbkIsU0FBTyxNQUFNO0FBQ1QsVUFBTSxPQUFPO0FBQUEsTUFBZ0IsQ0FBQyxVQUFVLFNBQVM7QUFBQSxNQUFHLE1BQ2hELEtBQUssTUFBTSxhQUFhLFFBQVEsTUFBTSxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7QUFBQSxJQUMvRDtBQUNBLFFBQUksTUFBTTtBQUNOLFVBQUksVUFBVSxVQUFhLEtBQUssU0FBUyxPQUFPO0FBQzVDLGVBQU8sRUFBRSxNQUFNLE1BQU0sS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDSjtBQUNBLFVBQU0sU0FBUyxRQUFRLElBQUk7QUFDM0IsUUFBSSxXQUFXLE1BQU07QUFDakIsWUFBTSxJQUFJLGtCQUFrQixvQkFBb0IsU0FBUyxRQUFRLEVBQUU7QUFB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
420
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWwvcGFja2FnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjItMjAyNCBNYXR0ZXIuanMgQXV0aG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBpZ25vcmVFcnJvciwgaWdub3JlRXJyb3JTeW5jIH0gZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBpc0ZpbGUsIG1heWJlUmVhZEpzb25TeW5jLCBtYXliZVN0YXRTeW5jIH0gZnJvbSBcIi4vZmlsZS5qc1wiO1xuaW1wb3J0IHsgZ2xvYlN5bmMgfSBmcm9tIFwiLi9nbG9iLmpzXCI7XG5pbXBvcnQgeyBQcm9ncmVzcyB9IGZyb20gXCIuL3Byb2dyZXNzLmpzXCI7XG5pbXBvcnQgeyB0b29sc1BhdGggfSBmcm9tIFwiLi90b29scy1wYXRoLmNqc1wiO1xuXG5leHBvcnQgY2xhc3MgSnNvbk5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQgY29uc3QgQ09ORklHX1BBVEggPSBgc3JjL2J1aWxkLmNvbmZpZy50c2A7XG5leHBvcnQgY29uc3QgQ09ERUdFTl9QQVRIID0gYGNvZGVnZW5gO1xuXG5jb25zdCBwYWNrYWdlRm9yUGF0aCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIFBhY2thZ2UgfCB1bmRlZmluZWQgfCBudWxsPjtcblxuZnVuY3Rpb24gZmluZEpzb24oZmlsZW5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nID0gXCIuXCIsIHRpdGxlPzogc3RyaW5nKSB7XG4gICAgcGF0aCA9IHJlc29sdmUocGF0aCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QganNvbiA9IGlnbm9yZUVycm9yU3luYyhbXCJFTk9FTlRcIiwgXCJFTk9URElSXCJdLCAoKSA9PlxuICAgICAgICAgICAgSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocmVzb2x2ZShwYXRoLCBmaWxlbmFtZSkpLnRvU3RyaW5nKCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgICBpZiAodGl0bGUgPT09IHVuZGVmaW5lZCB8fCBqc29uLm5hbWUgPT09IHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm9vdDogcGF0aCwganNvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUocGF0aCk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBKc29uTm90Rm91bmRFcnJvcihgQ291bGQgbm90IGxvY2F0ZSAke3RpdGxlID8/IGZpbGVuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHBhdGggPSBwYXJlbnQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gISFpZ25vcmVFcnJvclN5bmMoXCJFTk9FTlRcIiwgKCkgPT4gc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWNrYWdlIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAganNvbjogUGFja2FnZUpzb247XG4gICAgc3VwcG9ydHNFc206IGJvb2xlYW47XG4gICAgc3VwcG9ydHNDanM6IGJvb2xlYW47XG4gICAgaGFzU3JjOiBib29sZWFuO1xuICAgIGhhc1Rlc3RzOiBib29sZWFuO1xuICAgIGhhc0NvbmZpZzogYm9vbGVhbjtcbiAgICBpc0xpYnJhcnk6IGJvb2xlYW47XG4gICAgI2FsaWFzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICBwYXRoID0gXCIuXCIsXG4gICAgICAgIG5hbWUsXG4gICAgfToge1xuICAgICAgICBwYXRoPzogc3RyaW5nO1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgIH0gPSB7fSkge1xuICAgICAgICBjb25zdCB7IHJvb3QsIGpzb24gfSA9IGZpbmRKc29uKFwicGFja2FnZS5qc29uXCIsIHBhdGgsIG5hbWUpO1xuICAgICAgICB0aGlzLnBhdGggPSByb290O1xuICAgICAgICB0aGlzLmpzb24gPSBqc29uO1xuXG4gICAgICAgIGNvbnN0IHsgZXNtLCBjanMgfSA9IHNlbGVjdEZvcm1hdHModGhpcy5qc29uKTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0VzbSA9IGVzbTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0NqcyA9IGNqcztcblxuICAgICAgICB0aGlzLmhhc1NyYyA9IGlzRGlyZWN0b3J5KHRoaXMucmVzb2x2ZShcInNyY1wiKSk7XG4gICAgICAgIHRoaXMuaGFzVGVzdHMgPSBpc0RpcmVjdG9yeSh0aGlzLnJlc29sdmUoXCJ0ZXN0XCIpKTtcblxuICAgICAgICBjb25zdCByZWZzID0gbWF5YmVSZWFkSnNvblN5bmModGhpcy5yZXNvbHZlKFwidHNjb25maWcuanNvblwiKSk/LnJlZmVyZW5jZXMgYXMgdW5kZWZpbmVkIHwgeyBwYXRoOiBzdHJpbmcgfVtdO1xuICAgICAgICBpZiAocmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwic3JjXCIpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3JjID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlZnMuZmluZChyZWYgPT4gdGhpcy5yZXNvbHZlKHJlZi5wYXRoKSA9PT0gdGhpcy5yZXNvbHZlKFwidGVzdFwiKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1Rlc3RzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTGlicmFyeSA9ICEhKHRoaXMuanNvbi5tYWluIHx8IHRoaXMuanNvbi5tb2R1bGUgfHwgdGhpcy5qc29uLmV4cG9ydHMpO1xuXG4gICAgICAgIHRoaXMuaGFzQ29uZmlnID0gdGhpcy5oYXNGaWxlKHRoaXMucmVzb2x2ZShDT05GSUdfUEFUSCkpO1xuICAgIH1cblxuICAgIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc29uLm5hbWU7XG4gICAgfVxuXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzb24udmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanNvbi5leHBvcnRzO1xuICAgIH1cblxuICAgIGdldCBoYXNDb2RlZ2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RvcnkoQ09ERUdFTl9QQVRIKTtcbiAgICB9XG5cbiAgICByZXNvbHZlKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLnBhdGgsIC4uLnBhdGhzKTtcbiAgICB9XG5cbiAgICByZWxhdGl2ZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlKHRoaXMucGF0aCwgcGF0aCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2xvYihwYXR0ZXJuOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICAvLyBHbG9iIG9ubHkgdW5kZXJzdGFuZHMgZm9yd2FyZC1zbGFzaCBhcyBzZXBhcmF0b3IgYmVjYXVzZSByZWFzb25zXG4gICAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucmVzb2x2ZShwYXR0ZXJuKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChzID0+IHRoaXMucmVzb2x2ZShzKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXJyZW50IGdsb2IgaW1wbGVtZW50YXRpb24gaXNuJ3QgYWN0dWFsbHkgYXN5bmMgYXMgdGhpcyBpcyBmYXN0ZXIgYW5kIHdlIG9ubHkgd2FsayBzbWFsbCBkaXJlY3RvcnkgdHJlZXNcbiAgICAgICAgcmV0dXJuIGdsb2JTeW5jKHBhdHRlcm4pO1xuICAgIH1cblxuICAgIHN0YXJ0KHdoYXQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBQcm9ncmVzcygpO1xuICAgICAgICBwcm9ncmVzcy5zdGFydHVwKHdoYXQsIHRoaXMpO1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgYXN5bmMgbGFzdE1vZGlmaWVkKC4uLnBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocy5tYXAocCA9PiB0aGlzLnJlc29sdmUocCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGxhc3RNb2RpZmllZEFic29sdXRlKHBhdGhzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgbXRpbWUgPSAwO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHBhdGhzLm1hcChhc3luYyBwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGlnbm9yZUVycm9yKFwiRU5PRU5UXCIsIGFzeW5jICgpID0+IGF3YWl0IHN0YXQocCkpO1xuICAgICAgICAgICAgICAgIGlmICghc3RhdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCB0aGlzTXRpbWU7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSAoYXdhaXQgcmVhZGRpcihwKSkubWFwKHAyID0+IHJlc29sdmUocCwgcDIpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gYXdhaXQgdGhpcy5sYXN0TW9kaWZpZWRBYnNvbHV0ZShwYXRocyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc010aW1lID0gc3RhdHMubXRpbWVNcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNNdGltZSA+IG10aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG10aW1lID0gdGhpc010aW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbXRpbWU7XG4gICAgfVxuXG4gICAgZ2V0IGRlcGVuZGVuY2llcygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEFycmF5PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcImRlcGVuZGVuY2llc1wiLCBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCIsIFwiZGV2RGVwZW5kZW5jaWVzXCIsIFwicGVlckRlcGVuZGVuY2llc1wiXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmpzb25bdHlwZV0gPT09IFwib2JqZWN0XCIgJiYgdGhpcy5qc29uW3R5cGVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4uT2JqZWN0LmtleXModGhpcy5qc29uW3R5cGVdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJlc3VsdCldO1xuICAgIH1cblxuICAgIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiBQYWNrYWdlLndvcmtzcGFjZUZvcih0aGlzLnBhdGgpO1xuICAgIH1cblxuICAgIGdldCBpc1dvcmtzcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5qc29uLndvcmtzcGFjZXMpO1xuICAgIH1cblxuICAgIGdldCByb290KCk6IFBhY2thZ2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgSnNvbk5vdEZvdW5kRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0IHdvcmtpbmdEaXIod2Q6IHN0cmluZykge1xuICAgICAgICB3b3JraW5nRGlyID0gd2Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB3b3Jrc3BhY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndvcmtzcGFjZUZvcih3b3JraW5nRGlyKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd29ya3NwYWNlRm9yKGN3ZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghd29ya3NwYWNlKSB7XG4gICAgICAgICAgICB3b3Jrc3BhY2UgPSBmaW5kKGN3ZCwgcGtnID0+IEFycmF5LmlzQXJyYXkocGtnLmpzb24ud29ya3NwYWNlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3Jrc3BhY2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCB0b29scygpIHtcbiAgICAgICAgaWYgKCF0b29scykge1xuICAgICAgICAgICAgdG9vbHMgPSBuZXcgUGFja2FnZSh7IHBhdGg6IHRvb2xzUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9vbHM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmRFeHBvcnQobmFtZTogc3RyaW5nLCB0eXBlOiBcImNqc1wiIHwgXCJlc21cIiA9IFwiZXNtXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya3NwYWNlLnJlc29sdmVJbXBvcnQobmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUV4cG9ydChuYW1lOiBzdHJpbmcsIHR5cGU6IFwiY2pzXCIgfCBcImVzbVwiID0gXCJlc21cIikge1xuICAgICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgLi8ke25hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHBvcnREZXRhaWwgPSB0aGlzLmV4cG9ydHM/LltuYW1lXTtcblxuICAgICAgICBpZiAoZXhwb3J0RGV0YWlsKSB7XG4gICAgICAgICAgICBjb25zdCBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cG9ydERldGFpbCwgdHlwZSk7XG4gICAgICAgICAgICBpZiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZShleHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJlc21cIiAmJiB0aGlzLmpzb24ubW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZSh0aGlzLmpzb24ubW9kdWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmpzb24ubWFpbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmUodGhpcy5qc29uLm1haW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHBvcnQgJHtuYW1lfSBpbiBwYWNrYWdlICR7dGhpcy5uYW1lfWApO1xuICAgIH1cblxuICAgIGZpbmRQYWNrYWdlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBsZXQgcmVzb2x2ZUluID0gdGhpcy5wYXRoO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKGlzRGlyZWN0b3J5KHJlc29sdmUocmVzb2x2ZUluLCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXNvbHZlSW4gPSBkaXJuYW1lKHJlc29sdmVJbik7XG4gICAgICAgICAgICBpZiAobmV4dFJlc29sdmVJbiA9PT0gcmVzb2x2ZUluKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBtb2R1bGUgJHtuYW1lfSBmcm9tICR7dGhpcy5wYXRofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZUluID0gbmV4dFJlc29sdmVJbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQYWNrYWdlLmZvclBhdGgocmVzb2x2ZShyZXNvbHZlSW4sIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpKTtcbiAgICB9XG5cbiAgICByZXNvbHZlSW1wb3J0KG5hbWU6IHN0cmluZywgdHlwZTogXCJjanNcIiB8IFwiZXNtXCIgPSBcImVzbVwiKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gICAgICAgIGxldCBwYWNrYWdlTmFtZSA9IHNlZ21lbnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgICAgICBpZiAocGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIkBcIikgJiYgc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9IGAke3BhY2thZ2VOYW1lfS8ke3NlZ21lbnRzLnNoaWZ0KCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBrZyA9IHRoaXMuZmluZFBhY2thZ2UocGFja2FnZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiBwa2cucmVzb2x2ZUV4cG9ydChzZWdtZW50cy5sZW5ndGggPyBzZWdtZW50cy5qb2luKFwiL1wiKSA6IFwiLlwiLCB0eXBlKTtcbiAgICB9XG5cbiAgICBoYXNGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gISF0aGlzLiNtYXliZVN0YXQocGF0aCk/LmlzRmlsZSgpO1xuICAgIH1cblxuICAgIGhhc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4jbWF5YmVTdGF0KHBhdGgpPy5pc0RpcmVjdG9yeSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRGaWxlKHBhdGg6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gcmVhZEZpbGUodGhpcy5yZXNvbHZlKHBhdGgpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIHJlYWRGaWxlU3luYyhwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRGaWxlU3luYyh0aGlzLnJlc29sdmUocGF0aCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgY29udGVudHM6IHVua25vd24pIHtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRoaXMucmVzb2x2ZShwYXRoKSwgYCR7Y29udGVudHN9YCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZUZpbGUoam9pbih0aGlzLnBhdGgsIFwicGFja2FnZS5qc29uXCIpLCBKU09OLnN0cmluZ2lmeSh0aGlzLmpzb24sIHVuZGVmaW5lZCwgNCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlYWRKc29uKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgdGhpcy5yZWFkRmlsZShwYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgZSA9IG5ldyBFcnJvcihgJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKGUgYXMgRXJyb3IpLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBcIiR7dGhpcy5yZXNvbHZlKHBhdGgpfVwiOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWA7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVKc29uKHBhdGg6IHN0cmluZywgdmFsdWU6IHt9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGVGaWxlKHBhdGgsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCB1bmRlZmluZWQsIDQpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWF5YmVGb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBmdW5jdGlvbiBmaW5kKHBhdGg6IHN0cmluZyk6IFBhY2thZ2UgfCBudWxsIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBwYWNrYWdlRm9yUGF0aFtwYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChleGlzdHNTeW5jKGpvaW4ocGF0aCwgXCJwYWNrYWdlLmpzb25cIikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBQYWNrYWdlKHsgcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmaW5kKGRpcm5hbWUocGF0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYWNrYWdlRm9yUGF0aFtwYXRoXSA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kKHBhdGgpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1heWJlRm9yUGF0aChwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGFja2FnZS5qc29uIGZvciBcIiR7cGF0aH1cImApO1xuICAgIH1cblxuICAgIGdldCBhbGlhc2VzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy4jYWxpYXNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2FsaWFzZXMgPSB7XG4gICAgICAgICAgICAuLi5QYWNrYWdlLm1heWJlRm9yUGF0aChkaXJuYW1lKHRoaXMucGF0aCkpPy5hbGlhc2VzLFxuICAgICAgICAgICAgLi4udGhpcy5qc29uLmltcG9ydHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzZXM7XG4gICAgfVxuXG4gICAgZ2V0IG1vZHVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3RNb2R1bGVzKGZhbHNlKTtcbiAgICB9XG5cbiAgICBnZXQgc291cmNlTW9kdWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdE1vZHVsZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbWFwIG9mIG1vZHVsZSBuYW1lIC0+IGltcGxlbWVudGF0aW9uIGZpbGUuICBJZiBcInNvdXJjZVwiIGlzIHRydWUsIHNlYXJjaGVzIHNvdXJjZSBmaWxlcyByYXRoZXIgdGhhblxuICAgICAqIHRyYW5zcGlsZWQgZmlsZXMuICBXZSBkbyB0aGlzIHJhdGhlciB0aGFuIGZpbmRpbmcgdHJhbnNwaWxhdGlvbiBmaWxlcyB0aGVuIG1hcHBpbmcgdG8gc291cmNlIGZpbGVzIHNvIHRoaXMgd29ya3NcbiAgICAgKiBldmVuIGlmIHRoZXJlIGlzbid0IGEgYnVpbGQuXG4gICAgICovXG4gICAgbGlzdE1vZHVsZXMoc291cmNlOiBib29sZWFuLCAuLi5jb25kaXRpb25zOiBzdHJpbmdbXSkge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25kaXRpb25zID0gW3RoaXMuc3VwcG9ydHNFc20gPyBcImltcG9ydFwiIDogXCJyZXF1aXJlXCIsIFwiZGVmYXVsdFwiXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7XG4gICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiBleHBvcnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIG5ldyBTZXQoY29uZGl0aW9ucyksIG1vZHVsZXMsIHRoaXMubmFtZSwgdGhpcy5wYXRoLCBleHBvcnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb2R1bGVzO1xuICAgIH1cblxuICAgICNtYXliZVN0YXQocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBtYXliZVN0YXRTeW5jKHRoaXMucmVzb2x2ZShwYXRoKSk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWNrYWdlSnNvbiA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGltcG9ydHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbWF0dGVyPzoge1xuICAgICAgICB0ZXN0PzogYm9vbGVhbjtcbiAgICB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5cbmxldCB3b3JraW5nRGlyID0gXCIuXCI7XG5sZXQgd29ya3NwYWNlOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xubGV0IHRvb2xzOiBQYWNrYWdlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBmaW5kKHN0YXJ0RGlyOiBzdHJpbmcsIHNlbGVjdG9yOiAocGtnOiBQYWNrYWdlKSA9PiBib29sZWFuKTogUGFja2FnZSB7XG4gICAgbGV0IHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogc3RhcnREaXIgfSk7XG4gICAgd2hpbGUgKCFzZWxlY3Rvcihwa2cpKSB7XG4gICAgICAgIHBrZyA9IG5ldyBQYWNrYWdlKHsgcGF0aDogZGlybmFtZShwa2cucGF0aCkgfSk7XG4gICAgfVxuICAgIHJldHVybiBwa2c7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZvcm1hdHMoanNvbjogYW55KSB7XG4gICAgbGV0IGVzbTogYm9vbGVhbiwgY2pzOiBib29sZWFuO1xuXG4gICAgaWYgKGpzb24udHlwZSA9PT0gXCJtb2R1bGVcIikge1xuICAgICAgICBlc20gPSB0cnVlO1xuICAgICAgICBjanMgPVxuICAgICAgICAgICAgKGpzb24ubWFpbiAhPT0gdW5kZWZpbmVkICYmIGpzb24ubW9kdWxlICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoanNvbi5leHBvcnRzID8/IHt9KS5maW5kKChleHA6IGFueSkgPT4gZXhwLnJlcXVpcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNqcyA9IHRydWU7XG4gICAgICAgIGVzbSA9ICEhanNvbi5tb2R1bGUgfHwgISFPYmplY3QudmFsdWVzKGpzb24uZXhwb3J0cyA/PyB7fSkuZmluZCgoZXhwOiBhbnkpID0+IGV4cC5pbXBvcnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGVzbSwgY2pzIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFeHBvcnRDb25kaXRpb24oZGV0YWlsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB0eXBlOiBcImVzbVwiIHwgXCJjanNcIik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGUgPT09IFwiZXNtXCIgJiYgZGV0YWlsLmltcG9ydCkge1xuICAgICAgICBsZXQgZXhwID0gZGV0YWlsLmltcG9ydDtcbiAgICAgICAgaWYgKGV4cCAmJiB0eXBlb2YgZXhwICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBleHAgPSBmaW5kRXhwb3J0Q29uZGl0aW9uKGV4cCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBleHAgPSBkZXRhaWwucmVxdWlyZSA/PyBkZXRhaWwubm9kZSA/PyBkZXRhaWwuZGVmYXVsdDtcbiAgICBpZiAoZXhwICYmIHR5cGVvZiBleHAgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZXhwID0gZmluZEV4cG9ydENvbmRpdGlvbihleHAsIHR5cGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBleHA7XG4gICAgfVxufVxuXG50eXBlIENvbmRpdGlvbnMgPSB7IFtuYW1lOiBzdHJpbmddOiBFeHBvcnRzIH07XG5cbnR5cGUgRXhwb3J0cyA9IHN0cmluZyB8IENvbmRpdGlvbnMgfCBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25zPjtcblxuZnVuY3Rpb24gZmluZE1vZHVsZXMoXG4gICAgc291cmNlOiBib29sZWFuLFxuICAgIGNvbmRpdGlvbnM6IFNldDxzdHJpbmc+LFxuICAgIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwcmVmaXg6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZXhwb3J0czogRXhwb3J0cyxcbikge1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBhZGRNb2R1bGVHbG9icyhzb3VyY2UsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBleHBvcnRzKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXhwb3J0cykpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBleHBvcnRzKSB7XG4gICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgcHJlZml4LCBwYXRoLCBlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIGV4cG9ydHMgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV4cG9ydHMpIHtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgICAgICBmaW5kTW9kdWxlcyhzb3VyY2UsIGNvbmRpdGlvbnMsIHRhcmdldCwgam9pbihwcmVmaXgsIGtleSksIHBhdGgsIGV4cG9ydHNba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzZWxlY3RlZENvbmRpdGlvbiAmJiBjb25kaXRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZmluZE1vZHVsZXMoc291cmNlLCBjb25kaXRpb25zLCB0YXJnZXQsIHByZWZpeCwgcGF0aCwgZXhwb3J0c1trZXldKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmRpdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYWxmb3JtZWQgZXhwb3J0cyBmaWVsZCBpbiBwYWNrYWdlLmpzb25cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRNb2R1bGVHbG9icyhzb3VyY2U6IGJvb2xlYW4sIHRhcmdldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbmFtZTogc3RyaW5nLCBiYXNlOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIGxldCBwYXRoID0gam9pbihiYXNlLCBwYXR0ZXJuKTtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcL2Rpc3RcXC8oPzplc218Y2pzKVxcLy8sIFwiL3NyYy9cIik7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUuaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICAgIC8vIFdpbGRjYXJkXG4gICAgICAgIGlmICghbmFtZS5lbmRzV2l0aChcIi8qXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdpbGRjYXJkIGluIG1vZHVsZSAke25hbWV9IGRvZXMgbm90IGFwcGVhciBhcyBmaW5hbCBwYXRoIHNlZ21lbnRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgICBjb25zdCBwYXRocyA9IGdsb2JTeW5jKHNvdXJjZSA/IHBhdGgucmVwbGFjZSgvXFwuanMkLywgXCIue3RzLGpzLGNqcyxtanN9XCIpIDogcGF0aCk7XG4gICAgICAgIGlmICghcGF0aHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1hdGNoIGZvciBtb2R1bGUgJHtuYW1lfSBwYXR0ZXJuICR7cGF0dGVybn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtwcmVmaXgsIHN1ZmZpeF0gPSBwYXRoLnNwbGl0KC9cXCorLyk7XG4gICAgICAgIGNvbnN0IHByZWZpeExlbmd0aCA9IHByZWZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExlbmd0aCA9IHN1ZmZpeCA9PT0gdW5kZWZpbmVkID8gMCA6IHN1ZmZpeC5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aGlzUGF0aCBvZiBwYXRocykge1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVyID0gdGhpc1BhdGguc3Vic3RyaW5nKHByZWZpeExlbmd0aCwgdGhpc1BhdGgubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOYW1lID0gam9pbihuYW1lLCBxdWFsaWZpZXIpO1xuICAgICAgICAgICAgdGFyZ2V0W3RoaXNOYW1lXSA9IHRoaXNQYXRoO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChwYXRoLmluY2x1ZGVzKFwiKlwiKSkge1xuICAgICAgICAvLyBBIHdpbGRjYXJkIHBhdGggaXMgb25seSB2YWxpZCB3aXRoIHdpbGRjYXJkIG5hbWVcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXaWxkY2FyZCBpbiBtb2R1bGUgcGF0aCBcIiR7cGF0aH1cIiBidXQgbm90IGluIG1vZHVsZSBcIiR7bmFtZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIHdpbGRjYXJkIC0tIHJlbW92ZSBkaXJlY3RvcnlcbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvXFwvKD86ZXhwb3J0fGluZGV4KSQvLCBcIlwiKTtcblxuICAgICAgICAvLyBMb29rIGZvciBzb3VyY2UgaWYgZmlsZSBpc24ndCBwcmVzZW50XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNGaWxlKHBhdGgpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc291cmNlICYmIHBhdGguZW5kc1dpdGgoXCIuanNcIikpIHtcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLmpzJC8sIFwiLnRzXCIpO1xuICAgICAgICAgICAgaWYgKGlzRmlsZShwYXRoKSkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kdWxlIFwiJHtuYW1lfVwiIHBhdGggXCIke3BhdGh9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRbbmFtZV0gPSBwYXRoO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxTQUFTLFlBQVksY0FBYyxnQkFBZ0I7QUFDbkQsU0FBUyxTQUFTLFVBQVUsTUFBTSxpQkFBaUI7QUFDbkQsU0FBUyxTQUFTLE1BQU0sVUFBVSxlQUFlO0FBQ2pELFNBQVMsYUFBYSx1QkFBdUI7QUFDN0MsU0FBUyxRQUFRLG1CQUFtQixxQkFBcUI7QUFDekQsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxpQkFBaUI7QUFFbkIsTUFBTSwwQkFBMEIsTUFBTTtBQUFDO0FBRXZDLE1BQU0sY0FBYztBQUNwQixNQUFNLGVBQWU7QUFFNUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV4QixTQUFTLFNBQVMsVUFBa0IsT0FBZSxLQUFLLE9BQWdCO0FBQ3BFLFNBQU8sUUFBUSxJQUFJO0FBQ25CLFNBQU8sTUFBTTtBQUNULFVBQU0sT0FBTztBQUFBLE1BQWdCLENBQUMsVUFBVSxTQUFTO0FBQUEsTUFBRyxNQUNoRCxLQUFLLE1BQU0sYUFBYSxRQUFRLE1BQU0sUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDO0FBQUEsSUFDL0Q7QUFFQSxRQUFJLE1BQU07QUFDTixVQUFJLFVBQVUsVUFBYSxLQUFLLFNBQVMsT0FBTztBQUM1QyxlQUFPLEVBQUUsTUFBTSxNQUFNLEtBQUs7QUFBQSxNQUM5QjtBQUFBLElBQ0o7QUFDQSxVQUFNLFNBQVMsUUFBUSxJQUFJO0FBQzNCLFFBQUksV0FBVyxNQUFNO0FB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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/package.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,YAAY,cAAc,gBAAgB;AACnD,SAAS,SAAS,UAAU,MAAM,iBAAiB;AACnD,SAAS,SAAS,MAAM,UAAU,eAAe;AACjD,SAAS,aAAa,uBAAuB;AAC7C,SAAS,UAAU,QAAQ,mBAAmB,qBAAqB;AACnE,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAEnB,MAAM,0BAA0B,MAAM;AAAC;AAEvC,MAAM,cAAc;AACpB,MAAM,eAAe;AAE5B,MAAM,iBAAiB,CAAC;AAExB,SAAS,SAAS,UAAkB,OAAe,KAAK,OAAgB;AACpE,SAAO,QAAQ,IAAI;AACnB,SAAO,MAAM;AACT,UAAM,OAAO;AAAA,MAAgB,CAAC,UAAU,SAAS;AAAA,MAAG,MAChD,KAAK,MAAM,aAAa,QAAQ,MAAM,QAAQ,CAAC,EAAE,SAAS,CAAC;AAAA,IAC/D;AACA,QAAI,MAAM;AACN,UAAI,UAAU,UAAa,KAAK,SAAS,OAAO;AAC5C,eAAO,EAAE,MAAM,MAAM,KAAK;AAAA,MAC9B;AAAA,IACJ;AACA,UAAM,SAAS,QAAQ,IAAI;AAC3B,QAAI,WAAW,MAAM;AACjB,YAAM,IAAI,kBAAkB,oBAAoB,SAAS,QAAQ,EAAE;AAAA,IACvE;AACA,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,YAAY,MAAc;AAC/B,SAAO,CAAC,CAAC,gBAAgB,UAAU,MAAM,SAAS,IAAI,EAAE,YAAY,CAAC;AACzE;AAEO,MAAM,QAAQ;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY;AAAA,IACR,OAAO;AAAA,IACP;AAAA,EACJ,IAGI,CAAC,GAAG;AACJ,UAAM,EAAE,MAAM,KAAK,IAAI,SAAS,gBAAgB,MAAM,IAAI;AAC1D,SAAK,OAAO;AACZ,SAAK,OAAO;AAEZ,UAAM,EAAE,KAAK,IAAI,IAAI,cAAc,KAAK,IAAI;AAC5C,SAAK,cAAc;AACnB,SAAK,cAAc;AAEnB,SAAK,SAAS,YAAY,KAAK,QAAQ,KAAK,CAAC;AAC7C,SAAK,WAAW,YAAY,KAAK,QAAQ,MAAM,CAAC;AAEhD,UAAM,OAAO,kBAAkB,KAAK,QAAQ,eAAe,CAAC,GAAG;AAC/D,QAAI,SAAS,QAAW;AACpB,UAAI,CAAC,KAAK,KAAK,SAAO,KAAK,QAAQ,IAAI,IAAI,MAAM,KAAK,QAAQ,KAAK,CAAC,GAAG;AACnE,aAAK,SAAS;AAAA,MAClB;AACA,UAAI,CAAC,KAAK,KAAK,SAAO,KAAK,QAAQ,IAAI,IAAI,MAAM,KAAK,QAAQ,MAAM,CAAC,GAAG;AACpE,aAAK,WAAW;AAAA,MACpB;AAAA,IACJ;AAEA,SAAK,YAAY,CAAC,EAAE,KAAK,KAAK,QAAQ,KAAK,KAAK,UAAU,KAAK,KAAK;AAEpE,SAAK,YAAY,KAAK,QAAQ,KAAK,QAAQ,WAAW,CAAC;AAAA,EAC3D;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EAEA,IAAI,aAAa;AACb,WAAO,KAAK,aAAa,YAAY;AAAA,EACzC;AAAA,EAEA,WAAW,OAAiB;AACxB,WAAO,QAAQ,KAAK,MAAM,GAAG,KAAK;AAAA,EACtC;AAAA,EAEA,SAAS,MAAc;AACnB,WAAO,SAAS,KAAK,MAAM,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,KAAK,SAA4B;AAEnC,QAAI,OAAO,YAAY,UAAU;AAC7B,gBAAU,KAAK,QAAQ,OAAO,EAAE,QAAQ,OAAO,GAAG;AAAA,IACtD,OAAO;AACH,gBAAU,QAAQ,IAAI,OAAK,KAAK,QAAQ,CAAC,EAAE,QAAQ,OAAO,GAAG,CAAC;AAAA,IAClE;AAGA,WAAO,SAAS,OAAO;AAAA,EAC3B;AAAA,EAEA,MAAM,MAAc;AAChB,UAAM,WAAW,IAAI,SAAS;AAC9B,aAAS,QAAQ,MAAM,IAAI;AAC3B,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,gBAAgB,OAAiB;AACnC,WAAO,KAAK,qBAAqB,MAAM,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,MAAc,qBAAqB,OAAiB;AAChD,QAAI,QAAQ;AACZ,UAAM,QAAQ;AAAA,MACV,MAAM,IAAI,OAAM,MAAK;AACjB,cAAM,QAAQ,MAAM,YAAY,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC;AACnE,YAAI,CAAC,OAAO;AACR;AAAA,QACJ;AAEA,YAAI;AACJ,YAAI,MAAM,YAAY,GAAG;AACrB,gBAAMA,UAAS,MAAM,QAAQ,CAAC,GAAG,IAAI,QAAM,QAAQ,GAAG,EAAE,CAAC;AACzD,sBAAY,MAAM,KAAK,qBAAqBA,MAAK;AAAA,QACrD,OAAO;AACH,sBAAY,MAAM;AAAA,QACtB;AACA,YAAI,YAAY,OAAO;AACnB,kBAAQ;AAAA,QACZ;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,eAAe;AACf,QAAI,SAAS,MAAc;AAC3B,eAAW,QAAQ,CAAC,gBAAgB,wBAAwB,mBAAmB,kBAAkB,GAAG;AAChG,UAAI,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,KAAK,KAAK,IAAI,MAAM,MAAM;AACjE,iBAAS,CAAC,GAAG,QAAQ,GAAG,OAAO,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC;AAAA,MACxD;AAAA,IACJ;AACA,WAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAAA,EAC9B;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,QAAQ,aAAa,KAAK,IAAI;AAAA,EACzC;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,MAAM,QAAQ,KAAK,KAAK,UAAU;AAAA,EAC7C;AAAA,EAEA,IAAI,OAAgB;AAChB,QAAI;AACA,aAAO,KAAK;AAAA,IAChB,SAAS,GAAG;AACR,UAAI,EAAE,aAAa,oBAAoB;AACnC,cAAM;AAAA,MACV;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,WAAW,IAAY;AAC9B,iBAAa;AAAA,EACjB;AAAA,EAEA,WAAW,YAAY;AACnB,WAAO,KAAK,aAAa,UAAU;AAAA,EACvC;AAAA,EAEA,OAAO,aAAa,KAAa;AAC7B,QAAI,CAAC,WAAW;AACZ,kBAAY,KAAK,KAAK,SAAO,MAAM,QAAQ,IAAI,KAAK,UAAU,CAAC;AAAA,IACnE;AACA,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,QAAQ;AACf,QAAI,CAAC,OAAO;AACR,cAAQ,IAAI,QAAQ,EAAE,MAAM,UAAU,CAAC;AAAA,IAC3C;AACA,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,WAAW,MAAc,OAAsB,OAAO;AACzD,WAAO,KAAK,UAAU,cAAc,MAAM,IAAI;AAAA,EAClD;AAAA,EAEA,cAAc,MAAc,OAAsB,OAAO;AACrD,QAAI,CAAC,KAAK,WAAW,GAAG,GAAG;AACvB,aAAO,KAAK,IAAI;AAAA,IACpB;AACA,UAAM,eAAe,KAAK,UAAU,IAAI;AAExC,QAAI,cAAc;AACd,YAAM,MAAM,oBAAoB,cAAc,IAAI;AAClD,UAAI,KAAK;AACL,eAAO,KAAK,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACJ;AAEA,QAAI,SAAS,KAAK;AACd,UAAI,SAAS,SAAS,KAAK,KAAK,QAAQ;AACpC,eAAO,KAAK,QAAQ,KAAK,KAAK,MAAM;AAAA,MACxC;AACA,UAAI,KAAK,KAAK,MAAM;AAChB,eAAO,KAAK,QAAQ,KAAK,KAAK,IAAI;AAAA,MACtC;AAAA,IACJ;AAEA,UAAM,IAAI,MAAM,yBAAyB,IAAI,eAAe,KAAK,IAAI,EAAE;AAAA,EAC3E;AAAA,EAEA,YAAY,MAAc;AACtB,QAAI,YAAY,KAAK;AACrB,WAAO,MAAM;AACT,UAAI,YAAY,QAAQ,WAAW,gBAAgB,IAAI,CAAC,GAAG;AACvD;AAAA,MACJ;AACA,YAAM,gBAAgB,QAAQ,SAAS;AACvC,UAAI,kBAAkB,WAAW;AAC7B,cAAM,IAAI,MAAM,sBAAsB,IAAI,SAAS,KAAK,IAAI,EAAE;AAAA,MAClE;AACA,kBAAY;AAAA,IAChB;AAEA,WAAO,QAAQ,QAAQ,QAAQ,WAAW,gBAAgB,IAAI,CAAC;AAAA,EACnE;AAAA,EAEA,cAAc,MAAc,OAAsB,OAAO;AACrD,UAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,QAAI,cAAc,SAAS,MAAM;AACjC,QAAI,YAAY,WAAW,GAAG,KAAK,SAAS,QAAQ;AAChD,oBAAc,GAAG,WAAW,IAAI,SAAS,MAAM,CAAC;AAAA,IACpD;AAEA,UAAM,MAAM,KAAK,YAAY,WAAW;AAExC,WAAO,IAAI,cAAc,SAAS,SAAS,SAAS,KAAK,GAAG,IAAI,KAAK,IAAI;AAAA,EAC7E;AAAA,EAEA,QAAQ,MAAc;AAClB,WAAO,CAAC,CAAC,KAAK,WAAW,IAAI,GAAG,OAAO;AAAA,EAC3C;AAAA,EAEA,aAAa,MAAc;AACvB,WAAO,CAAC,CAAC,KAAK,WAAW,IAAI,GAAG,YAAY;AAAA,EAChD;AAAA,EAEA,MAAM,SAAS,MAAc;AACzB,WAAO,SAAS,KAAK,QAAQ,IAAI,GAAG,OAAO;AAAA,EAC/C;AAAA,EAEA,aAAa,MAAc;AACvB,WAAO,aAAa,KAAK,QAAQ,IAAI,GAAG,OAAO;AAAA,EACnD;AAAA,EAEA,MAAM,UAAU,MAAc,UAAmB;AAC7C,UAAM,UAAU,KAAK,QAAQ,IAAI,GAAG,GAAG,QAAQ,EAAE;AAAA,EACrD;AAAA,EAEA,MAAM,OAAO;AACT,UAAM,KAAK,UAAU,KAAK,KAAK,MAAM,cAAc,GAAG,KAAK,UAAU,KAAK,MAAM,QAAW,CAAC,CAAC;AAAA,EACjG;AAAA,EAEA,MAAM,SAAS,MAAc;AACzB,UAAM,OAAO,MAAM,KAAK,SAAS,IAAI;AACrC,QAAI;AACA,aAAO,KAAK,MAAM,IAAI;AAAA,IAC1B,SAAS,GAAG;AACR,UAAI,EAAE,aAAa,QAAQ;AACvB,YAAI,IAAI,MAAM,GAAG,CAAC,EAAE;AAAA,MACxB;AACA,MAAC,EAAY,UAAU,kBAAkB,KAAK,QAAQ,IAAI,CAAC,MAAO,EAAY,OAAO;AACrF,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,UAAU,MAAc,OAAW;AACrC,UAAM,KAAK,UAAU,MAAM,KAAK,UAAU,OAAO,QAAW,CAAC,CAAC;AAAA,EAClE;AAAA,EAEA,OAAO,aAAa,MAAc;AAC9B,aAASC,MAAKC,OAA8B;AACxC,UAAIC,UAAS,eAAeD,KAAI;AAChC,UAAIC,YAAW,QAAW;AACtB,YAAI,WAAW,KAAKD,OAAM,cAAc,CAAC,GAAG;AACxC,UAAAC,UAAS,IAAI,QAAQ,EAAE,MAAAD,MAAK,CAAC;AAAA,QACjC,OAAO;AACH,UAAAC,UAASF,MAAK,QAAQC,KAAI,CAAC;AAAA,QAC/B;AACA,uBAAeA,KAAI,IAAIC;AAAA,MAC3B;AACA,aAAOA;AAAA,IACX;AAEA,UAAM,SAASF,MAAK,IAAI;AAExB,WAAO,UAAU;AAAA,EACrB;AAAA,EAEA,OAAO,QAAQ,MAAc;AACzB,UAAM,SAAS,KAAK,aAAa,IAAI;AACrC,QAAI,WAAW,QAAW;AACtB,aAAO;AAAA,IACX;AACA,UAAM,IAAI,MAAM,iCAAiC,IAAI,GAAG;AAAA,EAC5D;AAAA,EAEA,IAAI,UAAkC;AAClC,QAAI,KAAK,aAAa,QAAW;AAC7B,aAAO,KAAK;AAAA,IAChB;AAEA,SAAK,WAAW;AAAA,MACZ,GAAG,QAAQ,aAAa,QAAQ,KAAK,IAAI,CAAC,GAAG;AAAA,MAC7C,GAAG,KAAK,KAAK;AAAA,IACjB;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,YAAY,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,gBAAgB;AAChB,WAAO,KAAK,YAAY,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,WAAoB,YAAsB;AAClD,QAAI,CAAC,WAAW,QAAQ;AACpB,mBAAa,CAAC,KAAK,cAAc,WAAW,WAAW,SAAS;AAAA,IACpE;AAEA,UAAM,UAAU,CAAC;AAEjB,UAAM,UAAU,KAAK;AACrB,QAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AACjD,kBAAY,QAAQ,IAAI,IAAI,UAAU,GAAG,SAAS,KAAK,MAAM,KAAK,MAAM,OAAO;AAAA,IACnF;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,MAAc;AACrB,WAAO,cAAc,KAAK,QAAQ,IAAI,CAAC;AAAA,EAC3C;AACJ;AAYA,IAAI,aAAa;AACjB,IAAI;AACJ,IAAI;AAEJ,SAAS,KAAK,UAAkB,UAA8C;AAC1E,MAAI,MAAM,IAAI,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,SAAO,CAAC,SAAS,GAAG,GAAG;AACnB,UAAM,IAAI,QAAQ,EAAE,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;AAAA,EACjD;AACA,SAAO;AACX;AAEA,SAAS,cAAc,MAAW;AAC9B,MAAI,KAAc;AAElB,MAAI,KAAK,SAAS,UAAU;AACxB,UAAM;AACN,UACK,KAAK,SAAS,UAAa,KAAK,WAAW,UAC5C,CAAC,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,QAAa,IAAI,OAAO;AAAA,EAC1E,OAAO;AACH,UAAM;AACN,UAAM,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,QAAa,IAAI,MAAM;AAAA,EAC5F;AAEA,SAAO,EAAE,KAAK,IAAI;AACtB;AAEA,SAAS,oBAAoB,QAA6B,MAAyC;AAC/F,MAAI,SAAS,SAAS,OAAO,QAAQ;AACjC,QAAIG,OAAM,OAAO;AACjB,QAAIA,QAAO,OAAOA,SAAQ,UAAU;AAChC,MAAAA,OAAM,oBAAoBA,MAAK,IAAI;AAAA,IACvC;AACA,QAAIA,MAAK;AACL,aAAOA;AAAA,IACX;AAAA,EACJ;AAEA,MAAI,MAAM,OAAO,WAAW,OAAO,QAAQ,OAAO;AAClD,MAAI,OAAO,OAAO,QAAQ,UAAU;AAChC,UAAM,oBAAoB,KAAK,IAAI;AAAA,EACvC;AAEA,MAAI,OAAO,QAAQ,UAAU;AACzB,WAAO;AAAA,EACX;AACJ;AAMA,SAAS,YACL,QACA,YACA,QACA,QACA,MACA,SACF;AACE,MAAI,OAAO,YAAY,UAAU;AAC7B,mBAAe,QAAQ,QAAQ,QAAQ,MAAM,OAAO;AAAA,EACxD,WAAW,MAAM,QAAQ,OAAO,GAAG;AAC/B,eAAW,SAAS,SAAS;AACzB,kBAAY,QAAQ,YAAY,QAAQ,QAAQ,MAAM,KAAK;AAAA,IAC/D;AAAA,EACJ,WAAW,OAAO,YAAY,YAAY,YAAY,MAAM;AACxD,QAAI,oBAAoB;AACxB,eAAW,OAAO,SAAS;AACvB,UAAI,IAAI,WAAW,GAAG,GAAG;AACrB,oBAAY,QAAQ,YAAY,QAAQ,KAAK,QAAQ,GAAG,GAAG,MAAM,QAAQ,GAAG,CAAC;AAAA,MACjF,WAAW,CAAC,qBAAqB,WAAW,IAAI,GAAG,GAAG;AAClD,oBAAY,QAAQ,YAAY,QAAQ,QAAQ,MAAM,QAAQ,GAAG,CAAC;AAClE,4BAAoB;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC7D;AACJ;AAEA,SAAS,eAAe,QAAiB,QAAgC,MAAc,MAAc,SAAiB;AAClH,MAAI,OAAO,KAAK,MAAM,OAAO;AAC7B,MAAI,QAAQ;AACR,WAAO,KAAK,QAAQ,yBAAyB,OAAO;AAAA,EACxD;AAEA,MAAI,KAAK,SAAS,GAAG,GAAG;AAEpB,QAAI,CAAC,KAAK,SAAS,IAAI,GAAG;AACtB,YAAM,IAAI,MAAM,sBAAsB,IAAI,wCAAwC;AAAA,IACtF;AAEA,WAAO,KAAK,UAAU,GAAG,KAAK,SAAS,CAAC;AACxC,UAAM,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,kBAAkB,IAAI,IAAI;AAChF,QAAI,CAAC,MAAM,QAAQ;AACf,YAAM,IAAI,MAAM,uBAAuB,IAAI,YAAY,OAAO,EAAE;AAAA,IACpE;AAEA,UAAM,CAAC,QAAQ,MAAM,IAAI,KAAK,MAAM,KAAK;AACzC,UAAM,eAAe,WAAW,SAAY,IAAI,OAAO;AACvD,UAAM,eAAe,WAAW,SAAY,IAAI,OAAO;AAEvD,eAAW,YAAY,OAAO;AAC1B,YAAM,YAAY,SAAS,UAAU,cAAc,SAAS,SAAS,YAAY;AACjF,YAAM,WAAW,KAAK,MAAM,SAAS;AACrC,aAAO,QAAQ,IAAI;AAAA,IACvB;AAAA,EACJ,WAAW,KAAK,SAAS,GAAG,GAAG;AAE3B,UAAM,IAAI,MAAM,4BAA4B,IAAI,wBAAwB,IAAI,GAAG;AAAA,EACnF,OAAO;AAEH,WAAO,KAAK,QAAQ,uBAAuB,EAAE;AAG7C,QAAI,QAAQ;AACZ,QAAI,OAAO,IAAI,GAAG;AACd,cAAQ;AAAA,IACZ,WAAW,UAAU,KAAK,SAAS,KAAK,GAAG;AACvC,aAAO,KAAK,QAAQ,SAAS,KAAK;AAClC,UAAI,OAAO,IAAI,GAAG;AACd,gBAAQ;AAAA,MACZ;AAAA,IACJ;AAEA,QAAI,CAAC,OAAO;AACR,YAAM,IAAI,MAAM,WAAW,IAAI,WAAW,IAAI,aAAa;AAAA,IAC/D;AAEA,WAAO,IAAI,IAAI;AAAA,EACnB;AACJ;",
4
+ "mappings": "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",
5
5
  "names": ["paths", "find", "path", "result", "exp"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/tools",
3
- "version": "0.12.0-alpha.0-20241219-af74a6a14",
3
+ "version": "0.12.0-alpha.0-20241220-ad0dea627",
4
4
  "description": "Matter.js tooling",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -55,7 +55,7 @@
55
55
  "typescript": "~5.7.2",
56
56
  "type-fest": "^4.30.1",
57
57
  "typedoc": "^0.27.4",
58
- "typedoc-material-theme": "^1.2.0",
58
+ "typedoc-github-theme": "^0.2.0",
59
59
  "@microsoft/tsdoc": "^0.15.1"
60
60
  },
61
61
  "optionalDependencies": {
@@ -24,7 +24,7 @@ import { Graph } from "./graph.js";
24
24
  // NOTE - this is a "best attempt" at doc generation via typescript. The result is not all that great; typedoc is too
25
25
  // limited for our complex API so we're going to need something custom to do it right
26
26
 
27
- const PLUGINS = ["typedoc-material-theme"] as string[];
27
+ const PLUGINS = ["typedoc-github-theme"] as string[];
28
28
 
29
29
  // Double "docs" directories so top-level directory can be a GH repository with pages configured under "docs"
30
30
  const OUTPUT_PATH = "build/docs/docs";
package/src/index.ts CHANGED
@@ -10,5 +10,6 @@ export * from "./building/project.js";
10
10
  export * from "./running/ensure-compiled.js";
11
11
  export * from "./util/commander.js";
12
12
  export * from "./util/file.js";
13
+ export * from "./util/glob.js";
13
14
  export * from "./util/package.js";
14
15
  export * from "./util/progress.js";
package/src/util/file.ts CHANGED
@@ -5,7 +5,6 @@
5
5
  */
6
6
 
7
7
  import { readdirSync, readFileSync, statSync } from "fs";
8
- import { GLOBSTAR, Minimatch, ParseReturnFiltered } from "minimatch";
9
8
  import { resolve } from "path";
10
9
  import { ignoreErrorSync } from "./errors.js";
11
10
 
@@ -49,120 +48,53 @@ export function maybeReaddirSync(path: string) {
49
48
  }
50
49
  }
51
50
 
52
- export class GlobError extends Error {}
53
-
54
- export function globSync(pattern: string | string[]) {
55
- if (typeof pattern === "string") {
56
- return [...globOneSync(pattern)];
57
- }
58
-
59
- const result = Array<string>();
60
- for (const p of pattern) {
61
- result.push(...globOneSync(p));
62
- }
63
-
64
- return result;
51
+ export function isDirectory(path: string) {
52
+ return !!ignoreErrorSync("ENOENT", () => statSync(path).isDirectory());
65
53
  }
66
54
 
67
- function globOneSync(pattern: string) {
68
- // Parse the glob
69
- const mm = new Minimatch(pattern.replace(/\\/g, "/"), {});
70
- const results = new Set<string>();
71
- for (const part of mm.set) {
72
- for (const path of globOnePartSync(mm, part)) {
73
- results.add(path);
74
- }
75
- }
76
- return results;
55
+ export function isFile(path: string) {
56
+ return !!ignoreErrorSync("ENOENT", () => statSync(path).isFile());
77
57
  }
78
58
 
79
- function globOnePartSync(mm: Minimatch, segments: ParseReturnFiltered[]) {
80
- // Find the starting path
81
- let rootPath = "";
82
- let didOne = false;
83
- while (typeof segments[0] === "string") {
84
- if (didOne) {
85
- rootPath += "/";
86
- } else {
87
- didOne = true;
88
- }
89
- rootPath += segments.shift() as string;
90
- }
91
-
92
- // If we are out of segments, this is not a glob. Just check for presence
93
- if (!segments.length) {
94
- const stat = maybeStatSync(rootPath);
95
-
96
- if (stat?.[rootPath.endsWith("/") ? "isDirectory" : "isFile"]()) {
97
- return [rootPath];
98
- }
99
-
100
- return [];
101
- }
102
-
103
- // Walk filesystem and apply glob
104
- const results = new Set<string>();
105
-
106
- function match(path: string, segments: ParseReturnFiltered[]) {
107
- // If the filter is empty then match current path
108
- if (!segments.length) {
109
- results.add(path);
110
- return;
111
- }
112
-
113
- // If filter starts without magic then just stat that one path
114
- if (typeof segments[0] === "string") {
115
- const subpath = resolve(path, segments[0]);
116
- if (maybeStatSync(resolve(path, segments[0]))) {
117
- match(subpath, segments.slice(1));
118
- return;
119
- }
120
- }
121
-
122
- // If filter is just GLOBSTAR then all paths match but search continues
123
- if (segments.length === 1 && segments[0] === GLOBSTAR) {
124
- results.add(path);
125
- }
126
-
127
- // Filter starts with magic so load directory entries to match
128
- const subnames = maybeReaddirSync(path);
129
- if (!subnames) {
130
- return;
131
- }
132
-
133
- // Test each directory entry
134
- for (const subname of subnames) {
135
- const subpath = resolve(path, subname);
136
-
137
- // Anything but GLOBSTAR is 1:1 subname/segment match
138
- if (segments[0] !== GLOBSTAR) {
139
- if (mm.matchOne([subname], segments, true)) {
140
- match(subpath, segments.slice(1));
141
- }
142
- continue;
143
- }
144
-
145
- // GLOBSTAR matches nothing so test second segment
146
- if (segments.length > 1) {
147
- if (mm.matchOne([subname], segments.slice(1), true)) {
148
- match(subpath, segments.slice(2));
149
- }
150
- }
151
-
152
- // GLOBSTAR matches everything
153
- match(subpath, segments);
154
- }
155
- }
156
-
157
- match(rootPath, segments);
158
-
159
- return results;
59
+ /**
60
+ * Tiny virtual filesystem driver. Currently used only for processing globs.
61
+ */
62
+ export interface FilesystemSync<T extends FilesystemSync.Stat = FilesystemSync.Stat> {
63
+ resolve(...segments: string[]): string;
64
+ readdir(path: string): string[] | undefined;
65
+ stat(path: string): T | undefined;
160
66
  }
161
67
 
162
- export function isDirectory(path: string) {
163
- return !!ignoreErrorSync("ENOENT", () => statSync(path).isDirectory());
68
+ export function FilesystemSync(): FilesystemSync<FilesystemSync.Stat> {
69
+ return {
70
+ resolve(...segments) {
71
+ return resolve(...segments);
72
+ },
73
+
74
+ readdir(path) {
75
+ return maybeReaddirSync(path);
76
+ },
77
+
78
+ stat(path) {
79
+ const stats = maybeStatSync(path);
80
+ if (stats) {
81
+ return {
82
+ get isFile() {
83
+ return stats.isFile();
84
+ },
85
+
86
+ get isDirectory() {
87
+ return stats.isDirectory();
88
+ },
89
+ };
90
+ }
91
+ },
92
+ };
164
93
  }
165
94
 
166
- export function isFile(path: string) {
167
- return !!ignoreErrorSync("ENOENT", () => statSync(path).isFile());
95
+ export namespace FilesystemSync {
96
+ export interface Stat {
97
+ isDirectory?: boolean;
98
+ isFile?: boolean;
99
+ }
168
100
  }
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { GLOBSTAR, Minimatch, ParseReturnFiltered } from "minimatch";
8
+ import { FilesystemSync } from "./file.js";
9
+
10
+ export class GlobError extends Error {}
11
+
12
+ export function globSync(pattern: string | string[], fs = FilesystemSync()) {
13
+ if (typeof pattern === "string") {
14
+ return [...globOneSync(pattern, fs)];
15
+ }
16
+
17
+ const result = Array<string>();
18
+ for (const p of pattern) {
19
+ result.push(...globOneSync(p, fs));
20
+ }
21
+
22
+ return result;
23
+ }
24
+
25
+ function globOneSync(pattern: string, fs: FilesystemSync) {
26
+ // Parse the glob
27
+ const mm = new Minimatch(pattern.replace(/\\/g, "/"), {});
28
+ const results = new Set<string>();
29
+ for (const part of mm.set) {
30
+ for (const path of globOnePartSync(mm, part, fs)) {
31
+ results.add(path);
32
+ }
33
+ }
34
+ return results;
35
+ }
36
+
37
+ function globOnePartSync(mm: Minimatch, segments: ParseReturnFiltered[], fs: FilesystemSync) {
38
+ // Find the starting path
39
+ let rootPath = "";
40
+ let didOne = false;
41
+ while (typeof segments[0] === "string") {
42
+ if (didOne) {
43
+ rootPath += "/";
44
+ } else {
45
+ didOne = true;
46
+ }
47
+ rootPath += segments.shift() as string;
48
+ }
49
+
50
+ // If we are out of segments, this is not a glob. Just check for presence
51
+ if (!segments.length) {
52
+ const stat = fs.stat(rootPath);
53
+
54
+ if (stat?.[rootPath.endsWith("/") ? "isDirectory" : "isFile"]) {
55
+ return [rootPath];
56
+ }
57
+
58
+ return [];
59
+ }
60
+
61
+ // Walk filesystem and apply glob
62
+ const results = new Set<string>();
63
+
64
+ function match(path: string, segments: ParseReturnFiltered[]) {
65
+ // If the filter is empty then match current path
66
+ if (!segments.length) {
67
+ results.add(path);
68
+ return;
69
+ }
70
+
71
+ // If filter starts without magic then just stat that one path
72
+ if (typeof segments[0] === "string") {
73
+ const subpath = fs.resolve(path, segments[0]);
74
+ if (fs.stat(fs.resolve(path, segments[0]))) {
75
+ match(subpath, segments.slice(1));
76
+ return;
77
+ }
78
+ }
79
+
80
+ // If filter is just GLOBSTAR then all paths match but search continues
81
+ if (segments.length === 1 && segments[0] === GLOBSTAR) {
82
+ results.add(path);
83
+ }
84
+
85
+ // Filter starts with magic so load directory entries to match
86
+ const subnames = fs.readdir(path);
87
+ if (!subnames) {
88
+ return;
89
+ }
90
+
91
+ // Test each directory entry
92
+ for (const subname of subnames) {
93
+ const subpath = fs.resolve(path, subname);
94
+
95
+ // Anything but GLOBSTAR is 1:1 subname/segment match
96
+ if (segments[0] !== GLOBSTAR) {
97
+ if (mm.matchOne([subname], segments, true)) {
98
+ match(subpath, segments.slice(1));
99
+ }
100
+ continue;
101
+ }
102
+
103
+ // GLOBSTAR matches nothing so test second segment
104
+ if (segments.length > 1) {
105
+ if (mm.matchOne([subname], segments.slice(1), true)) {
106
+ match(subpath, segments.slice(2));
107
+ }
108
+ }
109
+
110
+ // GLOBSTAR matches everything
111
+ match(subpath, segments);
112
+ }
113
+ }
114
+
115
+ match(rootPath, segments);
116
+
117
+ return results;
118
+ }
package/src/util/index.ts CHANGED
@@ -7,4 +7,5 @@
7
7
  export * from "./commander.js";
8
8
  export * from "./errors.js";
9
9
  export * from "./file.js";
10
+ export * from "./glob.js";
10
11
  export * from "./package.js";
@@ -8,7 +8,8 @@ import { existsSync, readFileSync, statSync } from "fs";
8
8
  import { readdir, readFile, stat, writeFile } from "fs/promises";
9
9
  import { dirname, join, relative, resolve } from "path";
10
10
  import { ignoreError, ignoreErrorSync } from "./errors.js";
11
- import { globSync, isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
11
+ import { isFile, maybeReadJsonSync, maybeStatSync } from "./file.js";
12
+ import { globSync } from "./glob.js";
12
13
  import { Progress } from "./progress.js";
13
14
  import { toolsPath } from "./tools-path.cjs";
14
15
 
@@ -25,6 +26,7 @@ function findJson(filename: string, path: string = ".", title?: string) {
25
26
  const json = ignoreErrorSync(["ENOENT", "ENOTDIR"], () =>
26
27
  JSON.parse(readFileSync(resolve(path, filename)).toString()),
27
28
  );
29
+
28
30
  if (json) {
29
31
  if (title === undefined || json.name === title) {
30
32
  return { root: path, json };