aws-delivlib 14.15.97 → 14.15.98

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 (68) hide show
  1. package/lib/build-spec.d.ts +12 -12
  2. package/lib/build-spec.js +1 -1
  3. package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
  4. package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
  5. package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
  6. package/lib/open-pgp-key-pair.js +1 -1
  7. package/lib/package-integrity/handler/validate.bundle.js +116 -79
  8. package/lib/pipeline.js +1 -1
  9. package/lib/publishing/github/node_modules/.yarn-integrity +4 -4
  10. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/README.md +1 -1
  11. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/fs/promises.d.ts +13 -0
  12. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/fs.d.ts +42 -2
  13. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/package.json +2 -2
  14. package/lib/publishing/github/node_modules/@types/jsonwebtoken/node_modules/@types/node/vm.d.ts +20 -5
  15. package/lib/publishing/github/node_modules/jwa/index.js +16 -2
  16. package/lib/publishing/github/node_modules/jwa/package.json +2 -2
  17. package/lib/publishing/github/node_modules/semver/bin/semver.js +2 -0
  18. package/lib/publishing/github/node_modules/semver/classes/comparator.js +2 -0
  19. package/lib/publishing/github/node_modules/semver/classes/index.js +2 -0
  20. package/lib/publishing/github/node_modules/semver/classes/range.js +2 -0
  21. package/lib/publishing/github/node_modules/semver/classes/semver.js +4 -3
  22. package/lib/publishing/github/node_modules/semver/functions/clean.js +2 -0
  23. package/lib/publishing/github/node_modules/semver/functions/cmp.js +2 -0
  24. package/lib/publishing/github/node_modules/semver/functions/coerce.js +2 -0
  25. package/lib/publishing/github/node_modules/semver/functions/compare-build.js +2 -0
  26. package/lib/publishing/github/node_modules/semver/functions/compare-loose.js +2 -0
  27. package/lib/publishing/github/node_modules/semver/functions/compare.js +2 -0
  28. package/lib/publishing/github/node_modules/semver/functions/diff.js +2 -0
  29. package/lib/publishing/github/node_modules/semver/functions/eq.js +2 -0
  30. package/lib/publishing/github/node_modules/semver/functions/gt.js +2 -0
  31. package/lib/publishing/github/node_modules/semver/functions/gte.js +2 -0
  32. package/lib/publishing/github/node_modules/semver/functions/inc.js +2 -0
  33. package/lib/publishing/github/node_modules/semver/functions/lt.js +2 -0
  34. package/lib/publishing/github/node_modules/semver/functions/lte.js +2 -0
  35. package/lib/publishing/github/node_modules/semver/functions/major.js +2 -0
  36. package/lib/publishing/github/node_modules/semver/functions/minor.js +2 -0
  37. package/lib/publishing/github/node_modules/semver/functions/neq.js +2 -0
  38. package/lib/publishing/github/node_modules/semver/functions/parse.js +2 -0
  39. package/lib/publishing/github/node_modules/semver/functions/patch.js +2 -0
  40. package/lib/publishing/github/node_modules/semver/functions/prerelease.js +2 -0
  41. package/lib/publishing/github/node_modules/semver/functions/rcompare.js +2 -0
  42. package/lib/publishing/github/node_modules/semver/functions/rsort.js +2 -0
  43. package/lib/publishing/github/node_modules/semver/functions/satisfies.js +2 -0
  44. package/lib/publishing/github/node_modules/semver/functions/sort.js +2 -0
  45. package/lib/publishing/github/node_modules/semver/functions/valid.js +2 -0
  46. package/lib/publishing/github/node_modules/semver/index.js +2 -0
  47. package/lib/publishing/github/node_modules/semver/internal/constants.js +2 -0
  48. package/lib/publishing/github/node_modules/semver/internal/debug.js +2 -0
  49. package/lib/publishing/github/node_modules/semver/internal/identifiers.js +2 -0
  50. package/lib/publishing/github/node_modules/semver/internal/lrucache.js +2 -0
  51. package/lib/publishing/github/node_modules/semver/internal/parse-options.js +2 -0
  52. package/lib/publishing/github/node_modules/semver/internal/re.js +8 -4
  53. package/lib/publishing/github/node_modules/semver/package.json +3 -3
  54. package/lib/publishing/github/node_modules/semver/preload.js +2 -0
  55. package/lib/publishing/github/node_modules/semver/ranges/gtr.js +2 -0
  56. package/lib/publishing/github/node_modules/semver/ranges/intersects.js +2 -0
  57. package/lib/publishing/github/node_modules/semver/ranges/ltr.js +2 -0
  58. package/lib/publishing/github/node_modules/semver/ranges/max-satisfying.js +2 -0
  59. package/lib/publishing/github/node_modules/semver/ranges/min-satisfying.js +2 -0
  60. package/lib/publishing/github/node_modules/semver/ranges/min-version.js +2 -0
  61. package/lib/publishing/github/node_modules/semver/ranges/outside.js +2 -0
  62. package/lib/publishing/github/node_modules/semver/ranges/simplify.js +2 -0
  63. package/lib/publishing/github/node_modules/semver/ranges/subset.js +2 -0
  64. package/lib/publishing/github/node_modules/semver/ranges/to-comparators.js +2 -0
  65. package/lib/publishing/github/node_modules/semver/ranges/valid.js +2 -0
  66. package/lib/shellable.js +1 -1
  67. package/lib/util.js +1 -1
  68. package/package.json +8 -8
package/lib/pipeline.js CHANGED
@@ -374,4 +374,4 @@ class Pipeline extends constructs_1.Construct {
374
374
  }
375
375
  }
376
376
  exports.Pipeline = Pipeline;
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQVdxQjtBQUNyQiwyQ0FBbUQ7QUFFbkQsNkNBQTJEO0FBQzNELDJDQUFxRDtBQUNyRCxxQ0FBK0M7QUFDL0MsMkRBQXVEO0FBQ3ZELHFEQUFpRDtBQUNqRCx5REFBcUQ7QUFDckQseURBQTJDO0FBQzNDLGlEQUF3RTtBQUV4RSxpQ0FBbUQ7QUFDbkQsMkNBQXdEO0FBQ3hELG1EQUFxQztBQUNyQyxpQ0FBb0Q7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFDbEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBd0p2Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBa0NyQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW9CO1FBQy9ELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFaZCxXQUFNLEdBQXlDLEVBQUcsQ0FBQztRQWN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDhCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDNUQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLHdCQUF3QjtTQUMvRyxDQUFDLENBQUM7UUFDSCxnRkFBZ0Y7UUFDaEYseUZBQXlGO1FBQ3pGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTlELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9FLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLGtDQUFzQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUVqQyxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUM5QyxJQUFJLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUN0RSxnQkFBZ0IsR0FBRyxHQUFHLEtBQUssQ0FBQyxZQUFZLFFBQVEsQ0FBQztTQUNsRDtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSwyQkFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ25FLFdBQVcsRUFBRSxZQUFZLElBQUksQ0FBQyxpQkFBaUIsY0FBYztZQUM3RCxXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEQscUJBQXFCLEVBQUUsSUFBSTtTQUM1QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFVLENBQUMsZ0JBQWdCLENBQUMscUJBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsOENBQThDLENBQUMsQ0FBQyxDQUFDO1FBRTdILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLDhCQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0MsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLHNDQUFpQixDQUFDLGVBQWUsQ0FBQztZQUN6RCxVQUFVLEVBQUUsT0FBTztZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzFCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztTQUN2QixDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDO1FBRW5DLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxxQkFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLG1DQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztTQUN0RjtRQUVELCtDQUErQztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRELG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLGVBQWUsQ0FBQyxDQUFDO1FBRW5GLDRDQUE0QztRQUM1QyxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtZQUM5QixJQUFJLDhCQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtnQkFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQzNCLFdBQVcsRUFBRSxLQUFLLENBQUMsb0JBQW9CO2FBQ3hDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUN4RTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxZQUFtQztRQUN4RCxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZLENBQUMsU0FBaUIsRUFBRSxFQUFVLEVBQUUsT0FBNEI7UUFFN0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sRUFBRSxHQUFHLElBQUkscUJBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQzdCLEtBQUssRUFDTCxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQ25DLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsRUFDN0MsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFN0MsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEVBQUU7WUFDL0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDM0U7UUFFRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sT0FBTyxDQUFDLEVBQVUsRUFBRSxLQUFxQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRTtZQUM1QyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdkIsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLFNBQVM7WUFDeEMsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsRUFBVSxFQUFFLEtBQWtCO1FBQzdDLE9BQU8sSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxTQUFxQixFQUFFLFVBQTZCLEVBQUU7UUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO1NBQy9DO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFdEQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFO1lBQzVELGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQzVELFFBQVEsRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDO1NBQ3BELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxVQUFtQyxFQUFHO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLGtCQUFrQixDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxrQkFBa0IsNEJBQTRCLENBQUMsQ0FBQztTQUNsRztRQUVELE9BQU8sSUFBSSxvQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDcEQsR0FBRyxPQUFPO1lBQ1YsYUFBYSxFQUFFLFlBQVk7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUF1QixFQUFFLFVBQXFDLEVBQUU7UUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFO1lBQ3pFLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQzVELFFBQVEsRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDO1NBQ3BELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsT0FBcUU7UUFDOUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3BFLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxZQUFZLENBQUMsT0FBZ0U7UUFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQzlELFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxDQUFDLGlCQUFpQixrQkFBa0I7WUFDeEYsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxjQUFjLENBQUMsT0FBa0U7UUFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ2xFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxDQUFDLGlCQUFpQixvQkFBb0I7WUFDMUYsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxjQUFjLENBQUMsT0FBa0U7UUFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ2xFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxDQUFDLGlCQUFpQixvQkFBb0I7WUFDMUYsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxPQUF1RTtRQUNqRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDN0UsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksWUFBWSxJQUFJLENBQUMsaUJBQWlCLDJCQUEyQjtZQUNqRyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGVBQWUsQ0FBQyxPQUE0RDtRQUNqRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQzdELFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxDQUFDLGlCQUFpQixxQkFBcUI7WUFDM0YsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxhQUFhLENBQUMsT0FBMEQ7UUFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN6RCxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxZQUFZLElBQUksQ0FBQyxpQkFBaUIsbUJBQW1CO1lBQ3pGLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixHQUFHLE9BQU87U0FDWCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU0sV0FBVyxDQUFDLEVBQVUsRUFBRSxPQUF3RDtRQUNyRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ25ELFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxDQUFDLGlCQUFpQixvQkFBb0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUc7WUFDdEgsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUF3QztRQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQzdELFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksSUFBSSxDQUFDLGlCQUFpQixrQkFBa0I7WUFDeEYsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxPQUF5QjtRQUN2QyxJQUFJLENBQUMseUJBQWtCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztTQUNyRjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksdUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhLENBQUMsT0FBc0M7UUFDekQsSUFBSSxDQUFDLHlCQUFrQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7U0FDM0Y7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLDRCQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUNyRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixHQUFHLE9BQU87WUFDVixrQkFBa0IsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLElBQUksWUFBWSxJQUFJLENBQUMsaUJBQWlCLG1CQUFtQjtTQUN6RyxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFFbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXRELElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQzFHO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxzQ0FBaUIsQ0FBQyxlQUFlLENBQUM7Z0JBQ3BELFVBQVUsRUFBRSw0QkFBNEI7Z0JBQ3hDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU87Z0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYzthQUMzQixDQUFDLENBQUMsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxVQUE0QixFQUFHO1FBQzlDLE9BQU8sSUFBSSxzQkFBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDdEMsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVM7WUFDOUMsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLE9BQWlDO1FBQ3JELE9BQU8sSUFBSSw0QkFBVSxDQUFDLE1BQU0sQ0FBQztZQUMzQixTQUFTLEVBQUUsZ0JBQWdCO1lBQzNCLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsYUFBYSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7YUFDckM7WUFDRCxTQUFTLEVBQUUsS0FBSztZQUNoQixHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxPQUFpQztRQUMzRCxPQUFPLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkUsT0FBTyxJQUFJLDRCQUFVLENBQUMsTUFBTSxDQUFDO2dCQUMzQixTQUFTLEVBQUUsZ0JBQWdCO2dCQUMzQixVQUFVLEVBQUUsbUJBQW1CO2dCQUMvQixhQUFhLEVBQUU7b0JBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWTtvQkFDcEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO2lCQUMzQztnQkFDRCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsR0FBRyxPQUFPO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxTQUFpQixFQUFFLEtBQW1EO1FBQ3BHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksc0NBQWlCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxJQUFJO1lBQ2xFLFVBQVUsRUFBRSxzQkFBc0I7U0FDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWM7UUFDcEMsT0FBTyxJQUFJLGtDQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQ2xELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixlQUFlLEVBQUUsZ0JBQWdCO1lBQ2pDLGlCQUFpQixFQUFFLG1CQUFtQjtZQUN0QyxLQUFLO1NBQ04sQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNYLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxZQUE2QixFQUFFLE9BQWU7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsWUFBWSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxnQ0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzdGLE9BQU8sRUFBRSx3QkFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1NBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ssUUFBUSxDQUFDLFNBQWlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxTQUFvQztRQUM5RSx5REFBeUQ7UUFDekQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUM3QixTQUFTO2dCQUNULFNBQVM7YUFDVixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNoQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLDZCQUE2QixDQUFDLEtBQXVCO1FBQzNELE9BQU8sSUFBQSx3QkFBaUIsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNGO0FBamFELDRCQWlhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIER1cmF0aW9uLFxuICBhd3NfY2xvdWR3YXRjaCBhcyBjbG91ZHdhdGNoLFxuICBhd3NfY29kZWJ1aWxkIGFzIGNidWlsZCxcbiAgYXdzX2NvZGVwaXBlbGluZSBhcyBjcGlwZWxpbmUsXG4gIGF3c19jb2RlcGlwZWxpbmVfYWN0aW9ucyBhcyBjcGlwZWxpbmVfYWN0aW9ucyxcbiAgYXdzX2V2ZW50cyBhcyBldmVudHMsXG4gIGF3c19ldmVudHNfdGFyZ2V0cyBhcyBldmVudHNfdGFyZ2V0cyxcbiAgYXdzX2lhbSBhcyBpYW0sIGF3c19zMyBhcyBzMyxcbiAgYXdzX3NucyBhcyBzbnMsXG4gIGF3c19zbnNfc3Vic2NyaXB0aW9ucyBhcyBzbnNfc3Vicyxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmltcG9ydCB7IEF1dG9CdWlsZCwgQXV0b0J1aWxkT3B0aW9ucyB9IGZyb20gJy4vYXV0by1idWlsZCc7XG5pbXBvcnQgeyBjcmVhdGVCdWlsZEVudmlyb25tZW50IH0gZnJvbSAnLi9idWlsZC1lbnYnO1xuaW1wb3J0IHsgQ2FuYXJ5LCBDYW5hcnlQcm9wcyB9IGZyb20gJy4vY2FuYXJ5JztcbmltcG9ydCB7IENoYW5nZUNvbnRyb2xsZXIgfSBmcm9tICcuL2NoYW5nZS1jb250cm9sbGVyJztcbmltcG9ydCB7IENoaW1lTm90aWZpZXIgfSBmcm9tICcuL2NoaW1lLW5vdGlmaWVyJztcbmltcG9ydCB7IFBpcGVsaW5lV2F0Y2hlciB9IGZyb20gJy4vcGlwZWxpbmUtd2F0Y2hlcic7XG5pbXBvcnQgKiBhcyBwdWJsaXNoaW5nIGZyb20gJy4vcHVibGlzaGluZyc7XG5pbXBvcnQgeyBBdXRvQnVtcCwgQXV0b01lcmdlQmFjaywgQXV0b0J1bXBQcm9wcyB9IGZyb20gJy4vcHVsbC1yZXF1ZXN0JztcbmltcG9ydCB7IEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMgfSBmcm9tICcuL3B1bGwtcmVxdWVzdC9tZXJnZS1iYWNrJztcbmltcG9ydCB7IElSZXBvLCBXcml0YWJsZUdpdEh1YlJlcG8gfSBmcm9tICcuL3JlcG8nO1xuaW1wb3J0IHsgU2hlbGxhYmxlLCBTaGVsbGFibGVQcm9wcyB9IGZyb20gJy4vc2hlbGxhYmxlJztcbmltcG9ydCAqIGFzIHNpZ25pbmcgZnJvbSAnLi9zaWduaW5nJztcbmltcG9ydCB7IGRldGVybWluZVJ1bk9yZGVyLCBmbGF0TWFwIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgUFVCTElTSF9TVEFHRV9OQU1FID0gJ1B1Ymxpc2gnO1xuY29uc3QgU0lHTklOR19TVEFHRV9OQU1FID0gJ1NpZ24nO1xuY29uc3QgVEVTVF9TVEFHRV9OQU1FID0gJ1Rlc3QnO1xuY29uc3QgTUVUUklDX05BTUVTUEFDRSA9ICdDREsvRGVsaXZsaWInO1xuY29uc3QgRkFJTFVSRV9NRVRSSUNfTkFNRSA9ICdGYWlsdXJlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHJlcG9zaXRvcnkgdG8gYnVpbGQgKGUuZy4gR2l0SHViUmVwbykuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBJUmVwbztcblxuICAvKipcbiAgICogQSBkaXNwbGF5IG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwaHlzaWNhbCBuYW1lIGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJyYW5jaCB0byBidWlsZC5cbiAgICogQGRlZmF1bHQgbWFzdGVyXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVtYWlsIHRvIHNlbmQgZmFpbHVyZSBub3RpZmljYXRpb25zLlxuICAgKiBAZGVmYXVsdCAtIE5vIGVtYWlsIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkVtYWlsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdXNlZCBmb3IgdGhlIGJ1aWxkcy5cbiAgICpcbiAgICogQGRlZmF1bHQganNpaS9zdXBlcmNoYWluIChzZWUgZG9jcylcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBjYnVpbGQuSUJ1aWxkSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBDb2RlQnVpbGQgcHJvamVjdCB0aGF0IHdpbGwgYmUgcGFydCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGAke3BpcGVsaW5lTmFtZX0tQnVpbGRgLCBpZiBgcGlwZWxpbmVOYW1lYCBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQ7IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBidWlsZFByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBjb21wdXRlIHRvIHVzZSBmb3IgdGhpcyBidWlsZC5cbiAgICogU2VlIHRoZSB7QGxpbmsgQ29tcHV0ZVR5cGV9IGVudW0gZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRha2VuIGZyb20ge0BsaW5rICNidWlsZEltYWdlI2RlZmF1bHRDb21wdXRlVHlwZX1cbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVUeXBlPzogY2J1aWxkLkNvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IHRoZSBwcm9qZWN0IGJ1aWxkcyBEb2NrZXIgaW1hZ2VzLiBTcGVjaWZ5IHRydWUgdG8gZW5hYmxlXG4gICAqIHJ1bm5pbmcgdGhlIERvY2tlciBkYWVtb24gaW5zaWRlIGEgRG9ja2VyIGNvbnRhaW5lci4gVGhpcyB2YWx1ZSBtdXN0IGJlXG4gICAqIHNldCB0byB0cnVlIG9ubHkgaWYgdGhpcyBidWlsZCBwcm9qZWN0IHdpbGwgYmUgdXNlZCB0byBidWlsZCBEb2NrZXJcbiAgICogaW1hZ2VzLCBhbmQgdGhlIHNwZWNpZmllZCBidWlsZCBlbnZpcm9ubWVudCBpbWFnZSBpcyBub3Qgb25lIHByb3ZpZGVkIGJ5XG4gICAqIEFXUyBDb2RlQnVpbGQgd2l0aCBEb2NrZXIgc3VwcG9ydC4gT3RoZXJ3aXNlLCBhbGwgYXNzb2NpYXRlZCBidWlsZHMgdGhhdFxuICAgKiBhdHRlbXB0IHRvIGludGVyYWN0IHdpdGggdGhlIERvY2tlciBkYWVtb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmlsZWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIGJ1aWxkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJ1aWxkc3BlYywgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSBidWlsZHNwZWMueW1sIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNidWlsZC5CdWlsZFNwZWM7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHJlLXJ1biB0aGUgcGlwZWxpbmUgYWZ0ZXIgeW91J3ZlIHVwZGF0ZWQgaXQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29uY3VycmVuY3kgbGltaXQgdGVzdCBhbmQgcHVibGlzaCBzdGFnZXMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIHZhbHVlIGlzIDIsIHRoZW4gb25seSB0d28gYWN0aW9ucyB3aWxsIGV4ZWN1dGUgY29uY3VycmVudGx5LlxuICAgKiBJZiB0aGlzIHZhbHVlIGlzIDEsIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBoYXZlIGFueSBjb25jdXJyZW50IGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBkcnlSdW4gZm9yIGFsbCBwdWJsaXNoaW5nIHN0ZXBzXG4gICAqXG4gICAqIChDYW4gc3RpbGwgYmUgY2hhbmdlZCB3aGVuIGFkZGluZyBhIHN0ZXApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidWlsZCBjb21taXRzIHRoYXQgYXJlIHB1c2hlZCB0byB0aGlzIHJlcG9zaXRvcnksIGluY2x1ZGluZyBQUiBidWlsZHMgb24gZ2l0aHViLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYXV0by1idWlsZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtICdhdXRvQnVpbGRPcHRpb25zLnB1YmxpY0xvZ3MnIHdpbGwgYmUgc2V0IHRvIGl0cyBkZWZhdWx0LiAnYXV0b0J1aWxkT3B0aW9ucy5idWlsZHNwZWMnIHdpbGwgYmUgY29uZmlndXJlZCB0byBtYXRjaCB3aXRoIHRoZVxuICAgKiAnYnVpbGRTcGVjJyBwcm9wZXJ0eS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9CdWlsZE9wdGlvbnM/OiBBdXRvQnVpbGRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQb3N0IGEgbm90aWZpY2F0aW9uIHRvIHRoZSBnaXZlbiBDaGltZSB3ZWJob29rcyBpZiB0aGUgcGlwZWxpbmUgZmFpbHNcbiAgICogQGRlZmF1bHQgLSBubyBDaGltZSBub3RpZmljYXRpb25zIG9uIHBpcGVsaW5lIGZhaWx1cmVcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYG5vdGlmeU9uRmFpbHVyZSgpYCBpbnN0ZWFkIGluIGNvbWJpbmF0aW9uIHdpdGggYFBpcGVsaW5lTm90aWZpY2F0aW9uLmNoaW1lKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbWVGYWlsdXJlV2ViaG9va3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIENoaW1lIG1lc3NhZ2UgdG8gcG9zdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgZGVmYXVsdCBtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBjaGltZU1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRpbWVvdXRcbiAgICpcbiAgICogSG93IGxvbmcgdGhlIGJ1aWxkIGNhbiB0YWtlIGF0IG1heGltdW0gKGJlZm9yZSBmYWlsaW5nIHdpdGggYW4gZXJyb3IpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLmhvdXJzKDgpXG4gICAqL1xuICByZWFkb25seSBidWlsZFRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZU5vdGlmaWNhdGlvbkJpbmRPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGlwZWxpbmU6IFBpcGVsaW5lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaXBlbGluZU5vdGlmaWNhdGlvbiB7XG4gIGJpbmQocGlwZWxpbmU6IFBpcGVsaW5lTm90aWZpY2F0aW9uQmluZE9wdGlvbnMpOiB2b2lkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIGF1dG8gYnVtcCBmb3IgdGhpcyBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvQnVtcE9wdGlvbnMgZXh0ZW5kcyBPbWl0PEF1dG9CdW1wUHJvcHMsICdyZXBvJz4ge1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBkZWxpdmxpYiBDSS9DRCBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGJ1aWxkUm9sZT86IGlhbS5JUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVBbGFybTogY2xvdWR3YXRjaC5BbGFybTtcbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkT3V0cHV0OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VBcnRpZmFjdDogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBDb2RlQnVpbGQgcHJvamVjdCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0byBidWlsZCBwcm9qZWN0LiB1bmRlZmluZWQgaWYgJ2F1dG9CdWlsZCcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b0J1aWxkUHJvamVjdD86IGNidWlsZC5Qcm9qZWN0O1xuXG4gIC8qXG4gICAqIFRoZSB1bmRlcmx5aW5nIENvZGVQaXBlbGluZSBQaXBlbGluZSBvYmplY3QgdGhhdCBtb2RlbHMgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwaXBlbGluZTogY3BpcGVsaW5lLlBpcGVsaW5lO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeT86IHNucy5Ub3BpYztcbiAgcHJpdmF0ZSBkZWZhdWx0QXJ0aWZhY3Q6IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcHJpdmF0ZSBzdGFnZXM6IHsgW25hbWU6IHN0cmluZ106IGNwaXBlbGluZS5JU3RhZ2UgfSA9IHsgfTtcbiAgcHJpdmF0ZSBfc2lnbmluZ091dHB1dD86IGNwaXBlbGluZS5BcnRpZmFjdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG86IElSZXBvO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZEVudmlyb25tZW50OiBjYnVpbGQuQnVpbGRFbnZpcm9ubWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFNwZWM/OiBjYnVpbGQuQnVpbGRTcGVjO1xuICBwcml2YXRlIGZpcnN0UHVibGlzaFN0YWdlTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBkZXNjclBpcGVsaW5lTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZVByb3BzKSB7XG4gICAgc3VwZXIocGFyZW50LCBuYW1lKTtcblxuICAgIHRoaXMuY29uY3VycmVuY3kgPSBwcm9wcy5jb25jdXJyZW5jeTtcbiAgICB0aGlzLnJlcG8gPSBwcm9wcy5yZXBvO1xuICAgIHRoaXMuZHJ5UnVuID0gISFwcm9wcy5kcnlSdW47XG5cbiAgICB0aGlzLnBpcGVsaW5lID0gbmV3IGNwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnQnVpbGRQaXBlbGluZScsIHtcbiAgICAgIHBpcGVsaW5lTmFtZTogcHJvcHMucGlwZWxpbmVOYW1lLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiBwcm9wcy5yZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBwcm9wcy5yZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGUsXG4gICAgfSk7XG4gICAgLy8gV2Ugd2lsbCB1c2UgdGhlIHBpcGVsaW5lIG5hbWUgaWYgZ2l2ZW4sIGJ1dCB3ZSBjYW4ndCB1c2UgdGhlIFJlZiBpZiBub3QgZ2l2ZW5cbiAgICAvLyBiZWNhdXNlIHRoYXQgd291bGQgY3JlYXRlIGN5Y2xpYyByZWZlcmVuY2VzLiBGYWxsIGJhY2sgdG8gY29uc3RydWN0IHBhdGggaWYgYW5vbnltb3VzLlxuICAgIHRoaXMuZGVzY3JQaXBlbGluZU5hbWUgPSBwcm9wcy5waXBlbGluZU5hbWUgPz8gdGhpcy5ub2RlLnBhdGg7XG5cbiAgICB0aGlzLmJyYW5jaCA9IHByb3BzLmJyYW5jaCB8fCAnbWFzdGVyJztcbiAgICB0aGlzLnNvdXJjZUFydGlmYWN0ID0gcHJvcHMucmVwby5jcmVhdGVTb3VyY2VTdGFnZSh0aGlzLnBpcGVsaW5lLCB0aGlzLmJyYW5jaCk7XG5cbiAgICB0aGlzLmJ1aWxkRW52aXJvbm1lbnQgPSBjcmVhdGVCdWlsZEVudmlyb25tZW50KHByb3BzKTtcbiAgICB0aGlzLmJ1aWxkU3BlYyA9IHByb3BzLmJ1aWxkU3BlYztcblxuICAgIGxldCBidWlsZFByb2plY3ROYW1lID0gcHJvcHMuYnVpbGRQcm9qZWN0TmFtZTtcbiAgICBpZiAoYnVpbGRQcm9qZWN0TmFtZSA9PT0gdW5kZWZpbmVkICYmIHByb3BzLnBpcGVsaW5lTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBidWlsZFByb2plY3ROYW1lID0gYCR7cHJvcHMucGlwZWxpbmVOYW1lfS1CdWlsZGA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRQcm9qZWN0ID0gbmV3IGNidWlsZC5QaXBlbGluZVByb2plY3QodGhpcywgJ0J1aWxkUHJvamVjdCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmRlc2NyUGlwZWxpbmVOYW1lfTogYnVpbGQgc3RlcGAsXG4gICAgICBwcm9qZWN0TmFtZTogYnVpbGRQcm9qZWN0TmFtZSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkRW52aXJvbm1lbnQsXG4gICAgICBidWlsZFNwZWM6IHRoaXMuYnVpbGRTcGVjLFxuICAgICAgdGltZW91dDogcHJvcHMuYnVpbGRUaW1lb3V0ID8/IER1cmF0aW9uLmhvdXJzKDgpLFxuICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFJvbGUgPSB0aGlzLmJ1aWxkUHJvamVjdC5yb2xlO1xuICAgIHRoaXMuYnVpbGRSb2xlIS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUmVhZE9ubHknKSk7XG5cbiAgICBjb25zdCBidWlsZFN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKCdCdWlsZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0ID0gbmV3IGNwaXBlbGluZS5BcnRpZmFjdCgpO1xuICAgIGJ1aWxkU3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ0J1aWxkJyxcbiAgICAgIHByb2plY3Q6IHRoaXMuYnVpbGRQcm9qZWN0LFxuICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICBvdXRwdXRzOiBbYnVpbGRPdXRwdXRdLFxuICAgIH0pKTtcbiAgICB0aGlzLmJ1aWxkT3V0cHV0ID0gYnVpbGRPdXRwdXQ7XG4gICAgdGhpcy5kZWZhdWx0QXJ0aWZhY3QgPSBidWlsZE91dHB1dDtcblxuICAgIGlmIChwcm9wcy5ub3RpZmljYXRpb25FbWFpbCkge1xuICAgICAgdGhpcy5ub3RpZnkgPSBuZXcgc25zLlRvcGljKHRoaXMsICdOb3RpZmljYXRpb25zVG9waWMnKTtcbiAgICAgIHRoaXMubm90aWZ5LmFkZFN1YnNjcmlwdGlvbihuZXcgc25zX3N1YnMuRW1haWxTdWJzY3JpcHRpb24ocHJvcHMubm90aWZpY2F0aW9uRW1haWwpKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYSBmYWlsdXJlIGFsYXJtIGZvciB0aGUgZW50aXJlIHBpcGVsaW5lLlxuICAgIHRoaXMuZmFpbHVyZUFsYXJtID0gdGhpcy5hZGRGYWlsdXJlQWxhcm0ocHJvcHMudGl0bGUpO1xuXG4gICAgLy8gZW1pdCBhbiBTTlMgbm90aWZpY2F0aW9uIGV2ZXJ5IHRpbWUgYnVpbGQgZmFpbHMuXG4gICAgdGhpcy5hZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24odGhpcy5idWlsZFByb2plY3QsIGAke3Byb3BzLnRpdGxlfSBidWlsZCBmYWlsZWRgKTtcblxuICAgIC8vIEFsc28gZW1pdCB0byBDaGltZSB3ZWJob29rcyBpZiBjb25maWd1cmVkXG4gICAgaWYgKHByb3BzLmNoaW1lRmFpbHVyZVdlYmhvb2tzKSB7XG4gICAgICBuZXcgQ2hpbWVOb3RpZmllcih0aGlzLCAnQ2hpbWVOb3RpZmllcicsIHtcbiAgICAgICAgcGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICAgIG1lc3NhZ2U6IHByb3BzLmNoaW1lTWVzc2FnZSxcbiAgICAgICAgd2ViaG9va1VybHM6IHByb3BzLmNoaW1lRmFpbHVyZVdlYmhvb2tzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmF1dG9CdWlsZCkge1xuICAgICAgdGhpcy5hdXRvQnVpbGRQcm9qZWN0ID0gdGhpcy5hdXRvQnVpbGQocHJvcHMuYXV0b0J1aWxkT3B0aW9ucykucHJvamVjdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbmluZyBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIHB1YmxpYyBnZXQgc2lnbmluZ091dHB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmluZ091dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBub3RpZnlPbkZhaWx1cmUobm90aWZpY2F0aW9uOiBJUGlwZWxpbmVOb3RpZmljYXRpb24pIHtcbiAgICBub3RpZmljYXRpb24uYmluZCh7XG4gICAgICBwaXBlbGluZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYWN0aW9uIHRvIHJ1biBhIHNoZWxsIHNjcmlwdCB0byB0aGUgcGlwZWxpbmVcbiAgICpcbiAgICogQHJldHVybiBUaGUgU2hlbGxhYmxlIGFuZCB0aGUgQWN0aW9uIGFkZGVkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyBhZGRTaGVsbGFibGUoc3RhZ2VOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFNoZWxsYWJsZU9wdGlvbnMpOiB7XG4gICAgc2hlbGxhYmxlOiBTaGVsbGFibGU7IGFjdGlvbjogY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uO30ge1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZSk7XG5cbiAgICBjb25zdCBzaCA9IG5ldyBTaGVsbGFibGUodGhpcywgaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHNoLmFkZFRvUGlwZWxpbmUoXG4gICAgICBzdGFnZSxcbiAgICAgIG9wdGlvbnMuYWN0aW9uTmFtZSB8fCBgQWN0aW9uJHtpZH1gLFxuICAgICAgb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuZGVmYXVsdEFydGlmYWN0LFxuICAgICAgdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSkpO1xuXG4gICAgaWYgKG9wdGlvbnMuZmFpbHVyZU5vdGlmaWNhdGlvbikge1xuICAgICAgdGhpcy5hZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24oc2gucHJvamVjdCwgb3B0aW9ucy5mYWlsdXJlTm90aWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzaGVsbGFibGU6IHNoLCBhY3Rpb24gfTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXN0KGlkOiBzdHJpbmcsIHByb3BzOiBTaGVsbGFibGVQcm9wcyk6IHtzaGVsbGFibGU6IFNoZWxsYWJsZTsgYWN0aW9uOiBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb259IHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaGVsbGFibGUoVEVTVF9TVEFHRV9OQU1FLCBpZCwge1xuICAgICAgYWN0aW9uTmFtZTogYFRlc3Qke2lkfWAsXG4gICAgICBmYWlsdXJlTm90aWZpY2F0aW9uOiBgVGVzdCAke2lkfSBmYWlsZWRgLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UvZGlzY292ZXJ5IG1ldGhvZCB0aGF0IGRlZmluZXMgYSBjYW5hcnkgdGVzdCBpbiB5b3VyIGFjY291bnQuXG4gICAqIEBwYXJhbSBpZCB0aGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBwcm9wcyBjYW5hcnkgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZENhbmFyeShpZDogc3RyaW5nLCBwcm9wczogQ2FuYXJ5UHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IENhbmFyeSh0aGlzLCBgQ2FuYXJ5JHtpZH1gLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgYWRkUHVibGlzaChwdWJsaXNoZXI6IElQdWJsaXNoZXIsIG9wdGlvbnM6IEFkZFB1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBwdWJsaXNoU3RhZ2VOYW1lID0gb3B0aW9ucy5zdGFnZU5hbWUgPz8gUFVCTElTSF9TVEFHRV9OQU1FO1xuICAgIGlmICghdGhpcy5maXJzdFB1Ymxpc2hTdGFnZU5hbWUpIHtcbiAgICAgIHRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lID0gcHVibGlzaFN0YWdlTmFtZTtcbiAgICB9XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2UocHVibGlzaFN0YWdlTmFtZSk7XG5cbiAgICBwdWJsaXNoZXIuYWRkVG9QaXBlbGluZShzdGFnZSwgYCR7cHVibGlzaGVyLm5vZGUuaWR9UHVibGlzaGAsIHtcbiAgICAgIGlucHV0QXJ0aWZhY3Q6IG9wdGlvbnMuaW5wdXRBcnRpZmFjdCB8fCB0aGlzLmRlZmF1bHRBcnRpZmFjdCxcbiAgICAgIHJ1bk9yZGVyOiB0aGlzLmRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGNvbnRyb2wgcG9saWN5IHRvIGJsb2NrIHRyYW5zaXRpb25zIGludG8gdGhlIHB1Ymxpc2ggc3RhZ2UgZHVyaW5nIGNlcnRhaW4gdGltZSB3aW5kb3dzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGNoYW5nZSBjb250cm9sIHBvbGljeS5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGFuZ2VDb250cm9sKG9wdGlvbnM6IEFkZENoYW5nZUNvbnRyb2xPcHRpb25zID0geyB9KTogQ2hhbmdlQ29udHJvbGxlciB7XG4gICAgY29uc3QgcHVibGlzaFN0YWdlID0gdGhpcy5nZXRTdGFnZSh0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSA/PyBQVUJMSVNIX1NUQUdFX05BTUUpO1xuICAgIGlmICghcHVibGlzaFN0YWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgcGlwZWxpbmUgZG9lcyBub3QgaGF2ZSBhICR7UFVCTElTSF9TVEFHRV9OQU1FfSBzdGFnZSB5ZXQuIEFkZCBvbmUgZmlyc3QuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFuZ2VDb250cm9sbGVyKHRoaXMsICdDaGFuZ2VDb250cm9sbGVyJywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHBpcGVsaW5lU3RhZ2U6IHB1Ymxpc2hTdGFnZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTaWduaW5nKHNpZ25lcjogc2lnbmluZy5JU2lnbmVyLCBvcHRpb25zOiBzaWduaW5nLkFkZFNpZ25pbmdPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzaWduaW5nU3RhZ2VOYW1lID0gb3B0aW9ucy5zdGFnZU5hbWUgPz8gU0lHTklOR19TVEFHRV9OQU1FO1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHNpZ25pbmdTdGFnZU5hbWUpO1xuXG4gICAgdGhpcy5fc2lnbmluZ091dHB1dCA9IHNpZ25lci5hZGRUb1BpcGVsaW5lKHN0YWdlLCBgJHtzaWduZXIubm9kZS5pZH1TaWduYCwge1xuICAgICAgaW5wdXRBcnRpZmFjdDogb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuZGVmYXVsdEFydGlmYWN0LFxuICAgICAgcnVuT3JkZXI6IHRoaXMuZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2UpLFxuICAgIH0pO1xuICAgIHRoaXMuZGVmYXVsdEFydGlmYWN0ID0gdGhpcy5fc2lnbmluZ091dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBzaWduTnVHZXRXaXRoU2lnbmVyKG9wdGlvbnM6IHNpZ25pbmcuU2lnbk51R2V0V2l0aFNpZ25lclByb3BzICYgc2lnbmluZy5BZGRTaWduaW5nT3B0aW9ucykge1xuICAgIHRoaXMuYWRkU2lnbmluZyhuZXcgc2lnbmluZy5TaWduTnVHZXRXaXRoU2lnbmVyKHRoaXMsICdOdUdldFNpZ25pbmcnLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9OcG0ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OcG1Qcm9qZWN0KHRoaXMsICdOcG0nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiA/PyBgUGlwZWxpbmUgJHt0aGlzLmRlc2NyUGlwZWxpbmVOYW1lfTogcHVibGlzaCB0byBOUE1gLFxuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb01hdmVuKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTWF2ZW5Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3QodGhpcywgJ01hdmVuJywge1xuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gYFBpcGVsaW5lICR7dGhpcy5kZXNjclBpcGVsaW5lTmFtZX06IHB1Ymxpc2ggdG8gTWF2ZW5gLFxuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb051R2V0KG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnVHZXRQcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3QodGhpcywgJ051R2V0Jywge1xuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gYFBpcGVsaW5lICR7dGhpcy5kZXNjclBpcGVsaW5lTmFtZX06IHB1Ymxpc2ggdG8gTnVHZXRgLFxuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YlBhZ2VzKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hEb2NzVG9HaXRIdWJQcm9qZWN0KHRoaXMsICdHaXRIdWJQYWdlcycsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/IGBQaXBlbGluZSAke3RoaXMuZGVzY3JQaXBlbGluZU5hbWV9OiBwdWJsaXNoIHRvIEdpdEh1YiBQYWdlc2AsXG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvR2l0SHViKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvR2l0SHViUHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9HaXRIdWIodGhpcywgJ0dpdEh1YicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/IGBQaXBlbGluZSAke3RoaXMuZGVzY3JQaXBlbGluZU5hbWV9OiBwdWJsaXNoIHRvIEdpdEh1YmAsXG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvUHlQSShvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGlQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1B5UGkodGhpcywgJ1B5UEknLCB7XG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiA/PyBgUGlwZWxpbmUgJHt0aGlzLmRlc2NyUGlwZWxpbmVOYW1lfTogcHVibGlzaCB0byBQeVBJYCxcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9TMyhpZDogc3RyaW5nLCBvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb1MzUHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9TMyh0aGlzLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gYFBpcGVsaW5lICR7dGhpcy5kZXNjclBpcGVsaW5lTmFtZX06IHB1Ymxpc2ggdG8gUzMgKCR7b3B0aW9ucy5idWNrZXQuYnVja2V0TmFtZX0pYCxcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIEdvbGFuZyBjb2RlIGZyb20gYGdvYCBkaXJlY3RvcnkgaW4gYnVpbGQgYXJ0aWZhY3QgdG8gYSBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9Hb2xhbmcob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmdQcm9wcykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9Hb2xhbmcodGhpcywgJ0dvbGFuZycsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/IGBQaXBlbGluZSAke3RoaXMuZGVzY3JQaXBlbGluZU5hbWV9OiBwdWJsaXNoIEdvbGFuZ2AsXG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVtcHMgZm9yIHRoZSBzb3VyY2UgcmVwby5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgYXV0byBidW1wIChzZWUgQXV0b0J1bXBPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvQnVtcChvcHRpb25zPzogQXV0b0J1bXBPcHRpb25zKTogQXV0b0J1bXAge1xuICAgIGlmICghV3JpdGFibGVHaXRIdWJSZXBvLmlzV3JpdGFibGVHaXRIdWJSZXBvKHRoaXMucmVwbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZXBvXCIgbXVzdCBiZSBhIFdyaXRhYmxlR2l0SHViUmVwbyBpbiBvcmRlciB0byBlbmFibGUgYXV0by1idW1wJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0b0J1bXAgPSBuZXcgQXV0b0J1bXAodGhpcywgJ0F1dG9CdW1wJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHJldHVybiBhdXRvQnVtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBtZXJnZSBiYWNrcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvTWVyZ2VCYWNrKG9wdGlvbnM/OiBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLW1lcmdlLWJhY2snKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZUJhY2sgPSBuZXcgQXV0b01lcmdlQmFjayh0aGlzLCAnTWVyZ2VCYWNrJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHByb2plY3REZXNjcmlwdGlvbjogb3B0aW9ucz8ucHJvamVjdERlc2NyaXB0aW9uID8/IGBQaXBlbGluZSAke3RoaXMuZGVzY3JQaXBlbGluZU5hbWV9OiBtZXJnZS1iYWNrIHN0ZXBgLFxuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbnM/LnN0YWdlKSB7XG5cbiAgICAgIGNvbnN0IGFmdGVyU3RhZ2UgPSB0aGlzLmdldFN0YWdlKG9wdGlvbnMuc3RhZ2UuYWZ0ZXIpO1xuXG4gICAgICBpZiAoIWFmdGVyU3RhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnb3B0aW9ucy5zdGFnZS5hZnRlcicgbXVzdCBiZSBjb25maWd1cmVkIHRvIGFuIGV4aXN0aW5nIHN0YWdlOiAke29wdGlvbnMuc3RhZ2UuYWZ0ZXJ9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKG9wdGlvbnMuc3RhZ2UubmFtZSA/PyAnTWVyZ2VCYWNrJywgeyBqdXN0QWZ0ZXI6IGFmdGVyU3RhZ2UgfSk7XG4gICAgICBzdGFnZS5hZGRBY3Rpb24obmV3IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbih7XG4gICAgICAgIGFjdGlvbk5hbWU6ICdDcmVhdGVNZXJnZUJhY2tQdWxsUmVxdWVzdCcsXG4gICAgICAgIHByb2plY3Q6IG1lcmdlQmFjay5wci5wcm9qZWN0LFxuICAgICAgICBpbnB1dDogdGhpcy5zb3VyY2VBcnRpZmFjdCxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVpbGRzIG9mIHB1bGwgcmVxdWVzdHMgaW4gdGhlIEdpdGh1YiByZXBvc2l0b3J5IGFuZCBwb3N0cyB0aGVcbiAgICogcmVzdWx0cyBiYWNrIGFzIGEgY29tbWVudCB3aXRoIGEgcHVibGljIGxpbmsgdG8gdGhlIGJ1aWxkIGxvZ3MuXG4gICAqL1xuICBwdWJsaWMgYXV0b0J1aWxkKG9wdGlvbnM6IEF1dG9CdWlsZE9wdGlvbnMgPSB7IH0pOiBBdXRvQnVpbGQge1xuICAgIHJldHVybiBuZXcgQXV0b0J1aWxkKHRoaXMsICdBdXRvQnVpbGQnLCB7XG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5idWlsZEVudmlyb25tZW50LFxuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgYnVpbGRTcGVjOiBvcHRpb25zLmJ1aWxkU3BlYyB8fCB0aGlzLmJ1aWxkU3BlYyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpYyB0aGF0IHRyYWNrcyBwaXBlbGluZSBmYWlsdXJlcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNGYWlsdXJlcyhvcHRpb25zOiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IE1FVFJJQ19OQU1FU1BBQ0UsXG4gICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBQaXBlbGluZTogdGhpcy5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICB9LFxuICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldHJpY3MgdGhhdCB0cmFjayBmYWlsdXJlIG9mIGVhY2ggYWN0aW9uIHdpdGhpbiB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQWN0aW9uRmFpbHVyZXMob3B0aW9uczogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWNbXSB7XG4gICAgcmV0dXJuIGZsYXRNYXAodGhpcy5waXBlbGluZS5zdGFnZXMsIHN0YWdlID0+IHN0YWdlLmFjdGlvbnMubWFwKGFjdGlvbiA9PiB7XG4gICAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgICAgbmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgICBtZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICAgIEFjdGlvbjogYWN0aW9uLmFjdGlvblByb3BlcnRpZXMuYWN0aW9uTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRNYW51YWxBcHByb3ZhbFRvU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHByb3BzPzogY3BpcGVsaW5lX2FjdGlvbnMuTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykge1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZSk7XG4gICAgc3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5NYW51YWxBcHByb3ZhbEFjdGlvbihwcm9wcyA/PyB7XG4gICAgICBhY3Rpb25OYW1lOiAnTWFudWFsQXBwcm92YWxBY3Rpb24nLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRmFpbHVyZUFsYXJtKHRpdGxlPzogc3RyaW5nKTogY2xvdWR3YXRjaC5BbGFybSB7XG4gICAgcmV0dXJuIG5ldyBQaXBlbGluZVdhdGNoZXIodGhpcywgJ1BpcGVsaW5lV2F0Y2hlcicsIHtcbiAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgbWV0cmljTmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgZmFpbHVyZU1ldHJpY05hbWU6IEZBSUxVUkVfTUVUUklDX05BTUUsXG4gICAgICB0aXRsZSxcbiAgICB9KS5hbGFybTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0LCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubm90aWZ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVpbGRQcm9qZWN0Lm9uQnVpbGRGYWlsZWQoJ09uQnVpbGRGYWlsZWQnKS5hZGRUYXJnZXQobmV3IGV2ZW50c190YXJnZXRzLlNuc1RvcGljKHRoaXMubm90aWZ5LCB7XG4gICAgICBtZXNzYWdlOiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21UZXh0KG1lc3NhZ2UpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB0aGUgc3RhZ2Ugb3IgdW5kZWZpbmVkIGlmIHRoZSBzdGFnZSBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBwcml2YXRlIGdldFN0YWdlKHN0YWdlTmFtZTogc3RyaW5nKTogY3BpcGVsaW5lLklTdGFnZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhZ2VzW3N0YWdlTmFtZV07XG4gIH1cblxuICBwcml2YXRlIGdldE9yQ3JlYXRlU3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHBsYWNlbWVudD86IGNwaXBlbGluZS5TdGFnZVBsYWNlbWVudCk6IGNwaXBlbGluZS5JU3RhZ2Uge1xuICAgIC8vIG90aGVyd2lzZSwgZ3JvdXAgYWxsIGFjdGlvbnMgc28gdGhleSBydW4gY29uY3VycmVudGx5LlxuICAgIGxldCBzdGFnZSA9IHRoaXMuZ2V0U3RhZ2Uoc3RhZ2VOYW1lKTtcbiAgICBpZiAoIXN0YWdlKSB7XG4gICAgICBzdGFnZSA9IHRoaXMucGlwZWxpbmUuYWRkU3RhZ2Uoe1xuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdGFnZXNbc3RhZ2VOYW1lXSA9IHN0YWdlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhZ2U7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZGV0ZXJtaW5lUnVuT3JkZXIoc3RhZ2UuYWN0aW9ucy5sZW5ndGgsIHRoaXMuY29uY3VycmVuY3kpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVB1Ymxpc2hlciBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICBhZGRUb1BpcGVsaW5lKHN0YWdlOiBjcGlwZWxpbmUuSVN0YWdlLCBpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRUb1BpcGVsaW5lT3B0aW9ucyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkVG9QaXBlbGluZU9wdGlvbnMge1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuICBydW5PcmRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRDaGFuZ2VDb250cm9sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGluIHdoaWNoIHRoZSBDaGFuZ2VDb250cm9sIGlDYWwgZG9jdW1lbnQgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IGJ1Y2tldCB3aWxsIGJlIHByb3Zpc2lvbmVkLlxuICAgKi9cbiAgY2hhbmdlQ29udHJvbEJ1Y2tldD86IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgaW4gd2hpY2ggdGhlIGlDYWwgZmlsbGUgd2lsbCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdjaGFuZ2UtY29udHJvbC5pY2FsJ1xuICAgKi9cbiAgY2hhbmdlQ29udHJvbE9iamVjdEtleT86IHN0cmluZztcblxuICAvKipcbiAgICogU2NoZWR1bGUgdG8gcnVuIHRoZSBjaGFuZ2UgY29udHJvbGxlciBvblxuICAgKlxuICAgKiBAZGVmYXVsdCByYXRlKDE1IG1pbnV0ZXMpXG4gICAqL1xuICBzY2hlZHVsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBTaWduaW5nIG91dHB1dCBhcnRpZmFjdCB3aGVuIGEgc2lnbmluZyBzdGFnZSBpcyBhZGRlZCB0byB0aGVcbiAgICogcGlwZWxpbmUgdmlhIGBhZGRTaWduaW5nYCBvciBgc2lnbk51R2V0V2l0aFNpZ25lcmAuIE90aGVyd2lzZSwgdGhlIGRlZmF1bHRcbiAgICogd2lsbCBiZSB0aGUgYnVpbGQgb3V0cHV0IGFydGlmYWN0LlxuICAgKi9cbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSB0byBhZGQgcHVibGlzaGluZyBqb2IgdG9cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIGJlIHRoZSBzdGFnZSBuYW1lIGAnUHVibGlzaCdgLCBidXQgaWYgeW91IHdhbnQgdG9cbiAgICogc2VwYXJhdGUgb3V0IHRoZSBwdWJsaXNoaW5nIGFjdGlvbnMgaW50byBkaWZmZXJlbnQgc3RhZ2VzIChpbiBvcmRlciB0b1xuICAgKiBibG9jay91bmJsb2NrIHRoZW0gc2VwYXJhdGVseSBmb3IgZXhhbXBsZSkgeW91IGNhbiBjaGFuZ2UgdGhpcy5cbiAgICpcbiAgICogU3RhZ2VzIGFwcGVhciBpbiB0aGUgcGlwZWxpbmUgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHJlZmVyZW5jZWQgZm9yXG4gICAqIHRoZSBmaXJzdCB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIlB1Ymxpc2hcIlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNoZWxsYWJsZU9wdGlvbnMgZXh0ZW5kcyBTaGVsbGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTdHJpbmcgdG8gdXNlIGFzIGFjdGlvbiBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IElkXG4gICAqL1xuICBhY3Rpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHRvIHVzZSBhcyBmYWlsdXJlIG5vdGlmaWNhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBub3RpZmljYXRpb25cbiAgICovXG4gIGZhaWx1cmVOb3RpZmljYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBhcnRpZmFjdCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgU2lnbmluZyBvdXRwdXQgYXJ0aWZhY3Qgd2hlbiBhIHNpZ25pbmcgc3RhZ2UgaXMgYWRkZWQgdG8gdGhlXG4gICAqIHBpcGVsaW5lIHZpYSBgYWRkU2lnbmluZ2Agb3IgYHNpZ25OdUdldFdpdGhTaWduZXJgLiBPdGhlcndpc2UsIHRoZSBkZWZhdWx0XG4gICAqIHdpbGwgYmUgdGhlIGJ1aWxkIG91dHB1dCBhcnRpZmFjdC5cbiAgICovXG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG59XG4iXX0=
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQVdxQjtBQUNyQiwyQ0FBbUQ7QUFFbkQsNkNBQTJEO0FBQzNELDJDQUFxRDtBQUNyRCxxQ0FBK0M7QUFDL0MsMkRBQXVEO0FBQ3ZELHFEQUFpRDtBQUNqRCx5REFBcUQ7QUFDckQseURBQTJDO0FBQzNDLGlEQUF3RTtBQUV4RSxpQ0FBbUQ7QUFDbkQsMkNBQXdEO0FBQ3hELG1EQUFxQztBQUNyQyxpQ0FBb0Q7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7QUFDbEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBd0p2Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBa0NyQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW9CO1FBQy9ELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFaZCxXQUFNLEdBQXlDLEVBQUcsQ0FBQztRQWN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDhCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDNUQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyx3QkFBd0Is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ZTtRQUNoRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFPO1NBQ1I7UUFFRCxZQUFZLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLGdDQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDN0YsT0FBTyxFQUFFLHdCQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxRQUFRLENBQUMsU0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLFNBQW9DO1FBQzlFLHlEQUF5RDtRQUN6RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLFNBQVM7Z0JBQ1QsU0FBUzthQUNWLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sNkJBQTZCLENBQUMsS0FBdUI7UUFDM0QsT0FBTyxJQUFBLHdCQUFpQixFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0Y7QUFwYUQsNEJBb2FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRHVyYXRpb24sXG4gIGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2gsXG4gIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSxcbiAgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxuICBhd3NfZXZlbnRzIGFzIGV2ZW50cyxcbiAgYXdzX2V2ZW50c190YXJnZXRzIGFzIGV2ZW50c190YXJnZXRzLFxuICBhd3NfaWFtIGFzIGlhbSwgYXdzX3MzIGFzIHMzLFxuICBhd3Nfc25zIGFzIHNucyxcbiAgYXdzX3Nuc19zdWJzY3JpcHRpb25zIGFzIHNuc19zdWJzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0IHsgQXV0b0J1aWxkLCBBdXRvQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9hdXRvLWJ1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUJ1aWxkRW52aXJvbm1lbnQgfSBmcm9tICcuL2J1aWxkLWVudic7XG5pbXBvcnQgeyBDYW5hcnksIENhbmFyeVByb3BzIH0gZnJvbSAnLi9jYW5hcnknO1xuaW1wb3J0IHsgQ2hhbmdlQ29udHJvbGxlciB9IGZyb20gJy4vY2hhbmdlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ2hpbWVOb3RpZmllciB9IGZyb20gJy4vY2hpbWUtbm90aWZpZXInO1xuaW1wb3J0IHsgUGlwZWxpbmVXYXRjaGVyIH0gZnJvbSAnLi9waXBlbGluZS13YXRjaGVyJztcbmltcG9ydCAqIGFzIHB1Ymxpc2hpbmcgZnJvbSAnLi9wdWJsaXNoaW5nJztcbmltcG9ydCB7IEF1dG9CdW1wLCBBdXRvTWVyZ2VCYWNrLCBBdXRvQnVtcFByb3BzIH0gZnJvbSAnLi9wdWxsLXJlcXVlc3QnO1xuaW1wb3J0IHsgQXV0b01lcmdlQmFja1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vcHVsbC1yZXF1ZXN0L21lcmdlLWJhY2snO1xuaW1wb3J0IHsgSVJlcG8sIFdyaXRhYmxlR2l0SHViUmVwbyB9IGZyb20gJy4vcmVwbyc7XG5pbXBvcnQgeyBTaGVsbGFibGUsIFNoZWxsYWJsZVByb3BzIH0gZnJvbSAnLi9zaGVsbGFibGUnO1xuaW1wb3J0ICogYXMgc2lnbmluZyBmcm9tICcuL3NpZ25pbmcnO1xuaW1wb3J0IHsgZGV0ZXJtaW5lUnVuT3JkZXIsIGZsYXRNYXAgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBQVUJMSVNIX1NUQUdFX05BTUUgPSAnUHVibGlzaCc7XG5jb25zdCBTSUdOSU5HX1NUQUdFX05BTUUgPSAnU2lnbic7XG5jb25zdCBURVNUX1NUQUdFX05BTUUgPSAnVGVzdCc7XG5jb25zdCBNRVRSSUNfTkFNRVNQQUNFID0gJ0NESy9EZWxpdmxpYic7XG5jb25zdCBGQUlMVVJFX01FVFJJQ19OQU1FID0gJ0ZhaWx1cmVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgcmVwb3NpdG9yeSB0byBidWlsZCAoZS5nLiBHaXRIdWJSZXBvKS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IElSZXBvO1xuXG4gIC8qKlxuICAgKiBBIGRpc3BsYXkgbmFtZSBmb3IgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBoeXNpY2FsIG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQnJhbmNoIHRvIGJ1aWxkLlxuICAgKiBAZGVmYXVsdCBtYXN0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogRW1haWwgdG8gc2VuZCBmYWlsdXJlIG5vdGlmaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IC0gTm8gZW1haWwgbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRW1haWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB1c2VkIGZvciB0aGUgYnVpbGRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBqc2lpL3N1cGVyY2hhaW4gKHNlZSBkb2NzKVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJbWFnZT86IGNidWlsZC5JQnVpbGRJbWFnZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIENvZGVCdWlsZCBwcm9qZWN0IHRoYXQgd2lsbCBiZSBwYXJ0IG9mIHRoaXMgcGlwZWxpbmUuXG4gICAqIEBkZWZhdWx0IC0gYCR7cGlwZWxpbmVOYW1lfS1CdWlsZGAsIGlmIGBwaXBlbGluZU5hbWVgIHByb3BlcnR5IGlzIHNwZWNpZmllZDsgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkUHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNvbXB1dGUgdG8gdXNlIGZvciB0aGlzIGJ1aWxkLlxuICAgKiBTZWUgdGhlIHtAbGluayBDb21wdXRlVHlwZX0gZW51bSBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGFrZW4gZnJvbSB7QGxpbmsgI2J1aWxkSW1hZ2UjZGVmYXVsdENvbXB1dGVUeXBlfVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVR5cGU/OiBjYnVpbGQuQ29tcHV0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBob3cgdGhlIHByb2plY3QgYnVpbGRzIERvY2tlciBpbWFnZXMuIFNwZWNpZnkgdHJ1ZSB0byBlbmFibGVcbiAgICogcnVubmluZyB0aGUgRG9ja2VyIGRhZW1vbiBpbnNpZGUgYSBEb2NrZXIgY29udGFpbmVyLiBUaGlzIHZhbHVlIG11c3QgYmVcbiAgICogc2V0IHRvIHRydWUgb25seSBpZiB0aGlzIGJ1aWxkIHByb2plY3Qgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIERvY2tlclxuICAgKiBpbWFnZXMsIGFuZCB0aGUgc3BlY2lmaWVkIGJ1aWxkIGVudmlyb25tZW50IGltYWdlIGlzIG5vdCBvbmUgcHJvdmlkZWQgYnlcbiAgICogQVdTIENvZGVCdWlsZCB3aXRoIERvY2tlciBzdXBwb3J0LiBPdGhlcndpc2UsIGFsbCBhc3NvY2lhdGVkIGJ1aWxkcyB0aGF0XG4gICAqIGF0dGVtcHQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgRG9ja2VyIGRhZW1vbiB3aWxsIGZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcml2aWxlZ2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gYnVpbGRcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgYnVpbGRzcGVjLCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBhIGJ1aWxkc3BlYy55bWwgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRTcGVjPzogY2J1aWxkLkJ1aWxkU3BlYztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gcmUtcnVuIHRoZSBwaXBlbGluZSBhZnRlciB5b3UndmUgdXBkYXRlZCBpdC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBjb25jdXJyZW5jeSBsaW1pdCB0ZXN0IGFuZCBwdWJsaXNoIHN0YWdlcy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgdmFsdWUgaXMgMiwgdGhlbiBvbmx5IHR3byBhY3Rpb25zIHdpbGwgZXhlY3V0ZSBjb25jdXJyZW50bHkuXG4gICAqIElmIHRoaXMgdmFsdWUgaXMgMSwgdGhlIHBpcGVsaW5lIHdpbGwgbm90IGhhdmUgYW55IGNvbmN1cnJlbnQgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpbWl0XG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IGRyeVJ1biBmb3IgYWxsIHB1Ymxpc2hpbmcgc3RlcHNcbiAgICpcbiAgICogKENhbiBzdGlsbCBiZSBjaGFuZ2VkIHdoZW4gYWRkaW5nIGEgc3RlcCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkcnlSdW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGJ1aWxkIGNvbW1pdHMgdGhhdCBhcmUgcHVzaGVkIHRvIHRoaXMgcmVwb3NpdG9yeSwgaW5jbHVkaW5nIFBSIGJ1aWxkcyBvbiBnaXRodWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhdXRvQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBhdXRvLWJ1aWxkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJ2F1dG9CdWlsZE9wdGlvbnMucHVibGljTG9ncycgd2lsbCBiZSBzZXQgdG8gaXRzIGRlZmF1bHQuICdhdXRvQnVpbGRPcHRpb25zLmJ1aWxkc3BlYycgd2lsbCBiZSBjb25maWd1cmVkIHRvIG1hdGNoIHdpdGggdGhlXG4gICAqICdidWlsZFNwZWMnIHByb3BlcnR5LlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkT3B0aW9ucz86IEF1dG9CdWlsZE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFBvc3QgYSBub3RpZmljYXRpb24gdG8gdGhlIGdpdmVuIENoaW1lIHdlYmhvb2tzIGlmIHRoZSBwaXBlbGluZSBmYWlsc1xuICAgKiBAZGVmYXVsdCAtIG5vIENoaW1lIG5vdGlmaWNhdGlvbnMgb24gcGlwZWxpbmUgZmFpbHVyZVxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgbm90aWZ5T25GYWlsdXJlKClgIGluc3RlYWQgaW4gY29tYmluYXRpb24gd2l0aCBgUGlwZWxpbmVOb3RpZmljYXRpb24uY2hpbWUoKWAuXG4gICAqL1xuICByZWFkb25seSBjaGltZUZhaWx1cmVXZWJob29rcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgQ2hpbWUgbWVzc2FnZSB0byBwb3N0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSBkZWZhdWx0IG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGNoaW1lTWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgdGltZW91dFxuICAgKlxuICAgKiBIb3cgbG9uZyB0aGUgYnVpbGQgY2FuIHRha2UgYXQgbWF4aW11bSAoYmVmb3JlIGZhaWxpbmcgd2l0aCBhbiBlcnJvcikuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRHVyYXRpb24uaG91cnMoOClcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkVGltZW91dD86IER1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lTm90aWZpY2F0aW9uQmluZE9wdGlvbnMge1xuICByZWFkb25seSBwaXBlbGluZTogUGlwZWxpbmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBpcGVsaW5lTm90aWZpY2F0aW9uIHtcbiAgYmluZChwaXBlbGluZTogUGlwZWxpbmVOb3RpZmljYXRpb25CaW5kT3B0aW9ucyk6IHZvaWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gYXV0byBidW1wIGZvciB0aGlzIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9CdW1wT3B0aW9ucyBleHRlbmRzIE9taXQ8QXV0b0J1bXBQcm9wcywgJ3JlcG8nPiB7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIGRlbGl2bGliIENJL0NEIHBpcGVsaW5lLlxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgYnVpbGRSb2xlPzogaWFtLklSb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgZmFpbHVyZUFsYXJtOiBjbG91ZHdhdGNoLkFsYXJtO1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRPdXRwdXQ6IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcHVibGljIHJlYWRvbmx5IHNvdXJjZUFydGlmYWN0OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmltYXJ5IENvZGVCdWlsZCBwcm9qZWN0IG9mIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRQcm9qZWN0OiBjYnVpbGQuSVByb2plY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRvIGJ1aWxkIHByb2plY3QuIHVuZGVmaW5lZCBpZiAnYXV0b0J1aWxkJyBpcyBkaXNhYmxlZCBmb3IgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdXRvQnVpbGRQcm9qZWN0PzogY2J1aWxkLlByb2plY3Q7XG5cbiAgLypcbiAgICogVGhlIHVuZGVybHlpbmcgQ29kZVBpcGVsaW5lIFBpcGVsaW5lIG9iamVjdCB0aGF0IG1vZGVscyB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBjcGlwZWxpbmUuUGlwZWxpbmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWZ5Pzogc25zLlRvcGljO1xuICBwcml2YXRlIGRlZmF1bHRBcnRpZmFjdDogY3BpcGVsaW5lLkFydGlmYWN0O1xuICBwcml2YXRlIHN0YWdlczogeyBbbmFtZTogc3RyaW5nXTogY3BpcGVsaW5lLklTdGFnZSB9ID0geyB9O1xuICBwcml2YXRlIF9zaWduaW5nT3V0cHV0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwbzogSVJlcG87XG4gIHByaXZhdGUgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkRW52aXJvbm1lbnQ6IGNidWlsZC5CdWlsZEVudmlyb25tZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNidWlsZC5CdWlsZFNwZWM7XG4gIHByaXZhdGUgZmlyc3RQdWJsaXNoU3RhZ2VOYW1lPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc2NyUGlwZWxpbmVOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgdGhpcy5jb25jdXJyZW5jeSA9IHByb3BzLmNvbmN1cnJlbmN5O1xuICAgIHRoaXMucmVwbyA9IHByb3BzLnJlcG87XG4gICAgdGhpcy5kcnlSdW4gPSAhIXByb3BzLmRyeVJ1bjtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgY3BpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdCdWlsZFBpcGVsaW5lJywge1xuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICByZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGU6IHByb3BzLnJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHByb3BzLnJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZSxcbiAgICB9KTtcbiAgICAvLyBXZSB3aWxsIHVzZSB0aGUgcGlwZWxpbmUgbmFtZSBpZiBnaXZlbiwgYnV0IHdlIGNhbid0IHVzZSB0aGUgUmVmIGlmIG5vdCBnaXZlblxuICAgIC8vIGJlY2F1c2UgdGhhdCB3b3VsZCBjcmVhdGUgY3ljbGljIHJlZmVyZW5jZXMuIEZhbGwgYmFjayB0byBjb25zdHJ1Y3QgcGF0aCBpZiBhbm9ueW1vdXMuXG4gICAgdGhpcy5kZXNjclBpcGVsaW5lTmFtZSA9IHByb3BzLnBpcGVsaW5lTmFtZSA/PyB0aGlzLm5vZGUucGF0aDtcblxuICAgIHRoaXMuYnJhbmNoID0gcHJvcHMuYnJhbmNoIHx8ICdtYXN0ZXInO1xuICAgIHRoaXMuc291cmNlQXJ0aWZhY3QgPSBwcm9wcy5yZXBvLmNyZWF0ZVNvdXJjZVN0YWdlKHRoaXMucGlwZWxpbmUsIHRoaXMuYnJhbmNoKTtcblxuICAgIHRoaXMuYnVpbGRFbnZpcm9ubWVudCA9IGNyZWF0ZUJ1aWxkRW52aXJvbm1lbnQocHJvcHMpO1xuICAgIHRoaXMuYnVpbGRTcGVjID0gcHJvcHMuYnVpbGRTcGVjO1xuXG4gICAgbGV0IGJ1aWxkUHJvamVjdE5hbWUgPSBwcm9wcy5idWlsZFByb2plY3ROYW1lO1xuICAgIGlmIChidWlsZFByb2plY3ROYW1lID09PSB1bmRlZmluZWQgJiYgcHJvcHMucGlwZWxpbmVOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1aWxkUHJvamVjdE5hbWUgPSBgJHtwcm9wcy5waXBlbGluZU5hbWV9LUJ1aWxkYDtcbiAgICB9XG4gICAgdGhpcy5idWlsZFByb2plY3QgPSBuZXcgY2J1aWxkLlBpcGVsaW5lUHJvamVjdCh0aGlzLCAnQnVpbGRQcm9qZWN0Jywge1xuICAgICAgZGVzY3JpcHRpb246IGBQaXBlbGluZSAke3RoaXMuZGVzY3JQaXBlbGluZU5hbWV9OiBidWlsZCBzdGVwYCxcbiAgICAgIHByb2plY3ROYW1lOiBidWlsZFByb2plY3ROYW1lLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGJ1aWxkU3BlYzogdGhpcy5idWlsZFNwZWMsXG4gICAgICB0aW1lb3V0OiBwcm9wcy5idWlsZFRpbWVvdXQgPz8gRHVyYXRpb24uaG91cnMoOCksXG4gICAgICBzc21TZXNzaW9uUGVybWlzc2lvbnM6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkUm9sZSA9IHRoaXMuYnVpbGRQcm9qZWN0LnJvbGU7XG4gICAgdGhpcy5idWlsZFJvbGUhLmFkZE1hbmFnZWRQb2xpY3koaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNSZWFkT25seScpKTtcblxuICAgIGNvbnN0IGJ1aWxkU3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2UoJ0J1aWxkJyk7XG4gICAgY29uc3QgYnVpbGRPdXRwdXQgPSBuZXcgY3BpcGVsaW5lLkFydGlmYWN0KCk7XG4gICAgYnVpbGRTdGFnZS5hZGRBY3Rpb24obmV3IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbih7XG4gICAgICBhY3Rpb25OYW1lOiAnQnVpbGQnLFxuICAgICAgcHJvamVjdDogdGhpcy5idWlsZFByb2plY3QsXG4gICAgICBpbnB1dDogdGhpcy5zb3VyY2VBcnRpZmFjdCxcbiAgICAgIG91dHB1dHM6IFtidWlsZE91dHB1dF0sXG4gICAgfSkpO1xuICAgIHRoaXMuYnVpbGRPdXRwdXQgPSBidWlsZE91dHB1dDtcbiAgICB0aGlzLmRlZmF1bHRBcnRpZmFjdCA9IGJ1aWxkT3V0cHV0O1xuXG4gICAgaWYgKHByb3BzLm5vdGlmaWNhdGlvbkVtYWlsKSB7XG4gICAgICB0aGlzLm5vdGlmeSA9IG5ldyBzbnMuVG9waWModGhpcywgJ05vdGlmaWNhdGlvbnNUb3BpYycpO1xuICAgICAgdGhpcy5ub3RpZnkuYWRkU3Vic2NyaXB0aW9uKG5ldyBzbnNfc3Vicy5FbWFpbFN1YnNjcmlwdGlvbihwcm9wcy5ub3RpZmljYXRpb25FbWFpbCkpO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIGZhaWx1cmUgYWxhcm0gZm9yIHRoZSBlbnRpcmUgcGlwZWxpbmUuXG4gICAgdGhpcy5mYWlsdXJlQWxhcm0gPSB0aGlzLmFkZEZhaWx1cmVBbGFybShwcm9wcy50aXRsZSk7XG5cbiAgICAvLyBlbWl0IGFuIFNOUyBub3RpZmljYXRpb24gZXZlcnkgdGltZSBidWlsZCBmYWlscy5cbiAgICB0aGlzLmFkZEJ1aWxkRmFpbHVyZU5vdGlmaWNhdGlvbih0aGlzLmJ1aWxkUHJvamVjdCwgYCR7cHJvcHMudGl0bGV9IGJ1aWxkIGZhaWxlZGApO1xuXG4gICAgLy8gQWxzbyBlbWl0IHRvIENoaW1lIHdlYmhvb2tzIGlmIGNvbmZpZ3VyZWRcbiAgICBpZiAocHJvcHMuY2hpbWVGYWlsdXJlV2ViaG9va3MpIHtcbiAgICAgIG5ldyBDaGltZU5vdGlmaWVyKHRoaXMsICdDaGltZU5vdGlmaWVyJywge1xuICAgICAgICBwaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgICAgbWVzc2FnZTogcHJvcHMuY2hpbWVNZXNzYWdlLFxuICAgICAgICB3ZWJob29rVXJsczogcHJvcHMuY2hpbWVGYWlsdXJlV2ViaG9va3MsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYXV0b0J1aWxkKSB7XG4gICAgICB0aGlzLmF1dG9CdWlsZFByb2plY3QgPSB0aGlzLmF1dG9CdWlsZChwcm9wcy5hdXRvQnVpbGRPcHRpb25zKS5wcm9qZWN0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW5nIG91dHB1dCBhcnRpZmFjdFxuICAgKi9cbiAgcHVibGljIGdldCBzaWduaW5nT3V0cHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zaWduaW5nT3V0cHV0O1xuICB9XG5cbiAgcHVibGljIG5vdGlmeU9uRmFpbHVyZShub3RpZmljYXRpb246IElQaXBlbGluZU5vdGlmaWNhdGlvbikge1xuICAgIG5vdGlmaWNhdGlvbi5iaW5kKHtcbiAgICAgIHBpcGVsaW5lOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhY3Rpb24gdG8gcnVuIGEgc2hlbGwgc2NyaXB0IHRvIHRoZSBwaXBlbGluZVxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBTaGVsbGFibGUgYW5kIHRoZSBBY3Rpb24gYWRkZWQgdG8gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIGFkZFNoZWxsYWJsZShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEFkZFNoZWxsYWJsZU9wdGlvbnMsXG4gICk6IHsgc2hlbGxhYmxlOiBTaGVsbGFibGU7IGFjdGlvbjogY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uIH0ge1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZSk7XG5cbiAgICBjb25zdCBzaCA9IG5ldyBTaGVsbGFibGUodGhpcywgaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHNoLmFkZFRvUGlwZWxpbmUoXG4gICAgICBzdGFnZSxcbiAgICAgIG9wdGlvbnMuYWN0aW9uTmFtZSB8fCBgQWN0aW9uJHtpZH1gLFxuICAgICAgb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuZGVmYXVsdEFydGlmYWN0LFxuICAgICAgdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSkpO1xuXG4gICAgaWYgKG9wdGlvbnMuZmFpbHVyZU5vdGlmaWNhdGlvbikge1xuICAgICAgdGhpcy5hZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24oc2gucHJvamVjdCwgb3B0aW9ucy5mYWlsdXJlTm90aWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzaGVsbGFibGU6IHNoLCBhY3Rpb24gfTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXN0KGlkOiBzdHJpbmcsIHByb3BzOiBTaGVsbGFibGVQcm9wcyk6IHsgc2hlbGxhYmxlOiBTaGVsbGFibGU7IGFjdGlvbjogY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uIH0ge1xuICAgIHJldHVybiB0aGlzLmFkZFNoZWxsYWJsZShURVNUX1NUQUdFX05BTUUsIGlkLCB7XG4gICAgICBhY3Rpb25OYW1lOiBgVGVzdCR7aWR9YCxcbiAgICAgIGZhaWx1cmVOb3RpZmljYXRpb246IGBUZXN0ICR7aWR9IGZhaWxlZGAsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZS9kaXNjb3ZlcnkgbWV0aG9kIHRoYXQgZGVmaW5lcyBhIGNhbmFyeSB0ZXN0IGluIHlvdXIgYWNjb3VudC5cbiAgICogQHBhcmFtIGlkIHRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIHByb3BzIGNhbmFyeSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQ2FuYXJ5KGlkOiBzdHJpbmcsIHByb3BzOiBDYW5hcnlQcm9wcykge1xuICAgIHJldHVybiBuZXcgQ2FuYXJ5KHRoaXMsIGBDYW5hcnkke2lkfWAsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQdWJsaXNoKHB1Ymxpc2hlcjogSVB1Ymxpc2hlciwgb3B0aW9uczogQWRkUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHB1Ymxpc2hTdGFnZU5hbWUgPSBvcHRpb25zLnN0YWdlTmFtZSA/PyBQVUJMSVNIX1NUQUdFX05BTUU7XG4gICAgaWYgKCF0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSkge1xuICAgICAgdGhpcy5maXJzdFB1Ymxpc2hTdGFnZU5hbWUgPSBwdWJsaXNoU3RhZ2VOYW1lO1xuICAgIH1cbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShwdWJsaXNoU3RhZ2VOYW1lKTtcblxuICAgIHB1Ymxpc2hlci5hZGRUb1BpcGVsaW5lKHN0YWdlLCBgJHtwdWJsaXNoZXIubm9kZS5pZH1QdWJsaXNoYCwge1xuICAgICAgaW5wdXRBcnRpZmFjdDogb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuZGVmYXVsdEFydGlmYWN0LFxuICAgICAgcnVuT3JkZXI6IHRoaXMuZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2UpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgY29udHJvbCBwb2xpY3kgdG8gYmxvY2sgdHJhbnNpdGlvbnMgaW50byB0aGUgcHVibGlzaCBzdGFnZSBkdXJpbmcgY2VydGFpbiB0aW1lIHdpbmRvd3MuXG4gICAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgY2hhbmdlIGNvbnRyb2wgcG9saWN5LlxuICAgKi9cbiAgcHVibGljIGFkZENoYW5nZUNvbnRyb2wob3B0aW9uczogQWRkQ2hhbmdlQ29udHJvbE9wdGlvbnMgPSB7IH0pOiBDaGFuZ2VDb250cm9sbGVyIHtcbiAgICBjb25zdCBwdWJsaXNoU3RhZ2UgPSB0aGlzLmdldFN0YWdlKHRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lID8/IFBVQkxJU0hfU1RBR0VfTkFNRSk7XG4gICAgaWYgKCFwdWJsaXNoU3RhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBwaXBlbGluZSBkb2VzIG5vdCBoYXZlIGEgJHtQVUJMSVNIX1NUQUdFX05BTUV9IHN0YWdlIHlldC4gQWRkIG9uZSBmaXJzdC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENoYW5nZUNvbnRyb2xsZXIodGhpcywgJ0NoYW5nZUNvbnRyb2xsZXInLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcGlwZWxpbmVTdGFnZTogcHVibGlzaFN0YWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFNpZ25pbmcoc2lnbmVyOiBzaWduaW5nLklTaWduZXIsIG9wdGlvbnM6IHNpZ25pbmcuQWRkU2lnbmluZ09wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHNpZ25pbmdTdGFnZU5hbWUgPSBvcHRpb25zLnN0YWdlTmFtZSA/PyBTSUdOSU5HX1NUQUdFX05BTUU7XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2Uoc2lnbmluZ1N0YWdlTmFtZSk7XG5cbiAgICB0aGlzLl9zaWduaW5nT3V0cHV0ID0gc2lnbmVyLmFkZFRvUGlwZWxpbmUoc3RhZ2UsIGAke3NpZ25lci5ub2RlLmlkfVNpZ25gLCB7XG4gICAgICBpbnB1dEFydGlmYWN0OiBvcHRpb25zLmlucHV0QXJ0aWZhY3QgfHwgdGhpcy5kZWZhdWx0QXJ0aWZhY3QsXG4gICAgICBydW5PcmRlcjogdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSksXG4gICAgfSk7XG4gICAgdGhpcy5kZWZhdWx0QXJ0aWZhY3QgPSB0aGlzLl9zaWduaW5nT3V0cHV0O1xuICB9XG5cbiAgcHVibGljIHNpZ25OdUdldFdpdGhTaWduZXIob3B0aW9uczogc2lnbmluZy5TaWduTnVHZXRXaXRoU2lnbmVyUHJvcHMgJiBzaWduaW5nLkFkZFNpZ25pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRTaWduaW5nKG5ldyBzaWduaW5nLlNpZ25OdUdldFdpdGhTaWduZXIodGhpcywgJ051R2V0U2lnbmluZycsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb05wbShvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb05wbVByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb05wbVByb2plY3QodGhpcywgJ05wbScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/IGBQaXBlbGluZSAke3RoaXMuZGVzY3JQaXBlbGluZU5hbWV9OiBwdWJsaXNoIHRvIE5QTWAsXG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTWF2ZW4ob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb01hdmVuUHJvamVjdCh0aGlzLCAnTWF2ZW4nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiA/PyBgUGlwZWxpbmUgJHt0aGlzLmRlc2NyUGlwZWxpbmVOYW1lfTogcHVibGlzaCB0byBNYXZlbmAsXG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTnVHZXQob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb051R2V0UHJvamVjdCh0aGlzLCAnTnVHZXQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiA/PyBgUGlwZWxpbmUgJHt0aGlzLmRlc2NyUGlwZWxpbmVOYW1lfTogcHVibGlzaCB0byBOdUdldGAsXG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvR2l0SHViUGFnZXMob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoRG9jc1RvR2l0SHViUHJvamVjdFByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3QodGhpcywgJ0dpdEh1YlBhZ2VzJywge1xuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gYFBpcGVsaW5lICR7dGhpcy5kZXNjclBpcGVsaW5lTmFtZX06IHB1Ymxpc2ggdG8gR2l0SHViIFBhZ2VzYCxcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9HaXRIdWIob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9HaXRIdWJQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dpdEh1Yih0aGlzLCAnR2l0SHViJywge1xuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gYFBpcGVsaW5lICR7dGhpcy5kZXNjclBpcGVsaW5lTmFtZX06IHB1Ymxpc2ggdG8gR2l0SHViYCxcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9QeVBJKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvUHlQaVByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvUHlQaSh0aGlzLCAnUHlQSScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/IGBQaXBlbGluZSAke3RoaXMuZGVzY3JQaXBlbGluZU5hbWV9OiBwdWJsaXNoIHRvIFB5UElgLFxuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb1MzKGlkOiBzdHJpbmcsIG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvUzNQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1MzKHRoaXMsIGlkLCB7XG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiA/PyBgUGlwZWxpbmUgJHt0aGlzLmRlc2NyUGlwZWxpbmVOYW1lfTogcHVibGlzaCB0byBTMyAoJHtvcHRpb25zLmJ1Y2tldC5idWNrZXROYW1lfSlgLFxuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggR29sYW5nIGNvZGUgZnJvbSBgZ29gIGRpcmVjdG9yeSBpbiBidWlsZCBhcnRpZmFjdCB0byBhIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgKi9cbiAgcHVibGljIHB1Ymxpc2hUb0dvbGFuZyhvcHRpb25zOiBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dvbGFuZ1Byb3BzKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dvbGFuZyh0aGlzLCAnR29sYW5nJywge1xuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gYFBpcGVsaW5lICR7dGhpcy5kZXNjclBpcGVsaW5lTmFtZX06IHB1Ymxpc2ggR29sYW5nYCxcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBidW1wcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvQnVtcE9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9CdW1wKG9wdGlvbnM/OiBBdXRvQnVtcE9wdGlvbnMpOiBBdXRvQnVtcCB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLWJ1bXAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRvQnVtcCA9IG5ldyBBdXRvQnVtcCh0aGlzLCAnQXV0b0J1bXAnLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF1dG9CdW1wO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIG1lcmdlIGJhY2tzIGZvciB0aGUgc291cmNlIHJlcG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGF1dG8gYnVtcCAoc2VlIEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMgZm9yIGRlc2NyaXB0aW9uIG9mIGRlZmF1bHRzKVxuICAgKi9cbiAgcHVibGljIGF1dG9NZXJnZUJhY2sob3B0aW9ucz86IEF1dG9NZXJnZUJhY2tQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBpZiAoIVdyaXRhYmxlR2l0SHViUmVwby5pc1dyaXRhYmxlR2l0SHViUmVwbyh0aGlzLnJlcG8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmVwb1wiIG11c3QgYmUgYSBXcml0YWJsZUdpdEh1YlJlcG8gaW4gb3JkZXIgdG8gZW5hYmxlIGF1dG8tbWVyZ2UtYmFjaycpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lcmdlQmFjayA9IG5ldyBBdXRvTWVyZ2VCYWNrKHRoaXMsICdNZXJnZUJhY2snLCB7XG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcHJvamVjdERlc2NyaXB0aW9uOiBvcHRpb25zPy5wcm9qZWN0RGVzY3JpcHRpb24gPz8gYFBpcGVsaW5lICR7dGhpcy5kZXNjclBpcGVsaW5lTmFtZX06IG1lcmdlLWJhY2sgc3RlcGAsXG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9ucz8uc3RhZ2UpIHtcblxuICAgICAgY29uc3QgYWZ0ZXJTdGFnZSA9IHRoaXMuZ2V0U3RhZ2Uob3B0aW9ucy5zdGFnZS5hZnRlcik7XG5cbiAgICAgIGlmICghYWZ0ZXJTdGFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdvcHRpb25zLnN0YWdlLmFmdGVyJyBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gYW4gZXhpc3Rpbmcgc3RhZ2U6ICR7b3B0aW9ucy5zdGFnZS5hZnRlcn1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2Uob3B0aW9ucy5zdGFnZS5uYW1lID8/ICdNZXJnZUJhY2snLCB7IGp1c3RBZnRlcjogYWZ0ZXJTdGFnZSB9KTtcbiAgICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uKHtcbiAgICAgICAgYWN0aW9uTmFtZTogJ0NyZWF0ZU1lcmdlQmFja1B1bGxSZXF1ZXN0JyxcbiAgICAgICAgcHJvamVjdDogbWVyZ2VCYWNrLnByLnByb2plY3QsXG4gICAgICAgIGlucHV0OiB0aGlzLnNvdXJjZUFydGlmYWN0LFxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBidWlsZHMgb2YgcHVsbCByZXF1ZXN0cyBpbiB0aGUgR2l0aHViIHJlcG9zaXRvcnkgYW5kIHBvc3RzIHRoZVxuICAgKiByZXN1bHRzIGJhY2sgYXMgYSBjb21tZW50IHdpdGggYSBwdWJsaWMgbGluayB0byB0aGUgYnVpbGQgbG9ncy5cbiAgICovXG4gIHB1YmxpYyBhdXRvQnVpbGQob3B0aW9uczogQXV0b0J1aWxkT3B0aW9ucyA9IHsgfSk6IEF1dG9CdWlsZCB7XG4gICAgcmV0dXJuIG5ldyBBdXRvQnVpbGQodGhpcywgJ0F1dG9CdWlsZCcsIHtcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkRW52aXJvbm1lbnQsXG4gICAgICByZXBvOiB0aGlzLnJlcG8sXG4gICAgICBidWlsZFNwZWM6IG9wdGlvbnMuYnVpbGRTcGVjIHx8IHRoaXMuYnVpbGRTcGVjLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWV0cmljIHRoYXQgdHJhY2tzIHBpcGVsaW5lIGZhaWx1cmVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0ZhaWx1cmVzKG9wdGlvbnM6IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG5hbWVzcGFjZTogTUVUUklDX05BTUVTUEFDRSxcbiAgICAgIG1ldHJpY05hbWU6IEZBSUxVUkVfTUVUUklDX05BTUUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgIH0sXG4gICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWV0cmljcyB0aGF0IHRyYWNrIGZhaWx1cmUgb2YgZWFjaCBhY3Rpb24gd2l0aGluIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNBY3Rpb25GYWlsdXJlcyhvcHRpb25zOiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpY1tdIHtcbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLnBpcGVsaW5lLnN0YWdlcywgc3RhZ2UgPT4gc3RhZ2UuYWN0aW9ucy5tYXAoYWN0aW9uID0+IHtcbiAgICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICBuYW1lc3BhY2U6IE1FVFJJQ19OQU1FU1BBQ0UsXG4gICAgICAgIG1ldHJpY05hbWU6IEZBSUxVUkVfTUVUUklDX05BTUUsXG4gICAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgICBQaXBlbGluZTogdGhpcy5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICAgICAgQWN0aW9uOiBhY3Rpb24uYWN0aW9uUHJvcGVydGllcy5hY3Rpb25OYW1lLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGFkZE1hbnVhbEFwcHJvdmFsVG9TdGFnZShzdGFnZU5hbWU6IHN0cmluZywgcHJvcHM/OiBjcGlwZWxpbmVfYWN0aW9ucy5NYW51YWxBcHByb3ZhbEFjdGlvblByb3BzKSB7XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2Uoc3RhZ2VOYW1lKTtcbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IGNwaXBlbGluZV9hY3Rpb25zLk1hbnVhbEFwcHJvdmFsQWN0aW9uKHByb3BzID8/IHtcbiAgICAgIGFjdGlvbk5hbWU6ICdNYW51YWxBcHByb3ZhbEFjdGlvbicsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGYWlsdXJlQWxhcm0odGl0bGU/OiBzdHJpbmcpOiBjbG91ZHdhdGNoLkFsYXJtIHtcbiAgICByZXR1cm4gbmV3IFBpcGVsaW5lV2F0Y2hlcih0aGlzLCAnUGlwZWxpbmVXYXRjaGVyJywge1xuICAgICAgcGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICBtZXRyaWNOYW1lc3BhY2U6IE1FVFJJQ19OQU1FU1BBQ0UsXG4gICAgICBmYWlsdXJlTWV0cmljTmFtZTogRkFJTFVSRV9NRVRSSUNfTkFNRSxcbiAgICAgIHRpdGxlLFxuICAgIH0pLmFsYXJtO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24oYnVpbGRQcm9qZWN0OiBjYnVpbGQuSVByb2plY3QsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5ub3RpZnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWlsZFByb2plY3Qub25CdWlsZEZhaWxlZCgnT25CdWlsZEZhaWxlZCcpLmFkZFRhcmdldChuZXcgZXZlbnRzX3RhcmdldHMuU25zVG9waWModGhpcy5ub3RpZnksIHtcbiAgICAgIG1lc3NhZ2U6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbVRleHQobWVzc2FnZSksXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHRoZSBzdGFnZSBvciB1bmRlZmluZWQgaWYgdGhlIHN0YWdlIGRvZXNuJ3QgZXhpc3RcbiAgICovXG4gIHByaXZhdGUgZ2V0U3RhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcpOiBjcGlwZWxpbmUuSVN0YWdlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdGFnZXNbc3RhZ2VOYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JDcmVhdGVTdGFnZShzdGFnZU5hbWU6IHN0cmluZywgcGxhY2VtZW50PzogY3BpcGVsaW5lLlN0YWdlUGxhY2VtZW50KTogY3BpcGVsaW5lLklTdGFnZSB7XG4gICAgLy8gb3RoZXJ3aXNlLCBncm91cCBhbGwgYWN0aW9ucyBzbyB0aGV5IHJ1biBjb25jdXJyZW50bHkuXG4gICAgbGV0IHN0YWdlID0gdGhpcy5nZXRTdGFnZShzdGFnZU5hbWUpO1xuICAgIGlmICghc3RhZ2UpIHtcbiAgICAgIHN0YWdlID0gdGhpcy5waXBlbGluZS5hZGRTdGFnZSh7XG4gICAgICAgIHN0YWdlTmFtZSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgfSk7XG4gICAgICB0aGlzLnN0YWdlc1tzdGFnZU5hbWVdID0gc3RhZ2U7XG4gICAgfVxuICAgIHJldHVybiBzdGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2U6IGNwaXBlbGluZS5JU3RhZ2UpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBkZXRlcm1pbmVSdW5PcmRlcihzdGFnZS5hY3Rpb25zLmxlbmd0aCwgdGhpcy5jb25jdXJyZW5jeSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHVibGlzaGVyIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIGFkZFRvUGlwZWxpbmUoc3RhZ2U6IGNwaXBlbGluZS5JU3RhZ2UsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFRvUGlwZWxpbmVPcHRpb25zKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRUb1BpcGVsaW5lT3B0aW9ucyB7XG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG4gIHJ1bk9yZGVyPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZENoYW5nZUNvbnRyb2xPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBidWNrZXQgaW4gd2hpY2ggdGhlIENoYW5nZUNvbnRyb2wgaUNhbCBkb2N1bWVudCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYSBuZXcgYnVja2V0IHdpbGwgYmUgcHJvdmlzaW9uZWQuXG4gICAqL1xuICBjaGFuZ2VDb250cm9sQnVja2V0PzogczMuSUJ1Y2tldDtcblxuICAvKipcbiAgICogVGhlIGtleSBpbiB3aGljaCB0aGUgaUNhbCBmaWxsZSB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2NoYW5nZS1jb250cm9sLmljYWwnXG4gICAqL1xuICBjaGFuZ2VDb250cm9sT2JqZWN0S2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSB0byBydW4gdGhlIGNoYW5nZSBjb250cm9sbGVyIG9uXG4gICAqXG4gICAqIEBkZWZhdWx0IHJhdGUoMTUgbWludXRlcylcbiAgICovXG4gIHNjaGVkdWxlRXhwcmVzc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRQdWJsaXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgYXJ0aWZhY3QgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IFNpZ25pbmcgb3V0cHV0IGFydGlmYWN0IHdoZW4gYSBzaWduaW5nIHN0YWdlIGlzIGFkZGVkIHRvIHRoZVxuICAgKiBwaXBlbGluZSB2aWEgYGFkZFNpZ25pbmdgIG9yIGBzaWduTnVHZXRXaXRoU2lnbmVyYC4gT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdFxuICAgKiB3aWxsIGJlIHRoZSBidWlsZCBvdXRwdXQgYXJ0aWZhY3QuXG4gICAqL1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBTdGFnZSBuYW1lIHRvIGFkZCBwdWJsaXNoaW5nIGpvYiB0b1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgYmUgdGhlIHN0YWdlIG5hbWUgYCdQdWJsaXNoJ2AsIGJ1dCBpZiB5b3Ugd2FudCB0b1xuICAgKiBzZXBhcmF0ZSBvdXQgdGhlIHB1Ymxpc2hpbmcgYWN0aW9ucyBpbnRvIGRpZmZlcmVudCBzdGFnZXMgKGluIG9yZGVyIHRvXG4gICAqIGJsb2NrL3VuYmxvY2sgdGhlbSBzZXBhcmF0ZWx5IGZvciBleGFtcGxlKSB5b3UgY2FuIGNoYW5nZSB0aGlzLlxuICAgKlxuICAgKiBTdGFnZXMgYXBwZWFyIGluIHRoZSBwaXBlbGluZSBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcmVmZXJlbmNlZCBmb3JcbiAgICogdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUHVibGlzaFwiXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU2hlbGxhYmxlT3B0aW9ucyBleHRlbmRzIFNoZWxsYWJsZVByb3BzIHtcbiAgLyoqXG4gICAqIFN0cmluZyB0byB1c2UgYXMgYWN0aW9uIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgSWRcbiAgICovXG4gIGFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdG8gdXNlIGFzIGZhaWx1cmUgbm90aWZpY2F0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgZmFpbHVyZU5vdGlmaWNhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBTaWduaW5nIG91dHB1dCBhcnRpZmFjdCB3aGVuIGEgc2lnbmluZyBzdGFnZSBpcyBhZGRlZCB0byB0aGVcbiAgICogcGlwZWxpbmUgdmlhIGBhZGRTaWduaW5nYCBvciBgc2lnbk51R2V0V2l0aFNpZ25lcmAuIE90aGVyd2lzZSwgdGhlIGRlZmF1bHRcbiAgICogd2lsbCBiZSB0aGUgYnVpbGQgb3V0cHV0IGFydGlmYWN0LlxuICAgKi9cbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcbn1cbiJdfQ==
@@ -52,13 +52,13 @@
52
52
  "@types/changelog-parser@^2.8.1": "https://registry.yarnpkg.com/@types/changelog-parser/-/changelog-parser-2.8.4.tgz#45d70417e742ac3bc6bef3786aa453e1f1d63ecc",
53
53
  "@types/jsonwebtoken@^9.0.0": "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3",
54
54
  "@types/ms@*": "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78",
55
- "@types/node@*": "https://registry.yarnpkg.com/@types/node/-/node-22.15.14.tgz#889fd356a04d003a6d5650ccc003ef4d712430d7",
55
+ "@types/node@*": "https://registry.yarnpkg.com/@types/node/-/node-22.15.17.tgz#355ccec95f705b664e4332bb64a7f07db30b7055",
56
56
  "@types/node@^14": "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b",
57
57
  "aggregate-error@^3.1.0": "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a",
58
58
  "before-after-hook@^2.2.0": "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c",
59
59
  "bottleneck@^2.15.3": "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91",
60
60
  "btoa-lite@^1.0.0": "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337",
61
- "buffer-equal-constant-time@1.0.1": "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819",
61
+ "buffer-equal-constant-time@^1.0.1": "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819",
62
62
  "changelog-parser@^2.8.1": "https://registry.yarnpkg.com/changelog-parser/-/changelog-parser-2.8.1.tgz#1428998c275e4f7c0a855026dc60c66cde36bb87",
63
63
  "clean-stack@^2.0.0": "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b",
64
64
  "deprecation@^2.0.0": "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919",
@@ -68,7 +68,7 @@
68
68
  "indent-string@^4.0.0": "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251",
69
69
  "is-plain-object@^5.0.0": "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344",
70
70
  "jsonwebtoken@^9.0.2": "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3",
71
- "jwa@^1.4.1": "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a",
71
+ "jwa@^1.4.1": "https://registry.yarnpkg.com/jwa/-/jwa-1.4.2.tgz#16011ac6db48de7b102777e57897901520eec7b9",
72
72
  "jws@^3.2.2": "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304",
73
73
  "line-reader@^0.2.4": "https://registry.yarnpkg.com/line-reader/-/line-reader-0.2.4.tgz#c4392b587dea38580c9678570e6e8e49fce52622",
74
74
  "lodash.includes@^4.3.0": "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f",
@@ -85,7 +85,7 @@
85
85
  "once@^1.4.0": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1",
86
86
  "remove-markdown@^0.2.2": "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.2.2.tgz#66b0ceeba9fb77ca9636bb1b0307ce21a32a12a6",
87
87
  "safe-buffer@^5.0.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6",
88
- "semver@^7.5.4": "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f",
88
+ "semver@^7.5.4": "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58",
89
89
  "tr46@~0.0.3": "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a",
90
90
  "typescript@~4.9.4": "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a",
91
91
  "undici-types@~6.21.0": "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb",
@@ -8,7 +8,7 @@ This package contains type definitions for node (https://nodejs.org/).
8
8
  Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node.
9
9
 
10
10
  ### Additional Details
11
- * Last updated: Tue, 06 May 2025 18:02:39 GMT
11
+ * Last updated: Thu, 08 May 2025 14:02:18 GMT
12
12
  * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
13
13
 
14
14
  # Credits
@@ -718,6 +718,19 @@ declare module "fs/promises" {
718
718
  recursive?: boolean | undefined;
719
719
  },
720
720
  ): Promise<Dirent[]>;
721
+ /**
722
+ * Asynchronous readdir(3) - read a directory.
723
+ * @param path A path to a directory. If a URL is provided, it must use the `file:` protocol.
724
+ * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
725
+ */
726
+ function readdir(
727
+ path: PathLike,
728
+ options: {
729
+ encoding: "buffer";
730
+ withFileTypes: true;
731
+ recursive?: boolean | undefined;
732
+ },
733
+ ): Promise<Dirent<Buffer>[]>;
721
734
  /**
722
735
  * Reads the contents of the symbolic link referred to by `path`. See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more detail. The promise is
723
736
  * fulfilled with the`linkString` upon success.
@@ -198,7 +198,7 @@ declare module "fs" {
198
198
  * the `withFileTypes` option set to `true`, the resulting array is filled with `fs.Dirent` objects, rather than strings or `Buffer` s.
199
199
  * @since v10.10.0
200
200
  */
201
- export class Dirent {
201
+ export class Dirent<Name extends string | Buffer = string> {
202
202
  /**
203
203
  * Returns `true` if the `fs.Dirent` object describes a regular file.
204
204
  * @since v10.10.0
@@ -241,7 +241,7 @@ declare module "fs" {
241
241
  * value is determined by the `options.encoding` passed to {@link readdir} or {@link readdirSync}.
242
242
  * @since v10.10.0
243
243
  */
244
- name: string;
244
+ name: Name;
245
245
  /**
246
246
  * The base path that this `fs.Dirent` object refers to.
247
247
  * @since v20.12.0
@@ -2040,6 +2040,20 @@ declare module "fs" {
2040
2040
  },
2041
2041
  callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void,
2042
2042
  ): void;
2043
+ /**
2044
+ * Asynchronous readdir(3) - read a directory.
2045
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2046
+ * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
2047
+ */
2048
+ export function readdir(
2049
+ path: PathLike,
2050
+ options: {
2051
+ encoding: "buffer";
2052
+ withFileTypes: true;
2053
+ recursive?: boolean | undefined;
2054
+ },
2055
+ callback: (err: NodeJS.ErrnoException | null, files: Dirent<Buffer>[]) => void,
2056
+ ): void;
2043
2057
  export namespace readdir {
2044
2058
  /**
2045
2059
  * Asynchronous readdir(3) - read a directory.
@@ -2099,6 +2113,19 @@ declare module "fs" {
2099
2113
  recursive?: boolean | undefined;
2100
2114
  },
2101
2115
  ): Promise<Dirent[]>;
2116
+ /**
2117
+ * Asynchronous readdir(3) - read a directory.
2118
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2119
+ * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
2120
+ */
2121
+ function __promisify__(
2122
+ path: PathLike,
2123
+ options: {
2124
+ encoding: "buffer";
2125
+ withFileTypes: true;
2126
+ recursive?: boolean | undefined;
2127
+ },
2128
+ ): Promise<Dirent<Buffer>[]>;
2102
2129
  }
2103
2130
  /**
2104
2131
  * Reads the contents of the directory.
@@ -2166,6 +2193,19 @@ declare module "fs" {
2166
2193
  recursive?: boolean | undefined;
2167
2194
  },
2168
2195
  ): Dirent[];
2196
+ /**
2197
+ * Synchronous readdir(3) - read a directory.
2198
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
2199
+ * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`.
2200
+ */
2201
+ export function readdirSync(
2202
+ path: PathLike,
2203
+ options: {
2204
+ encoding: "buffer";
2205
+ withFileTypes: true;
2206
+ recursive?: boolean | undefined;
2207
+ },
2208
+ ): Dirent<Buffer>[];
2169
2209
  /**
2170
2210
  * Closes the file descriptor. No arguments other than a possible exception are
2171
2211
  * given to the completion callback.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@types/node",
3
- "version": "22.15.14",
3
+ "version": "22.15.17",
4
4
  "description": "TypeScript definitions for node",
5
5
  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node",
6
6
  "license": "MIT",
@@ -220,6 +220,6 @@
220
220
  "undici-types": "~6.21.0"
221
221
  },
222
222
  "peerDependencies": {},
223
- "typesPublisherContentHash": "ffc2a6547f97ecddd3c3a0571777c7a02a04de14e127c1a7e02d89c998e27371",
223
+ "typesPublisherContentHash": "fc6995b0ade0c0c7fd18806f0d2dd27d7dd424e1afc0efb8ee459ab933f67239",
224
224
  "typeScriptVersion": "5.1"
225
225
  }
@@ -58,7 +58,7 @@ declare module "vm" {
58
58
  }
59
59
  interface ScriptOptions extends BaseOptions {
60
60
  /**
61
- * V8's code cache data for the supplied source.
61
+ * Provides an optional data with V8's code cache data for the supplied source.
62
62
  */
63
63
  cachedData?: Buffer | NodeJS.ArrayBufferView | undefined;
64
64
  /** @deprecated in favor of `script.createCachedData()` */
@@ -110,18 +110,24 @@ declare module "vm" {
110
110
  microtaskMode?: CreateContextOptions["microtaskMode"];
111
111
  }
112
112
  interface RunningCodeOptions extends RunningScriptOptions {
113
- cachedData?: ScriptOptions["cachedData"];
113
+ /**
114
+ * Provides an optional data with V8's code cache data for the supplied source.
115
+ */
116
+ cachedData?: ScriptOptions["cachedData"] | undefined;
114
117
  importModuleDynamically?: ScriptOptions["importModuleDynamically"];
115
118
  }
116
119
  interface RunningCodeInNewContextOptions extends RunningScriptInNewContextOptions {
117
- cachedData?: ScriptOptions["cachedData"];
120
+ /**
121
+ * Provides an optional data with V8's code cache data for the supplied source.
122
+ */
123
+ cachedData?: ScriptOptions["cachedData"] | undefined;
118
124
  importModuleDynamically?: ScriptOptions["importModuleDynamically"];
119
125
  }
120
126
  interface CompileFunctionOptions extends BaseOptions {
121
127
  /**
122
128
  * Provides an optional data with V8's code cache data for the supplied source.
123
129
  */
124
- cachedData?: Buffer | undefined;
130
+ cachedData?: ScriptOptions["cachedData"] | undefined;
125
131
  /**
126
132
  * Specifies whether to produce new cache data.
127
133
  * @default false
@@ -848,6 +854,9 @@ declare module "vm" {
848
854
  * @default 'vm:module(i)' where i is a context-specific ascending index.
849
855
  */
850
856
  identifier?: string | undefined;
857
+ /**
858
+ * Provides an optional data with V8's code cache data for the supplied source.
859
+ */
851
860
  cachedData?: ScriptOptions["cachedData"] | undefined;
852
861
  context?: Context | undefined;
853
862
  lineOffset?: BaseOptions["lineOffset"] | undefined;
@@ -856,7 +865,13 @@ declare module "vm" {
856
865
  * Called during evaluation of this module to initialize the `import.meta`.
857
866
  */
858
867
  initializeImportMeta?: ((meta: ImportMeta, module: SourceTextModule) => void) | undefined;
859
- importModuleDynamically?: ScriptOptions["importModuleDynamically"] | undefined;
868
+ importModuleDynamically?:
869
+ | ((
870
+ specifier: string,
871
+ referrer: SourceTextModule,
872
+ importAttributes: ImportAttributes,
873
+ ) => Module | Promise<Module>)
874
+ | undefined;
860
875
  }
861
876
  /**
862
877
  * This feature is only available with the `--experimental-vm-modules` command
@@ -1,4 +1,3 @@
1
- var bufferEqual = require('buffer-equal-constant-time');
2
1
  var Buffer = require('safe-buffer').Buffer;
3
2
  var crypto = require('crypto');
4
3
  var formatEcdsa = require('ecdsa-sig-formatter');
@@ -135,10 +134,25 @@ function createHmacSigner(bits) {
135
134
  }
136
135
  }
137
136
 
137
+ var bufferEqual;
138
+ var timingSafeEqual = 'timingSafeEqual' in crypto ? function timingSafeEqual(a, b) {
139
+ if (a.byteLength !== b.byteLength) {
140
+ return false;
141
+ }
142
+
143
+ return crypto.timingSafeEqual(a, b)
144
+ } : function timingSafeEqual(a, b) {
145
+ if (!bufferEqual) {
146
+ bufferEqual = require('buffer-equal-constant-time');
147
+ }
148
+
149
+ return bufferEqual(a, b)
150
+ }
151
+
138
152
  function createHmacVerifier(bits) {
139
153
  return function verify(thing, signature, secret) {
140
154
  var computedSig = createHmacSigner(bits)(thing, secret);
141
- return bufferEqual(Buffer.from(signature), Buffer.from(computedSig));
155
+ return timingSafeEqual(Buffer.from(signature), Buffer.from(computedSig));
142
156
  }
143
157
  }
144
158
 
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "jwa",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "description": "JWA implementation (supports all JWS algorithms)",
5
5
  "main": "index.js",
6
6
  "directories": {
7
7
  "test": "test"
8
8
  },
9
9
  "dependencies": {
10
- "buffer-equal-constant-time": "1.0.1",
10
+ "buffer-equal-constant-time": "^1.0.1",
11
11
  "ecdsa-sig-formatter": "1.0.11",
12
12
  "safe-buffer": "^5.0.1"
13
13
  },
@@ -3,6 +3,8 @@
3
3
  // Exits successfully and prints matching version(s) if
4
4
  // any supplied version is valid and passes all tests.
5
5
 
6
+ 'use strict'
7
+
6
8
  const argv = process.argv.slice(2)
7
9
 
8
10
  let versions = []
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const ANY = Symbol('SemVer ANY')
2
4
  // hoisted class for cyclic dependency
3
5
  class Comparator {
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  module.exports = {
2
4
  SemVer: require('./semver.js'),
3
5
  Range: require('./range.js'),
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const SPACE_CHARACTERS = /\s+/g
2
4
 
3
5
  // hoisted class for cyclic dependency
@@ -1,6 +1,8 @@
1
+ 'use strict'
2
+
1
3
  const debug = require('../internal/debug')
2
4
  const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')
3
- const { safeRe: re, safeSrc: src, t } = require('../internal/re')
5
+ const { safeRe: re, t } = require('../internal/re')
4
6
 
5
7
  const parseOptions = require('../internal/parse-options')
6
8
  const { compareIdentifiers } = require('../internal/identifiers')
@@ -182,8 +184,7 @@ class SemVer {
182
184
  }
183
185
  // Avoid an invalid semver results
184
186
  if (identifier) {
185
- const r = new RegExp(`^${this.options.loose ? src[t.PRERELEASELOOSE] : src[t.PRERELEASE]}$`)
186
- const match = `-${identifier}`.match(r)
187
+ const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])
187
188
  if (!match || match[1] !== identifier) {
188
189
  throw new Error(`invalid identifier: ${identifier}`)
189
190
  }
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const parse = require('./parse')
2
4
  const clean = (version, options) => {
3
5
  const s = parse(version.trim().replace(/^[=v]+/, ''), options)
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const eq = require('./eq')
2
4
  const neq = require('./neq')
3
5
  const gt = require('./gt')
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const SemVer = require('../classes/semver')
2
4
  const parse = require('./parse')
3
5
  const { safeRe: re, t } = require('../internal/re')
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const SemVer = require('../classes/semver')
2
4
  const compareBuild = (a, b, loose) => {
3
5
  const versionA = new SemVer(a, loose)
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const compare = require('./compare')
2
4
  const compareLoose = (a, b) => compare(a, b, true)
3
5
  module.exports = compareLoose
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const SemVer = require('../classes/semver')
2
4
  const compare = (a, b, loose) =>
3
5
  new SemVer(a, loose).compare(new SemVer(b, loose))
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const parse = require('./parse.js')
2
4
 
3
5
  const diff = (version1, version2) => {
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const compare = require('./compare')
2
4
  const eq = (a, b, loose) => compare(a, b, loose) === 0
3
5
  module.exports = eq
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const compare = require('./compare')
2
4
  const gt = (a, b, loose) => compare(a, b, loose) > 0
3
5
  module.exports = gt
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const compare = require('./compare')
2
4
  const gte = (a, b, loose) => compare(a, b, loose) >= 0
3
5
  module.exports = gte
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const SemVer = require('../classes/semver')
2
4
 
3
5
  const inc = (version, release, options, identifier, identifierBase) => {
@@ -1,3 +1,5 @@
1
+ 'use strict'
2
+
1
3
  const compare = require('./compare')
2
4
  const lt = (a, b, loose) => compare(a, b, loose) < 0
3
5
  module.exports = lt