@aerokit/sdk 12.77.0 → 12.79.0

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 (84) hide show
  1. package/dist/cjs/bpm/process.js +4 -1
  2. package/dist/cjs/bpm/tasks.js +3 -1
  3. package/dist/cjs/bpm/tracer.js +3 -1
  4. package/dist/cjs/cms/cmis.js +105 -177
  5. package/dist/cjs/db/database.js +5 -1
  6. package/dist/cjs/db/query.js +19 -1
  7. package/dist/cjs/db/repository.js +2 -1
  8. package/dist/cjs/db/sql.js +5 -2
  9. package/dist/cjs/etcd/client.js +4 -1
  10. package/dist/cjs/http/errors/ForbiddenError.js +9 -9
  11. package/dist/cjs/http/errors/ValidationError.js +9 -9
  12. package/dist/cjs/http/request.js +2 -1
  13. package/dist/cjs/http/response.js +102 -188
  14. package/dist/cjs/http/rs/resource-http-controller.js +4 -1
  15. package/dist/cjs/http/rs/resource-mappings.js +6 -3
  16. package/dist/cjs/http/rs/resource-method.js +10 -1
  17. package/dist/cjs/http/rs/resource.js +11 -1
  18. package/dist/cjs/http/upload.js +3 -1
  19. package/dist/cjs/io/files.js +5 -7
  20. package/dist/cjs/io/streams.js +5 -1
  21. package/dist/cjs/io/zip.js +4 -1
  22. package/dist/cjs/job/scheduler.js +4 -1
  23. package/dist/cjs/kafka/consumer.js +3 -2
  24. package/dist/cjs/kafka/producer.js +3 -1
  25. package/dist/cjs/log/logging.js +2 -1
  26. package/dist/cjs/mail/client.js +2 -1
  27. package/dist/cjs/messaging/consumer.js +3 -1
  28. package/dist/cjs/messaging/producer.js +3 -1
  29. package/dist/cjs/mongodb/client.js +26 -1
  30. package/dist/cjs/mongodb/dao.js +3 -1
  31. package/dist/cjs/net/soap.js +15 -1
  32. package/dist/cjs/net/websockets.js +5 -1
  33. package/dist/cjs/platform/engines.js +2 -1
  34. package/dist/cjs/platform/os.js +7 -9
  35. package/dist/cjs/platform/problems.js +7 -13
  36. package/dist/cjs/platform/registry.js +4 -1
  37. package/dist/cjs/platform/repository.js +4 -1
  38. package/dist/cjs/platform/workspace.js +8 -1
  39. package/dist/cjs/redis/client.js +2 -1
  40. package/dist/cjs/security/oauth.js +2 -1
  41. package/dist/cjs/template/engines.js +6 -1
  42. package/dist/dts/db/query.d.ts +10 -0
  43. package/dist/esm/bpm/process.mjs +4 -1
  44. package/dist/esm/bpm/tasks.mjs +3 -1
  45. package/dist/esm/bpm/tracer.mjs +3 -1
  46. package/dist/esm/cms/cmis.mjs +105 -177
  47. package/dist/esm/db/database.mjs +5 -1
  48. package/dist/esm/db/query.mjs +19 -1
  49. package/dist/esm/db/repository.mjs +2 -1
  50. package/dist/esm/db/sql.mjs +5 -2
  51. package/dist/esm/etcd/client.mjs +4 -1
  52. package/dist/esm/http/errors/ForbiddenError.mjs +9 -9
  53. package/dist/esm/http/errors/ValidationError.mjs +9 -9
  54. package/dist/esm/http/request.mjs +2 -1
  55. package/dist/esm/http/response.mjs +102 -188
  56. package/dist/esm/http/rs/resource-http-controller.mjs +4 -1
  57. package/dist/esm/http/rs/resource-mappings.mjs +6 -3
  58. package/dist/esm/http/rs/resource-method.mjs +10 -1
  59. package/dist/esm/http/rs/resource.mjs +11 -1
  60. package/dist/esm/http/upload.mjs +3 -1
  61. package/dist/esm/io/files.mjs +5 -7
  62. package/dist/esm/io/streams.mjs +5 -1
  63. package/dist/esm/io/zip.mjs +4 -1
  64. package/dist/esm/job/scheduler.mjs +4 -1
  65. package/dist/esm/kafka/consumer.mjs +3 -2
  66. package/dist/esm/kafka/producer.mjs +3 -1
  67. package/dist/esm/log/logging.mjs +2 -1
  68. package/dist/esm/mail/client.mjs +2 -1
  69. package/dist/esm/messaging/consumer.mjs +3 -1
  70. package/dist/esm/messaging/producer.mjs +3 -1
  71. package/dist/esm/mongodb/client.mjs +26 -1
  72. package/dist/esm/mongodb/dao.mjs +3 -1
  73. package/dist/esm/net/soap.mjs +15 -1
  74. package/dist/esm/net/websockets.mjs +5 -1
  75. package/dist/esm/platform/engines.mjs +2 -1
  76. package/dist/esm/platform/os.mjs +7 -9
  77. package/dist/esm/platform/problems.mjs +7 -13
  78. package/dist/esm/platform/registry.mjs +4 -1
  79. package/dist/esm/platform/repository.mjs +4 -1
  80. package/dist/esm/platform/workspace.mjs +8 -1
  81. package/dist/esm/redis/client.mjs +2 -1
  82. package/dist/esm/security/oauth.mjs +2 -1
  83. package/dist/esm/template/engines.mjs +6 -1
  84. package/package.json +1 -1
@@ -23,6 +23,8 @@ module.exports = __toCommonJS(tracer_exports);
23
23
  var import_bpm = require("@aerokit/sdk/bpm");
24
24
  var import_log = require("@aerokit/sdk/log");
25
25
  class Tracer {
26
+ startTime;
27
+ logger;
26
28
  constructor() {
27
29
  this.startTime = /* @__PURE__ */ new Date();
28
30
  this.logger = import_log.Logging.getLogger("bpm.tracer");
@@ -59,4 +61,4 @@ class Tracer {
59
61
  return "[no-execution-context]";
60
62
  }
61
63
  }
62
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2JwbS90cmFjZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFByb2Nlc3MgfSBmcm9tICdAYWVyb2tpdC9zZGsvYnBtJztcbmltcG9ydCB7IExvZ2dpbmcsIExvZ2dlciB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFjZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRUaW1lOiBEYXRlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdicG0udHJhY2VyJyk7XG4gICAgICAgIHRoaXMubG9nKCdTdGFydGVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGAke3RoaXMuZ2V0SWQoKX0gLSAke21lc3NhZ2UgPz8gJyd9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wbGV0ZShtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5jZWlsKChlbmRUaW1lLmdldFRpbWUoKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gQ29tcGxldGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmYWlsKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmNlaWwoKGVuZFRpbWUuZ2V0VGltZSgpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gRmFpbGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IFByb2Nlc3MuZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0RlZmluaXRpb25JZCA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0RlZmluaXRpb25JZCgpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0luc3RhbmNlSWQgPSBleGVjdXRpb25Db250ZXh0LmdldFByb2Nlc3NJbnN0YW5jZUlkKCk7XG4gICAgICAgICAgICBjb25zdCBidXNpbmVzc0tleSA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0luc3RhbmNlQnVzaW5lc3NLZXkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5SWQgPSBleGVjdXRpb25Db250ZXh0LmdldEN1cnJlbnRBY3Rpdml0eUlkKCk7XG4gICAgICAgICAgICByZXR1cm4gYFske3Byb2Nlc3NEZWZpbml0aW9uSWR9XVske3Byb2Nlc3NJbnN0YW5jZUlkfV1bJHtidXNpbmVzc0tleX1dWyR7YWN0aXZpdHlJZH1dYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1tuby1leGVjdXRpb24tY29udGV4dF0nO1xuICAgIH1cbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFBd0I7QUFDeEIsaUJBQWdDO0FBRXpCLE1BQU0sT0FBTztBQUFBLEVBSWhCLGNBQWM7QUFDVixTQUFLLFlBQVksb0JBQUksS0FBSztBQUMxQixTQUFLLFNBQVMsbUJBQVEsVUFBVSxZQUFZO0FBQzVDLFNBQUssSUFBSSxTQUFTO0FBQUEsRUFDdEI7QUFBQSxFQUVPLElBQUksU0FBaUI7QUFDeEIsU0FBSyxPQUFPLEtBQUssR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFNLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDekQ7QUFBQSxFQUVPLEtBQUssU0FBaUI7QUFDekIsU0FBSyxPQUFPLEtBQUssR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFNLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDekQ7QUFBQSxFQUVPLE1BQU0sU0FBaUI7QUFDMUIsU0FBSyxPQUFPLE1BQU0sR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFNLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDMUQ7QUFBQSxFQUVPLFNBQVMsU0FBa0I7QUFDOUIsVUFBTSxVQUFVLG9CQUFJLEtBQUs7QUFDekIsVUFBTSxVQUFVLEtBQUssTUFBTSxRQUFRLFFBQVEsSUFBSSxLQUFLLFVBQVUsUUFBUSxLQUFLLEdBQUk7QUFDL0UsU0FBSyxPQUFPLEtBQUssR0FBRyxLQUFLLE1BQU0sQ0FBQyxzQkFBc0IsT0FBTyxhQUFhLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDN0Y7QUFBQSxFQUVPLEtBQUssU0FBa0I7QUFDMUIsVUFBTSxVQUFVLG9CQUFJLEtBQUs7QUFDekIsVUFBTSxVQUFVLEtBQUssTUFBTSxRQUFRLFFBQVEsSUFBSSxLQUFLLFVBQVUsUUFBUSxLQUFLLEdBQUk7QUFDL0UsU0FBSyxPQUFPLE1BQU0sR0FBRyxLQUFLLE1BQU0sQ0FBQyxtQkFBbUIsT0FBTyxhQUFhLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDM0Y7QUFBQSxFQUVRLFFBQWdCO0FBQ3BCLFVBQU0sbUJBQW1CLG1CQUFRLG9CQUFvQjtBQUNyRCxRQUFJLGtCQUFrQjtBQUNsQixZQUFNLHNCQUFzQixpQkFBaUIsdUJBQXVCO0FBQ3BFLFlBQU0sb0JBQW9CLGlCQUFpQixxQkFBcUI7QUFDaEUsWUFBTSxjQUFjLGlCQUFpQiw4QkFBOEI7QUFDbkUsWUFBTSxhQUFhLGlCQUFpQixxQkFBcUI7QUFDekQsYUFBTyxJQUFJLG1CQUFtQixLQUFLLGlCQUFpQixLQUFLLFdBQVcsS0FBSyxVQUFVO0FBQUEsSUFDdkY7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNKOyIsCiAgIm5hbWVzIjogW10KfQo=
64
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2JwbS90cmFjZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFByb2Nlc3MgfSBmcm9tICdAYWVyb2tpdC9zZGsvYnBtJztcbmltcG9ydCB7IExvZ2dpbmcsIExvZ2dlciB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFjZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRUaW1lOiBEYXRlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdicG0udHJhY2VyJyk7XG4gICAgICAgIHRoaXMubG9nKCdTdGFydGVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGAke3RoaXMuZ2V0SWQoKX0gLSAke21lc3NhZ2UgPz8gJyd9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wbGV0ZShtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5jZWlsKChlbmRUaW1lLmdldFRpbWUoKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gQ29tcGxldGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmYWlsKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmNlaWwoKGVuZFRpbWUuZ2V0VGltZSgpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gRmFpbGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IFByb2Nlc3MuZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0RlZmluaXRpb25JZCA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0RlZmluaXRpb25JZCgpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0luc3RhbmNlSWQgPSBleGVjdXRpb25Db250ZXh0LmdldFByb2Nlc3NJbnN0YW5jZUlkKCk7XG4gICAgICAgICAgICBjb25zdCBidXNpbmVzc0tleSA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0luc3RhbmNlQnVzaW5lc3NLZXkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5SWQgPSBleGVjdXRpb25Db250ZXh0LmdldEN1cnJlbnRBY3Rpdml0eUlkKCk7XG4gICAgICAgICAgICByZXR1cm4gYFske3Byb2Nlc3NEZWZpbml0aW9uSWR9XVske3Byb2Nlc3NJbnN0YW5jZUlkfV1bJHtidXNpbmVzc0tleX1dWyR7YWN0aXZpdHlJZH1dYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1tuby1leGVjdXRpb24tY29udGV4dF0nO1xuICAgIH1cbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFBd0I7QUFDeEIsaUJBQWdDO0FBRXpCLE1BQU0sT0FBTztBQUFBLEVBQ0M7QUFBQSxFQUNBO0FBQUEsRUFFakIsY0FBYztBQUNWLFNBQUssWUFBWSxvQkFBSSxLQUFLO0FBQzFCLFNBQUssU0FBUyxtQkFBUSxVQUFVLFlBQVk7QUFDNUMsU0FBSyxJQUFJLFNBQVM7QUFBQSxFQUN0QjtBQUFBLEVBRU8sSUFBSSxTQUFpQjtBQUN4QixTQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssTUFBTSxDQUFDLE1BQU0sV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUN6RDtBQUFBLEVBRU8sS0FBSyxTQUFpQjtBQUN6QixTQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssTUFBTSxDQUFDLE1BQU0sV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUN6RDtBQUFBLEVBRU8sTUFBTSxTQUFpQjtBQUMxQixTQUFLLE9BQU8sTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLE1BQU0sV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUMxRDtBQUFBLEVBRU8sU0FBUyxTQUFrQjtBQUM5QixVQUFNLFVBQVUsb0JBQUksS0FBSztBQUN6QixVQUFNLFVBQVUsS0FBSyxNQUFNLFFBQVEsUUFBUSxJQUFJLEtBQUssVUFBVSxRQUFRLEtBQUssR0FBSTtBQUMvRSxTQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssTUFBTSxDQUFDLHNCQUFzQixPQUFPLGFBQWEsV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUM3RjtBQUFBLEVBRU8sS0FBSyxTQUFrQjtBQUMxQixVQUFNLFVBQVUsb0JBQUksS0FBSztBQUN6QixVQUFNLFVBQVUsS0FBSyxNQUFNLFFBQVEsUUFBUSxJQUFJLEtBQUssVUFBVSxRQUFRLEtBQUssR0FBSTtBQUMvRSxTQUFLLE9BQU8sTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLG1CQUFtQixPQUFPLGFBQWEsV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUMzRjtBQUFBLEVBRVEsUUFBZ0I7QUFDcEIsVUFBTSxtQkFBbUIsbUJBQVEsb0JBQW9CO0FBQ3JELFFBQUksa0JBQWtCO0FBQ2xCLFlBQU0sc0JBQXNCLGlCQUFpQix1QkFBdUI7QUFDcEUsWUFBTSxvQkFBb0IsaUJBQWlCLHFCQUFxQjtBQUNoRSxZQUFNLGNBQWMsaUJBQWlCLDhCQUE4QjtBQUNuRSxZQUFNLGFBQWEsaUJBQWlCLHFCQUFxQjtBQUN6RCxhQUFPLElBQUksbUJBQW1CLEtBQUssaUJBQWlCLEtBQUssV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUN2RjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQ0o7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -37,182 +37,100 @@ const CmisFacade = Java.type("org.eclipse.dirigible.components.api.cms.CmisFacad
37
37
  const Gson = Java.type("com.google.gson.Gson");
38
38
  const HashMap = Java.type("java.util.HashMap");
39
39
  class Cmis {
40
- static {
41
- // CONSTANTS
42
- /**
43
- * CMIS method constant for read operations.
44
- */
45
- this.METHOD_READ = "READ";
46
- }
47
- static {
48
- /**
49
- * CMIS method constant for write operations.
50
- */
51
- this.METHOD_WRITE = "WRITE";
52
- }
53
- static {
54
- // ---- Base CMIS Properties ----
55
- /** CMIS property: Object name. */
56
- this.NAME = "cmis:name";
57
- }
58
- static {
59
- /** CMIS property: Unique object identifier. */
60
- this.OBJECT_ID = "cmis:objectId";
61
- }
62
- static {
63
- /** CMIS property: Object type identifier. */
64
- this.OBJECT_TYPE_ID = "cmis:objectTypeId";
65
- }
66
- static {
67
- /** CMIS property: Base object type identifier. */
68
- this.BASE_TYPE_ID = "cmis:baseTypeId";
69
- }
70
- static {
71
- /** CMIS property: User who created the object. */
72
- this.CREATED_BY = "cmis:createdBy";
73
- }
74
- static {
75
- /** CMIS property: Timestamp of object creation. */
76
- this.CREATION_DATE = "cmis:creationDate";
77
- }
78
- static {
79
- /** CMIS property: User who last modified the object. */
80
- this.LAST_MODIFIED_BY = "cmis:lastModifiedBy";
81
- }
82
- static {
83
- /** CMIS property: Timestamp of last modification. */
84
- this.LAST_MODIFICATION_DATE = "cmis:lastModificationDate";
85
- }
86
- static {
87
- /** CMIS property: Change token for object change tracking. */
88
- this.CHANGE_TOKEN = "cmis:changeToken";
89
- }
90
- static {
91
- // ---- Document CMIS Properties ----
92
- /** CMIS property: Indicates if the document is immutable. */
93
- this.IS_IMMUTABLE = "cmis:isImmutable";
94
- }
95
- static {
96
- /** CMIS property: Indicates if the document is the latest version in the version series. */
97
- this.IS_LATEST_VERSION = "cmis:isLatestVersion";
98
- }
99
- static {
100
- /** CMIS property: Indicates if the document is a major version. */
101
- this.IS_MAJOR_VERSION = "cmis:isMajorVersion";
102
- }
103
- static {
104
- /** CMIS property: Indicates if the document is the latest major version. */
105
- this.IS_LATEST_MAJOR_VERSION = "cmis:isLatestMajorVersion";
106
- }
107
- static {
108
- /** CMIS property: Label of the document version. */
109
- this.VERSION_LABEL = "cmis:versionLabel";
110
- }
111
- static {
112
- /** CMIS property: ID of the version series. */
113
- this.VERSION_SERIES_ID = "cmis:versionSeriesId";
114
- }
115
- static {
116
- /** CMIS property: Indicates if the version series is checked out. */
117
- this.IS_VERSION_SERIES_CHECKED_OUT = "cmis:isVersionSeriesCheckedOut";
118
- }
119
- static {
120
- /** CMIS property: User who checked out the version series. */
121
- this.VERSION_SERIES_CHECKED_OUT_BY = "cmis:versionSeriesCheckedOutBy";
122
- }
123
- static {
124
- /** CMIS property: ID of the checked-out document object. */
125
- this.VERSION_SERIES_CHECKED_OUT_ID = "cmis:versionSeriesCheckedOutId";
126
- }
127
- static {
128
- /** CMIS property: Comment associated with the check-in operation. */
129
- this.CHECKIN_COMMENT = "cmis:checkinComment";
130
- }
131
- static {
132
- /** CMIS property: Length of the content stream in bytes. */
133
- this.CONTENT_STREAM_LENGTH = "cmis:contentStreamLength";
134
- }
135
- static {
136
- /** CMIS property: MIME type of the content stream. */
137
- this.CONTENT_STREAM_MIME_TYPE = "cmis:contentStreamMimeType";
138
- }
139
- static {
140
- /** CMIS property: Original file name of the content stream. */
141
- this.CONTENT_STREAM_FILE_NAME = "cmis:contentStreamFileName";
142
- }
143
- static {
144
- /** CMIS property: ID of the content stream. */
145
- this.CONTENT_STREAM_ID = "cmis:contentStreamId";
146
- }
147
- static {
148
- // ---- Folder CMIS Properties ----
149
- /** CMIS property: Object ID of the parent folder. */
150
- this.PARENT_ID = "cmis:parentId";
151
- }
152
- static {
153
- /** CMIS property: List of allowed object type IDs for children. */
154
- this.ALLOWED_CHILD_OBJECT_TYPE_IDS = "cmis:allowedChildObjectTypeIds";
155
- }
156
- static {
157
- /** CMIS property: Path of the folder in the repository. */
158
- this.PATH = "cmis:path";
159
- }
160
- static {
161
- // ---- Relationship CMIS Properties ----
162
- /** CMIS property: Object ID of the relationship source. */
163
- this.SOURCE_ID = "cmis:sourceId";
164
- }
165
- static {
166
- /** CMIS property: Object ID of the relationship target. */
167
- this.TARGET_ID = "cmis:targetId";
168
- }
169
- static {
170
- // ---- Policy CMIS Properties ----
171
- /** CMIS property: Text content of the policy. */
172
- this.POLICY_TEXT = "cmis:policyText";
173
- }
174
- static {
175
- // ---- Versioning States ----
176
- /** CMIS Versioning State: No versioning. */
177
- this.VERSIONING_STATE_NONE = "none";
178
- }
179
- static {
180
- /** CMIS Versioning State: Create a new major version. */
181
- this.VERSIONING_STATE_MAJOR = "major";
182
- }
183
- static {
184
- /** CMIS Versioning State: Create a new minor version. */
185
- this.VERSIONING_STATE_MINOR = "minor";
186
- }
187
- static {
188
- /** CMIS Versioning State: Document is checked out. */
189
- this.VERSIONING_STATE_CHECKEDOUT = "checkedout";
190
- }
191
- static {
192
- // ---- Object Types ----
193
- /** CMIS Object Type ID: Document. */
194
- this.OBJECT_TYPE_DOCUMENT = "cmis:document";
195
- }
196
- static {
197
- /** CMIS Object Type ID: Folder. */
198
- this.OBJECT_TYPE_FOLDER = "cmis:folder";
199
- }
200
- static {
201
- /** CMIS Object Type ID: Relationship. */
202
- this.OBJECT_TYPE_RELATIONSHIP = "cmis:relationship";
203
- }
204
- static {
205
- /** CMIS Object Type ID: Policy. */
206
- this.OBJECT_TYPE_POLICY = "cmis:policy";
207
- }
208
- static {
209
- /** CMIS Object Type ID: Item. */
210
- this.OBJECT_TYPE_ITEM = "cmis:item";
211
- }
212
- static {
213
- /** CMIS Object Type ID: Secondary. */
214
- this.OBJECT_TYPE_SECONDARY = "cmis:secondary";
215
- }
40
+ // CONSTANTS
41
+ /**
42
+ * CMIS method constant for read operations.
43
+ */
44
+ static METHOD_READ = "READ";
45
+ /**
46
+ * CMIS method constant for write operations.
47
+ */
48
+ static METHOD_WRITE = "WRITE";
49
+ // ---- Base CMIS Properties ----
50
+ /** CMIS property: Object name. */
51
+ static NAME = "cmis:name";
52
+ /** CMIS property: Unique object identifier. */
53
+ static OBJECT_ID = "cmis:objectId";
54
+ /** CMIS property: Object type identifier. */
55
+ static OBJECT_TYPE_ID = "cmis:objectTypeId";
56
+ /** CMIS property: Base object type identifier. */
57
+ static BASE_TYPE_ID = "cmis:baseTypeId";
58
+ /** CMIS property: User who created the object. */
59
+ static CREATED_BY = "cmis:createdBy";
60
+ /** CMIS property: Timestamp of object creation. */
61
+ static CREATION_DATE = "cmis:creationDate";
62
+ /** CMIS property: User who last modified the object. */
63
+ static LAST_MODIFIED_BY = "cmis:lastModifiedBy";
64
+ /** CMIS property: Timestamp of last modification. */
65
+ static LAST_MODIFICATION_DATE = "cmis:lastModificationDate";
66
+ /** CMIS property: Change token for object change tracking. */
67
+ static CHANGE_TOKEN = "cmis:changeToken";
68
+ // ---- Document CMIS Properties ----
69
+ /** CMIS property: Indicates if the document is immutable. */
70
+ static IS_IMMUTABLE = "cmis:isImmutable";
71
+ /** CMIS property: Indicates if the document is the latest version in the version series. */
72
+ static IS_LATEST_VERSION = "cmis:isLatestVersion";
73
+ /** CMIS property: Indicates if the document is a major version. */
74
+ static IS_MAJOR_VERSION = "cmis:isMajorVersion";
75
+ /** CMIS property: Indicates if the document is the latest major version. */
76
+ static IS_LATEST_MAJOR_VERSION = "cmis:isLatestMajorVersion";
77
+ /** CMIS property: Label of the document version. */
78
+ static VERSION_LABEL = "cmis:versionLabel";
79
+ /** CMIS property: ID of the version series. */
80
+ static VERSION_SERIES_ID = "cmis:versionSeriesId";
81
+ /** CMIS property: Indicates if the version series is checked out. */
82
+ static IS_VERSION_SERIES_CHECKED_OUT = "cmis:isVersionSeriesCheckedOut";
83
+ /** CMIS property: User who checked out the version series. */
84
+ static VERSION_SERIES_CHECKED_OUT_BY = "cmis:versionSeriesCheckedOutBy";
85
+ /** CMIS property: ID of the checked-out document object. */
86
+ static VERSION_SERIES_CHECKED_OUT_ID = "cmis:versionSeriesCheckedOutId";
87
+ /** CMIS property: Comment associated with the check-in operation. */
88
+ static CHECKIN_COMMENT = "cmis:checkinComment";
89
+ /** CMIS property: Length of the content stream in bytes. */
90
+ static CONTENT_STREAM_LENGTH = "cmis:contentStreamLength";
91
+ /** CMIS property: MIME type of the content stream. */
92
+ static CONTENT_STREAM_MIME_TYPE = "cmis:contentStreamMimeType";
93
+ /** CMIS property: Original file name of the content stream. */
94
+ static CONTENT_STREAM_FILE_NAME = "cmis:contentStreamFileName";
95
+ /** CMIS property: ID of the content stream. */
96
+ static CONTENT_STREAM_ID = "cmis:contentStreamId";
97
+ // ---- Folder CMIS Properties ----
98
+ /** CMIS property: Object ID of the parent folder. */
99
+ static PARENT_ID = "cmis:parentId";
100
+ /** CMIS property: List of allowed object type IDs for children. */
101
+ static ALLOWED_CHILD_OBJECT_TYPE_IDS = "cmis:allowedChildObjectTypeIds";
102
+ /** CMIS property: Path of the folder in the repository. */
103
+ static PATH = "cmis:path";
104
+ // ---- Relationship CMIS Properties ----
105
+ /** CMIS property: Object ID of the relationship source. */
106
+ static SOURCE_ID = "cmis:sourceId";
107
+ /** CMIS property: Object ID of the relationship target. */
108
+ static TARGET_ID = "cmis:targetId";
109
+ // ---- Policy CMIS Properties ----
110
+ /** CMIS property: Text content of the policy. */
111
+ static POLICY_TEXT = "cmis:policyText";
112
+ // ---- Versioning States ----
113
+ /** CMIS Versioning State: No versioning. */
114
+ static VERSIONING_STATE_NONE = "none";
115
+ /** CMIS Versioning State: Create a new major version. */
116
+ static VERSIONING_STATE_MAJOR = "major";
117
+ /** CMIS Versioning State: Create a new minor version. */
118
+ static VERSIONING_STATE_MINOR = "minor";
119
+ /** CMIS Versioning State: Document is checked out. */
120
+ static VERSIONING_STATE_CHECKEDOUT = "checkedout";
121
+ // ---- Object Types ----
122
+ /** CMIS Object Type ID: Document. */
123
+ static OBJECT_TYPE_DOCUMENT = "cmis:document";
124
+ /** CMIS Object Type ID: Folder. */
125
+ static OBJECT_TYPE_FOLDER = "cmis:folder";
126
+ /** CMIS Object Type ID: Relationship. */
127
+ static OBJECT_TYPE_RELATIONSHIP = "cmis:relationship";
128
+ /** CMIS Object Type ID: Policy. */
129
+ static OBJECT_TYPE_POLICY = "cmis:policy";
130
+ /** CMIS Object Type ID: Item. */
131
+ static OBJECT_TYPE_ITEM = "cmis:item";
132
+ /** CMIS Object Type ID: Secondary. */
133
+ static OBJECT_TYPE_SECONDARY = "cmis:secondary";
216
134
  /**
217
135
  * Gets a new CMIS session instance to interact with the repository.
218
136
  * @returns A new {@link Session} instance.
@@ -233,6 +151,7 @@ class Cmis {
233
151
  }
234
152
  }
235
153
  class Session {
154
+ native;
236
155
  constructor(native) {
237
156
  this.native = native;
238
157
  }
@@ -337,6 +256,7 @@ class Session {
337
256
  }
338
257
  }
339
258
  class RepositoryInfo {
259
+ native;
340
260
  constructor(native) {
341
261
  this.native = native;
342
262
  }
@@ -356,6 +276,8 @@ class RepositoryInfo {
356
276
  }
357
277
  }
358
278
  class Folder {
279
+ native;
280
+ path;
359
281
  constructor(native, path) {
360
282
  this.native = native;
361
283
  this.path = path;
@@ -505,6 +427,7 @@ class Folder {
505
427
  }
506
428
  }
507
429
  class CmisObject {
430
+ native;
508
431
  constructor(native) {
509
432
  this.native = native;
510
433
  }
@@ -559,6 +482,7 @@ class CmisObject {
559
482
  }
560
483
  }
561
484
  class ObjectFactory {
485
+ native;
562
486
  constructor(native) {
563
487
  this.native = native;
564
488
  }
@@ -576,6 +500,7 @@ class ObjectFactory {
576
500
  }
577
501
  }
578
502
  class ContentStream {
503
+ native;
579
504
  constructor(native) {
580
505
  this.native = native;
581
506
  }
@@ -596,6 +521,8 @@ class ContentStream {
596
521
  }
597
522
  }
598
523
  class Document {
524
+ native;
525
+ path;
599
526
  constructor(native, path) {
600
527
  this.native = native;
601
528
  this.path = path;
@@ -672,6 +599,7 @@ class Document {
672
599
  }
673
600
  }
674
601
  class TypeDefinition {
602
+ native;
675
603
  constructor(native) {
676
604
  this.native = native;
677
605
  }
@@ -686,4 +614,4 @@ class TypeDefinition {
686
614
  if (typeof module !== "undefined") {
687
615
  module.exports = Cmis;
688
616
  }
689
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Ntcy9jbWlzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBDTUlTXG4gKiAqIE5vdGU6IFRoaXMgbW9kdWxlIGlzIHN1cHBvcnRlZCBvbmx5IHdpdGggdGhlIE1vemlsbGEgUmhpbm8gZW5naW5lXG4gKiAqIFByb3ZpZGVzIHN0YXRpYyBhY2Nlc3MgdG8gdGhlIENNSVMgKENvbnRlbnQgTWFuYWdlbWVudCBJbnRlcm9wZXJhYmlsaXR5IFNlcnZpY2VzKSByZXBvc2l0b3J5IHNlc3Npb24gYW5kIHV0aWxpdHkgY29uc3RhbnRzLlxuICovXG5cbmltcG9ydCAqIGFzIHN0cmVhbXMgZnJvbSBcIkBhZXJva2l0L3Nkay9pby9zdHJlYW1zXCI7XG5jb25zdCBDbWlzRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLmNtcy5DbWlzRmFjYWRlXCIpO1xuY29uc3QgR3NvbiA9IEphdmEudHlwZShcImNvbS5nb29nbGUuZ3Nvbi5Hc29uXCIpO1xuY29uc3QgSGFzaE1hcCA9IEphdmEudHlwZShcImphdmEudXRpbC5IYXNoTWFwXCIpO1xuXG5leHBvcnQgY2xhc3MgQ21pcyB7XG5cblx0Ly8gQ09OU1RBTlRTXG5cdC8qKlxuXHQgKiBDTUlTIG1ldGhvZCBjb25zdGFudCBmb3IgcmVhZCBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBNRVRIT0RfUkVBRCA9IFwiUkVBRFwiO1xuXHQvKipcblx0ICogQ01JUyBtZXRob2QgY29uc3RhbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FVEhPRF9XUklURSA9IFwiV1JJVEVcIjtcblxuXHQvLyAtLS0tIEJhc2UgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IE9iamVjdCBuYW1lLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUUgPSBcImNtaXM6bmFtZVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9JRCA9IFwiY21pczpvYmplY3RJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9JRCA9IFwiY21pczpvYmplY3RUeXBlSWRcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEJhc2Ugb2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBCQVNFX1RZUEVfSUQgPSBcImNtaXM6YmFzZVR5cGVJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVXNlciB3aG8gY3JlYXRlZCB0aGUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFURURfQlkgPSBcImNtaXM6Y3JlYXRlZEJ5XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBUaW1lc3RhbXAgb2Ygb2JqZWN0IGNyZWF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFUSU9OX0RBVEUgPSBcImNtaXM6Y3JlYXRpb25EYXRlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBsYXN0IG1vZGlmaWVkIHRoZSBvYmplY3QuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEFTVF9NT0RJRklFRF9CWSA9IFwiY21pczpsYXN0TW9kaWZpZWRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVGltZXN0YW1wIG9mIGxhc3QgbW9kaWZpY2F0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBU1RfTU9ESUZJQ0FUSU9OX0RBVEUgPSBcImNtaXM6bGFzdE1vZGlmaWNhdGlvbkRhdGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IENoYW5nZSB0b2tlbiBmb3Igb2JqZWN0IGNoYW5nZSB0cmFja2luZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDSEFOR0VfVE9LRU4gPSBcImNtaXM6Y2hhbmdlVG9rZW5cIjtcblxuXHQvLyAtLS0tIERvY3VtZW50IENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBJbmRpY2F0ZXMgaWYgdGhlIGRvY3VtZW50IGlzIGltbXV0YWJsZS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19JTU1VVEFCTEUgPSBcImNtaXM6aXNJbW11dGFibGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCB2ZXJzaW9uIGluIHRoZSB2ZXJzaW9uIHNlcmllcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19MQVRFU1RfVkVSU0lPTiA9IFwiY21pczppc0xhdGVzdFZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgYSBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX01BSk9SX1ZFUlNJT04gPSBcImNtaXM6aXNNYWpvclZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX0xBVEVTVF9NQUpPUl9WRVJTSU9OID0gXCJjbWlzOmlzTGF0ZXN0TWFqb3JWZXJzaW9uXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBMYWJlbCBvZiB0aGUgZG9jdW1lbnQgdmVyc2lvbi4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX0xBQkVMID0gXCJjbWlzOnZlcnNpb25MYWJlbFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIHZlcnNpb24gc2VyaWVzLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlNJT05fU0VSSUVTX0lEID0gXCJjbWlzOnZlcnNpb25TZXJpZXNJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSW5kaWNhdGVzIGlmIHRoZSB2ZXJzaW9uIHNlcmllcyBpcyBjaGVja2VkIG91dC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19WRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVCA9IFwiY21pczppc1ZlcnNpb25TZXJpZXNDaGVja2VkT3V0XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBjaGVja2VkIG91dCB0aGUgdmVyc2lvbiBzZXJpZXMuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTl9TRVJJRVNfQ0hFQ0tFRF9PVVRfQlkgPSBcImNtaXM6dmVyc2lvblNlcmllc0NoZWNrZWRPdXRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIGNoZWNrZWQtb3V0IGRvY3VtZW50IG9iamVjdC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVF9JRCA9IFwiY21pczp2ZXJzaW9uU2VyaWVzQ2hlY2tlZE91dElkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2staW4gb3BlcmF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENIRUNLSU5fQ09NTUVOVCA9IFwiY21pczpjaGVja2luQ29tbWVudFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGVuZ3RoIG9mIHRoZSBjb250ZW50IHN0cmVhbSBpbiBieXRlcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9MRU5HVEggPSBcImNtaXM6Y29udGVudFN0cmVhbUxlbmd0aFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9NSU1FX1RZUEUgPSBcImNtaXM6Y29udGVudFN0cmVhbU1pbWVUeXBlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPcmlnaW5hbCBmaWxlIG5hbWUgb2YgdGhlIGNvbnRlbnQgc3RyZWFtLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRFTlRfU1RSRUFNX0ZJTEVfTkFNRSA9IFwiY21pczpjb250ZW50U3RyZWFtRmlsZU5hbWVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IElEIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9JRCA9IFwiY21pczpjb250ZW50U3RyZWFtSWRcIjtcblxuXHQvLyAtLS0tIEZvbGRlciBDTUlTIFByb3BlcnRpZXMgLS0tLVxuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IElEIG9mIHRoZSBwYXJlbnQgZm9sZGVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBUkVOVF9JRCA9IFwiY21pczpwYXJlbnRJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGlzdCBvZiBhbGxvd2VkIG9iamVjdCB0eXBlIElEcyBmb3IgY2hpbGRyZW4uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxMT1dFRF9DSElMRF9PQkpFQ1RfVFlQRV9JRFMgPSBcImNtaXM6YWxsb3dlZENoaWxkT2JqZWN0VHlwZUlkc1wiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogUGF0aCBvZiB0aGUgZm9sZGVyIGluIHRoZSByZXBvc2l0b3J5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBVEggPSBcImNtaXM6cGF0aFwiO1xuXG5cdC8vIC0tLS0gUmVsYXRpb25zaGlwIENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCBzb3VyY2UuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU09VUkNFX0lEID0gXCJjbWlzOnNvdXJjZUlkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCB0YXJnZXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVEFSR0VUX0lEID0gXCJjbWlzOnRhcmdldElkXCI7XG5cblx0Ly8gLS0tLSBQb2xpY3kgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IFRleHQgY29udGVudCBvZiB0aGUgcG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPTElDWV9URVhUID0gXCJjbWlzOnBvbGljeVRleHRcIjtcblxuXHQvLyAtLS0tIFZlcnNpb25pbmcgU3RhdGVzIC0tLS1cblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogTm8gdmVyc2lvbmluZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OSU5HX1NUQVRFX05PTkUgPSBcIm5vbmVcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1ham9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NQUpPUiA9IFwibWFqb3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1pbm9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NSU5PUiA9IFwibWlub3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogRG9jdW1lbnQgaXMgY2hlY2tlZCBvdXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9DSEVDS0VET1VUID0gXCJjaGVja2Vkb3V0XCI7XG5cblx0Ly8gLS0tLSBPYmplY3QgVHlwZXMgLS0tLVxuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogRG9jdW1lbnQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfRE9DVU1FTlQgPSBcImNtaXM6ZG9jdW1lbnRcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEZvbGRlci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9GT0xERVIgPSBcImNtaXM6Zm9sZGVyXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBSZWxhdGlvbnNoaXAuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfUkVMQVRJT05TSElQID0gXCJjbWlzOnJlbGF0aW9uc2hpcFwiO1xuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogUG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9UWVBFX1BPTElDWSA9IFwiY21pczpwb2xpY3lcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEl0ZW0uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfSVRFTSA9IFwiY21pczppdGVtXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBTZWNvbmRhcnkuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfU0VDT05EQVJZID0gXCJjbWlzOnNlY29uZGFyeVwiO1xuXG5cdC8qKlxuXHQgKiBHZXRzIGEgbmV3IENNSVMgc2Vzc2lvbiBpbnN0YW5jZSB0byBpbnRlcmFjdCB3aXRoIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgU2Vzc2lvbn0gaW5zdGFuY2UuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFNlc3Npb24oKTogU2Vzc2lvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gQ21pc0ZhY2FkZS5nZXRTZXNzaW9uKCk7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFjY2VzcyBjb250cm9sIGRlZmluaXRpb25zIGZvciBhIHNwZWNpZmljIHBhdGggYW5kIG1ldGhvZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIENNSVMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBvcGVyYXRpb24gbWV0aG9kIChlLmcuLCB7QGxpbmsgQ21pcy5NRVRIT0RfUkVBRH0sIHtAbGluayBDbWlzLk1FVEhPRF9XUklURX0pLlxuXHQgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYWNjZXNzIGRlZmluaXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRBY2Nlc3NEZWZpbml0aW9ucyhwYXRoOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogQWNjZXNzRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBhY2Nlc3NEZWZpbml0aW9ucyA9IENtaXNGYWNhZGUuZ2V0QWNjZXNzRGVmaW5pdGlvbnMocGF0aCwgbWV0aG9kKTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShuZXcgR3NvbigpLnRvSnNvbihhY2Nlc3NEZWZpbml0aW9ucykpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBhY2Nlc3MgY29udHJvbCBlbnRyeSAoQUNFKSBmb3IgYSBDTUlTIG9iamVjdCwgZGV0YWlsaW5nXG4gKiB3aG8gaGFzIHdoYXQgcGVybWlzc2lvbnMgb24gYSBwYXRoLlxuICovXG5pbnRlcmZhY2UgQWNjZXNzRGVmaW5pdGlvbiB7XG5cdC8qKiBHZXRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFjY2VzcyBkZWZpbml0aW9uLiAqL1xuXHRnZXRJZCgpOiBzdHJpbmc7XG5cdC8qKiBHZXRzIHRoZSBzY29wZSBvZiB0aGUgZGVmaW5pdGlvbiAoZS5nLiwgJ3VzZXInLCAnZ3JvdXAnKS4gKi9cblx0Z2V0U2NvcGUoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgcGF0aCBvZiB0aGUgQ01JUyBvYmplY3QgdGhpcyBkZWZpbml0aW9uIGFwcGxpZXMgdG8uICovXG5cdGdldFBhdGgoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgbWV0aG9kL29wZXJhdGlvbiB0aGlzIGRlZmluaXRpb24gYXBwbGllcyB0byAoZS5nLiwgJ1JFQUQnLCAnV1JJVEUnKS4gKi9cblx0Z2V0TWV0aG9kKCk6IHN0cmluZztcblx0LyoqIEdldHMgdGhlIHNlY3VyaXR5IHJvbGUgKGUuZy4sICdBZG1pbmlzdHJhdG9yJywgJ1ZpZXdlcicpLiAqL1xuXHRnZXRSb2xlKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXNzaW9uIG9iamVjdFxuICogKiBSZXByZXNlbnRzIGFuIGFjdGl2ZSBjb25uZWN0aW9uIHRvIGEgQ01JUyByZXBvc2l0b3J5LCB1c2VkIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBDTUlTIG9wZXJhdGlvbnMuXG4gKi9cbmNsYXNzIFNlc3Npb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IHRoaXMgc2Vzc2lvbiBpcyBjb25uZWN0ZWQgdG8uXG5cdCAqIEByZXR1cm5zIFJlcG9zaXRvcnkgbWV0YWRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UmVwb3NpdG9yeUluZm8oKTogUmVwb3NpdG9yeUluZm8ge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJlcG9zaXRvcnlJbmZvKCk7XG5cdFx0cmV0dXJuIG5ldyBSZXBvc2l0b3J5SW5mbyhuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUaGUgcm9vdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Um9vdEZvbGRlcigpOiBGb2xkZXIge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJvb3RGb2xkZXIoKTtcblx0XHRyZXR1cm4gbmV3IEZvbGRlcihuYXRpdmUsIG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG9iamVjdCBmYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgQ01JUyBvYmplY3RzIGxpa2UgQ29udGVudFN0cmVhbS5cblx0ICogQHJldHVybnMgQW4ge0BsaW5rIE9iamVjdEZhY3Rvcnl9IGluc3RhbmNlLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEZhY3RvcnkoKTogT2JqZWN0RmFjdG9yeSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0RmFjdG9yeSgpO1xuXHRcdHJldHVybiBuZXcgT2JqZWN0RmFjdG9yeShuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIENNSVMgb2JqZWN0IChEb2N1bWVudCBvciBGb2xkZXIpIGJ5IGl0cyB1bmlxdWUgSUQuXG5cdCAqIEBwYXJhbSBvYmplY3RJZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50fSBvciB7QGxpbmsgRm9sZGVyfSBpbnN0YW5jZS5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgb2JqZWN0IHR5cGUgaXMgdW5zdXBwb3J0ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T2JqZWN0KG9iamVjdElkOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3Qgb2JqZWN0SW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRPYmplY3Qob2JqZWN0SWQpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgbnVsbCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBudWxsKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgQ01JUyBvYmplY3QgKERvY3VtZW50IG9yIEZvbGRlcikgYnkgaXRzIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBvYmplY3QgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4sIFwiL3BhdGgvdG8vb2JqZWN0XCIpLlxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBEb2N1bWVudH0gb3Ige0BsaW5rIEZvbGRlcn0gaW5zdGFuY2UuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgcmVhZCBhY2Nlc3MgaXMgbm90IGFsbG93ZWQgb3IgdGhlIG9iamVjdCB0eXBlIGlzIHVuc3VwcG9ydGVkLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEJ5UGF0aChwYXRoOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHBhdGgsIENtaXMuTUVUSE9EX1JFQUQpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmVhZCBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgcGF0aCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0QnlQYXRoKHBhdGgpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgcGF0aCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBwYXRoKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGZvbGRlciBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHkgYmFzZWQgb24gYSBwYXRoLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXRcblx0ICogY3JlYXRlcyBhbGwgbm9uLWV4aXN0ZW50IHBhcmVudCBmb2xkZXJzLlxuXHQgKiBFeGFtcGxlOiBgY3JlYXRlRm9sZGVyKFwiL25ldy9wYXRoL3N0cnVjdHVyZVwiKWBcblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCAob3IgZXhpc3RpbmcpIGlubmVybW9zdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRm9sZGVyKGxvY2F0aW9uOiBzdHJpbmcpOiBGb2xkZXIge1xuXHRcdGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMSwgbG9jYXRpb24ubGVuZ3RoKTtcblx0XHR9XG5cdFx0aWYgKGxvY2F0aW9uLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgbG9jYXRpb24ubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNlZ21lbnRzID0gbG9jYXRpb24uc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBmb2xkZXIgPSB0aGlzLmdldFJvb3RGb2xkZXIoKTtcblx0XHRmb3IgKGNvbnN0IG5leHQgb2Ygc2VnbWVudHMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFtDbWlzLk9CSkVDVF9UWVBFX0lEXTogQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIsXG5cdFx0XHRcdFtDbWlzLk5BTUVdOiBuZXh0XG5cdFx0XHR9O1xuXHRcdFx0Zm9sZGVyID0gZm9sZGVyLmNyZWF0ZUZvbGRlcihwcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIHBhcmVudCBmb2xkZXIgc3RydWN0dXJlIGV4aXN0cy5cblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBwYXJlbnQgZm9sZGVyIChlLmcuLCBcIi9wYXRoL3RvL2ZvbGRlclwiKS5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVEb2N1bWVudChsb2NhdGlvbjogc3RyaW5nLCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjb250ZW50U3RyZWFtOiBDb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGU6IHN0cmluZyk6IERvY3VtZW50IHtcblx0XHRjb25zdCBmb2xkZXIgPSB0aGlzLmNyZWF0ZUZvbGRlcihsb2NhdGlvbik7XG5cdFx0cmV0dXJuIGZvbGRlci5jcmVhdGVEb2N1bWVudChwcm9wZXJ0aWVzLCBjb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGUpO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBSZXBvc2l0b3J5SW5mbyBvYmplY3RcbiAqICogUHJvdmlkZXMgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbm5lY3RlZCBDTUlTIHJlcG9zaXRvcnkuXG4gKi9cbmNsYXNzIFJlcG9zaXRvcnlJbmZvIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcG9zaXRvcnkuXG5cdCAqIEByZXR1cm5zIFRoZSByZXBvc2l0b3J5IElELlxuXHQgKi9cblx0cHVibGljIGdldElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cblx0ICogQHJldHVybnMgVGhlIHJlcG9zaXRvcnkgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxufVxuXG4vKipcbiAqIEZvbGRlciBvYmplY3RcbiAqICogUmVwcmVzZW50cyBhIENNSVMgZm9sZGVyIG9iamVjdCwgYWxsb3dpbmcgb3BlcmF0aW9ucyBsaWtlIGNyZWF0aW5nIGNoaWxkcmVuLCBkZWxldGluZywgYW5kIHJlbmFtaW5nLlxuICovXG5leHBvcnQgY2xhc3MgRm9sZGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBuYW1lLlxuXHQgKi9cblx0cHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZm9sZGVyIHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGZvbGRlciAobXVzdCBpbmNsdWRlIHtAbGluayBDbWlzLk5BTUV9KS5cblx0ICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQge0BsaW5rIEZvbGRlcn0gb2JqZWN0LlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHdyaXRlIGFjY2VzcyBpcyBub3QgYWxsb3dlZC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVGb2xkZXIocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IEZvbGRlciB7XG5cdFx0dmFyIGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dmFyIG1hcEluc3RhbmNlID0gbmV3IEhhc2hNYXAoKTtcblx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVGb2xkZXIobWFwSW5zdGFuY2UpO1xuXHRcdHZhciBmb2xkZXIgPSBuZXcgRm9sZGVyKG5hdGl2ZSwgbnVsbCk7XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRG9jdW1lbnQocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY29udGVudFN0cmVhbTogQ29udGVudFN0cmVhbSwgdmVyc2lvbmluZ1N0YXRlOiBzdHJpbmcpOiBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCBtYXBJbnN0YW5jZSA9IG5ldyBIYXNoTWFwKCk7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXRlID0gQ21pc0ZhY2FkZS5nZXRWZXJzaW9uaW5nU3RhdGUodmVyc2lvbmluZ1N0YXRlKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVEb2N1bWVudChtYXBJbnN0YW5jZSwgY29udGVudFN0cmVhbS5uYXRpdmUsIHN0YXRlKTtcblx0XHRyZXR1cm4gbmV3IERvY3VtZW50KG5hdGl2ZSwgbnVsbCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY2hpbGRyZW4gb2YgdGhpcyBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBvZiBnZW5lcmljIHtAbGluayBDbWlzT2JqZWN0fSB3cmFwcGVycyBmb3IgdGhlIGNoaWxkcmVuLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHJlYWQgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGdldENoaWxkcmVuKCk6IENtaXNPYmplY3RbXSB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9SRUFEKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlJlYWQgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBbXTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRyZW4oKTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlSXRlcmF0b3IgPSBjaGlsZHJlbkluc3RhbmNlLml0ZXJhdG9yKCk7XG5cdFx0d2hpbGUgKGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5oYXNOZXh0KCkpIHtcblx0XHRcdGNvbnN0IGNtaXNPYmplY3RJbnN0YW5jZSA9IGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRjb25zdCBjbWlzT2JqZWN0ID0gbmV3IENtaXNPYmplY3QoY21pc09iamVjdEluc3RhbmNlKTtcblx0XHRcdGNoaWxkcmVuLnB1c2goY21pc09iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGlsZHJlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBmb2xkZXIgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBmb2xkZXIgaXMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGl0IGlzIHRoZSByb290IGZvbGRlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzUm9vdEZvbGRlcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNSb290Rm9sZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGFyZW50IGZvbGRlciBvZiB0aGlzIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIHBhcmVudCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Rm9sZGVyUGFyZW50KCk6IEZvbGRlciB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Rm9sZGVyUGFyZW50KCk7XG5cdFx0cmV0dXJuIG5ldyBGb2xkZXIobmF0aXZlLCBudWxsKTtcblx0fTtcblxuXHQvKipcblx0ICogRGVsZXRlcyB0aGlzIGZvbGRlciAobXVzdCBiZSBlbXB0eSB0byBzdWNjZWVkKS5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJlbmFtZXMgdGhpcyBmb2xkZXIuXG5cdCAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGZvbGRlci5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhpcyBmb2xkZXIgYW5kIGFsbCBpdHMgY29udGVudHMgcmVjdXJzaXZlbHkuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZVRyZWUoKTogdm9pZCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCB1bmlmaWVkT2JqZWN0RGVsZXRlID0gQ21pc0ZhY2FkZS5nZXRVbmlmaWVkT2JqZWN0RGVsZXRlKCk7XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlVHJlZSh0cnVlLCB1bmlmaWVkT2JqZWN0RGVsZXRlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlcidzIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VHlwZSgpOiBUeXBlRGVmaW5pdGlvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0VHlwZSgpO1xuXHRcdHJldHVybiBuZXcgVHlwZURlZmluaXRpb24obmF0aXZlKTtcblx0fVxufVxuXG4vKipcbiAqIENtaXNPYmplY3Qgb2JqZWN0XG4gKiAqIEEgZ2VuZXJpYyB3cmFwcGVyIGZvciBDTUlTIG9iamVjdHMsIHVzZWQgcHJpbWFyaWx5IGZvciBjaGlsZHJlbiBsaXN0cy5cbiAqL1xuY2xhc3MgQ21pc09iamVjdCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBDTUlTIG9iamVjdC4gSGFuZGxlcyBkaWZmZXJlbmNlcyBpbiBuYXRpdmUgQ01JUyBpbXBsZW1lbnRhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgcGF0aC5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Ly90aGlzIGlzIGNhdXNlZCBieSBoYXZpbmcgZGlmZmVyZW50IHVuZGVybHlpbmcgbmF0aXZlIG9iamVjdHMgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cblx0XHRpZiAodGhpcy5uYXRpdmUuZ2V0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGgoKTtcblx0XHR9XG5cblx0XHQvL0FwYWNoZSBDaGVtaXN0cnkgQ21pc09iamVjdCBoYXMgbm8gZ2V0UGF0aCgpIGJ1dCBnZXRQYXRocygpIC0gaHR0cHM6Ly9jaGVtaXN0cnkuYXBhY2hlLm9yZy9kb2NzL2NtaXMtc2FtcGxlcy9zYW1wbGVzL3JldHJpZXZlLW9iamVjdHMvaW5kZXguaHRtbFxuXHRcdGlmICh0aGlzLm5hdGl2ZS5nZXRQYXRocykge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGhzKClbMF07XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQYXRoIG5vdCBmb3VuZCBmb3IgQ21pc09iamVjdCB3aXRoIGlkICR7dGhpcy5nZXRJZCgpfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgb2JqZWN0J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhlIENNSVMgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5kZWxldGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5hbWVzIHRoZSBDTUlTIG9iamVjdC5cblx0ICogQHBhcmFtIG5ld05hbWUgVGhlIG5ldyBuYW1lIGZvciB0aGUgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yZW5hbWUobmV3TmFtZSk7XG5cdH1cblxufVxuXG4vKipcbiAqIE9iamVjdEZhY3Rvcnkgb2JqZWN0XG4gKiAqIFByb3ZpZGVzIG1ldGhvZHMgdG8gY3JlYXRlIGNvbnRlbnQgc3RyZWFtcy5cbiAqL1xuY2xhc3MgT2JqZWN0RmFjdG9yeSB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgY29udGVudCBzdHJlYW0gaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgb3IgdXBkYXRlIGRvY3VtZW50IGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGxlbmd0aCBUaGUgc2l6ZSBvZiB0aGUgY29udGVudCBzdHJlYW0gaW4gYnl0ZXMuXG5cdCAqIEBwYXJhbSBtaW1ldHlwZSBUaGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIGlucHV0IHN0cmVhbSBjb250YWluaW5nIHRoZSBkYXRhLlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29udGVudFN0cmVhbX0gb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIG1pbWV0eXBlOiBzdHJpbmcsIGlucHV0U3RyZWFtOiBzdHJlYW1zLklucHV0U3RyZWFtKTogQ29udGVudFN0cmVhbSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWUsIGxlbmd0aCwgbWltZXR5cGUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG5ldyBDb250ZW50U3RyZWFtKG5hdGl2ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBDb250ZW50U3RyZWFtIG9iamVjdFxuICogKiBSZXByZXNlbnRzIHRoZSBiaW5hcnkgY29udGVudCBzdHJlYW0gb2YgYSBDTUlTIERvY3VtZW50LlxuICovXG5jbGFzcyBDb250ZW50U3RyZWFtIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgSmF2YS1iYWNrZWQgaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBBbiB7QGxpbmsgc3RyZWFtcy5JbnB1dFN0cmVhbX0gd3JhcHBlci5cblx0ICovXG5cdHB1YmxpYyBnZXRTdHJlYW0oKTogc3RyZWFtcy5JbnB1dFN0cmVhbSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0U3RyZWFtKCk7XG5cdFx0cmV0dXJuIG5ldyBzdHJlYW1zLklucHV0U3RyZWFtKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS5cblx0ICogQHJldHVybnMgVGhlIE1JTUUgdHlwZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWltZVR5cGUoKTtcblx0fVxufVxuXG4vKipcbiAqIERvY3VtZW50IG9iamVjdFxuICogKiBSZXByZXNlbnRzIGEgQ01JUyBkb2N1bWVudCBvYmplY3QsIGFsbG93aW5nIG9wZXJhdGlvbnMgbGlrZSByZWFkaW5nIGNvbnRlbnQsIGRlbGV0aW5nLCBhbmQgcmVuYW1pbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50IG5hbWUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXROYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBkZWZpbml0aW9uIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIHRoaXMgZG9jdW1lbnQuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBhbGxvd2VkID0gQ21pc0ZhY2FkZS5pc0FsbG93ZWQodGhpcy5nZXRQYXRoKCksIENtaXMuTUVUSE9EX1dSSVRFKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIldyaXRlIGFjY2VzcyBub3QgYWxsb3dlZCBvbjogXCIgKyB0aGlzLmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5kZWxldGUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluYXJ5IGNvbnRlbnQgc3RyZWFtIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBDb250ZW50U3RyZWFtfSBvYmplY3QsIG9yIGBudWxsYCBpZiB0aGUgZG9jdW1lbnQgaGFzIG5vIGNvbnRlbnQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGVudFN0cmVhbSgpOiBDb250ZW50U3RyZWFtIHwgbnVsbCB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Q29udGVudFN0cmVhbSgpO1xuXHRcdGlmIChuYXRpdmUgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBuZXcgQ29udGVudFN0cmVhbShuYXRpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQncyBjb250ZW50IHN0cmVhbSBpbiBieXRlcy5cblx0ICogQHJldHVybnMgVGhlIHNpemUgaW4gYnl0ZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2l6ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTaXplKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuYW1lcyB0aGlzIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gbmV3TmFtZSBUaGUgbmV3IG5hbWUgZm9yIHRoZSBkb2N1bWVudC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGVmaW5pdGlvbiBvZiBhIENNSVMgb2JqZWN0IHR5cGUgKGUuZy4sIGNtaXM6ZG9jdW1lbnQsIGNtaXM6Zm9sZGVyKS5cbiAqL1xuY2xhc3MgVHlwZURlZmluaXRpb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIG9iamVjdCB0eXBlIChlLmcuLCAnY21pczpkb2N1bWVudCcpLlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gQ21pcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsY0FBeUI7QUFDekIsTUFBTSxhQUFhLEtBQUssS0FBSyxxREFBcUQ7QUFDbEYsTUFBTSxPQUFPLEtBQUssS0FBSyxzQkFBc0I7QUFDN0MsTUFBTSxVQUFVLEtBQUssS0FBSyxtQkFBbUI7QUFFdEMsTUFBTSxLQUFLO0FBQUEsRUFNakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQXVCLGNBQWM7QUFBQTtBQUFBLEVBSXJDO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBdUIsZUFBZTtBQUFBO0FBQUEsRUFJdEM7QUFBQTtBQUFBO0FBQUEsU0FBdUIsT0FBTztBQUFBO0FBQUEsRUFFOUI7QUFBQTtBQUFBLFNBQXVCLFlBQVk7QUFBQTtBQUFBLEVBRW5DO0FBQUE7QUFBQSxTQUF1QixpQkFBaUI7QUFBQTtBQUFBLEVBRXhDO0FBQUE7QUFBQSxTQUF1QixlQUFlO0FBQUE7QUFBQSxFQUV0QztBQUFBO0FBQUEsU0FBdUIsYUFBYTtBQUFBO0FBQUEsRUFFcEM7QUFBQTtBQUFBLFNBQXVCLGdCQUFnQjtBQUFBO0FBQUEsRUFFdkM7QUFBQTtBQUFBLFNBQXVCLG1CQUFtQjtBQUFBO0FBQUEsRUFFMUM7QUFBQTtBQUFBLFNBQXVCLHlCQUF5QjtBQUFBO0FBQUEsRUFFaEQ7QUFBQTtBQUFBLFNBQXVCLGVBQWU7QUFBQTtBQUFBLEVBSXRDO0FBQUE7QUFBQTtBQUFBLFNB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
617
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Ntcy9jbWlzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBDTUlTXG4gKiAqIE5vdGU6IFRoaXMgbW9kdWxlIGlzIHN1cHBvcnRlZCBvbmx5IHdpdGggdGhlIE1vemlsbGEgUmhpbm8gZW5naW5lXG4gKiAqIFByb3ZpZGVzIHN0YXRpYyBhY2Nlc3MgdG8gdGhlIENNSVMgKENvbnRlbnQgTWFuYWdlbWVudCBJbnRlcm9wZXJhYmlsaXR5IFNlcnZpY2VzKSByZXBvc2l0b3J5IHNlc3Npb24gYW5kIHV0aWxpdHkgY29uc3RhbnRzLlxuICovXG5cbmltcG9ydCAqIGFzIHN0cmVhbXMgZnJvbSBcIkBhZXJva2l0L3Nkay9pby9zdHJlYW1zXCI7XG5jb25zdCBDbWlzRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLmNtcy5DbWlzRmFjYWRlXCIpO1xuY29uc3QgR3NvbiA9IEphdmEudHlwZShcImNvbS5nb29nbGUuZ3Nvbi5Hc29uXCIpO1xuY29uc3QgSGFzaE1hcCA9IEphdmEudHlwZShcImphdmEudXRpbC5IYXNoTWFwXCIpO1xuXG5leHBvcnQgY2xhc3MgQ21pcyB7XG5cblx0Ly8gQ09OU1RBTlRTXG5cdC8qKlxuXHQgKiBDTUlTIG1ldGhvZCBjb25zdGFudCBmb3IgcmVhZCBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBNRVRIT0RfUkVBRCA9IFwiUkVBRFwiO1xuXHQvKipcblx0ICogQ01JUyBtZXRob2QgY29uc3RhbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FVEhPRF9XUklURSA9IFwiV1JJVEVcIjtcblxuXHQvLyAtLS0tIEJhc2UgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IE9iamVjdCBuYW1lLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUUgPSBcImNtaXM6bmFtZVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9JRCA9IFwiY21pczpvYmplY3RJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9JRCA9IFwiY21pczpvYmplY3RUeXBlSWRcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEJhc2Ugb2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBCQVNFX1RZUEVfSUQgPSBcImNtaXM6YmFzZVR5cGVJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVXNlciB3aG8gY3JlYXRlZCB0aGUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFURURfQlkgPSBcImNtaXM6Y3JlYXRlZEJ5XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBUaW1lc3RhbXAgb2Ygb2JqZWN0IGNyZWF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFUSU9OX0RBVEUgPSBcImNtaXM6Y3JlYXRpb25EYXRlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBsYXN0IG1vZGlmaWVkIHRoZSBvYmplY3QuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEFTVF9NT0RJRklFRF9CWSA9IFwiY21pczpsYXN0TW9kaWZpZWRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVGltZXN0YW1wIG9mIGxhc3QgbW9kaWZpY2F0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBU1RfTU9ESUZJQ0FUSU9OX0RBVEUgPSBcImNtaXM6bGFzdE1vZGlmaWNhdGlvbkRhdGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IENoYW5nZSB0b2tlbiBmb3Igb2JqZWN0IGNoYW5nZSB0cmFja2luZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDSEFOR0VfVE9LRU4gPSBcImNtaXM6Y2hhbmdlVG9rZW5cIjtcblxuXHQvLyAtLS0tIERvY3VtZW50IENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBJbmRpY2F0ZXMgaWYgdGhlIGRvY3VtZW50IGlzIGltbXV0YWJsZS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19JTU1VVEFCTEUgPSBcImNtaXM6aXNJbW11dGFibGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCB2ZXJzaW9uIGluIHRoZSB2ZXJzaW9uIHNlcmllcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19MQVRFU1RfVkVSU0lPTiA9IFwiY21pczppc0xhdGVzdFZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgYSBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX01BSk9SX1ZFUlNJT04gPSBcImNtaXM6aXNNYWpvclZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX0xBVEVTVF9NQUpPUl9WRVJTSU9OID0gXCJjbWlzOmlzTGF0ZXN0TWFqb3JWZXJzaW9uXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBMYWJlbCBvZiB0aGUgZG9jdW1lbnQgdmVyc2lvbi4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX0xBQkVMID0gXCJjbWlzOnZlcnNpb25MYWJlbFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIHZlcnNpb24gc2VyaWVzLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlNJT05fU0VSSUVTX0lEID0gXCJjbWlzOnZlcnNpb25TZXJpZXNJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSW5kaWNhdGVzIGlmIHRoZSB2ZXJzaW9uIHNlcmllcyBpcyBjaGVja2VkIG91dC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19WRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVCA9IFwiY21pczppc1ZlcnNpb25TZXJpZXNDaGVja2VkT3V0XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBjaGVja2VkIG91dCB0aGUgdmVyc2lvbiBzZXJpZXMuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTl9TRVJJRVNfQ0hFQ0tFRF9PVVRfQlkgPSBcImNtaXM6dmVyc2lvblNlcmllc0NoZWNrZWRPdXRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIGNoZWNrZWQtb3V0IGRvY3VtZW50IG9iamVjdC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVF9JRCA9IFwiY21pczp2ZXJzaW9uU2VyaWVzQ2hlY2tlZE91dElkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2staW4gb3BlcmF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENIRUNLSU5fQ09NTUVOVCA9IFwiY21pczpjaGVja2luQ29tbWVudFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGVuZ3RoIG9mIHRoZSBjb250ZW50IHN0cmVhbSBpbiBieXRlcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9MRU5HVEggPSBcImNtaXM6Y29udGVudFN0cmVhbUxlbmd0aFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9NSU1FX1RZUEUgPSBcImNtaXM6Y29udGVudFN0cmVhbU1pbWVUeXBlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPcmlnaW5hbCBmaWxlIG5hbWUgb2YgdGhlIGNvbnRlbnQgc3RyZWFtLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRFTlRfU1RSRUFNX0ZJTEVfTkFNRSA9IFwiY21pczpjb250ZW50U3RyZWFtRmlsZU5hbWVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IElEIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9JRCA9IFwiY21pczpjb250ZW50U3RyZWFtSWRcIjtcblxuXHQvLyAtLS0tIEZvbGRlciBDTUlTIFByb3BlcnRpZXMgLS0tLVxuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IElEIG9mIHRoZSBwYXJlbnQgZm9sZGVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBUkVOVF9JRCA9IFwiY21pczpwYXJlbnRJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGlzdCBvZiBhbGxvd2VkIG9iamVjdCB0eXBlIElEcyBmb3IgY2hpbGRyZW4uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxMT1dFRF9DSElMRF9PQkpFQ1RfVFlQRV9JRFMgPSBcImNtaXM6YWxsb3dlZENoaWxkT2JqZWN0VHlwZUlkc1wiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogUGF0aCBvZiB0aGUgZm9sZGVyIGluIHRoZSByZXBvc2l0b3J5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBVEggPSBcImNtaXM6cGF0aFwiO1xuXG5cdC8vIC0tLS0gUmVsYXRpb25zaGlwIENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCBzb3VyY2UuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU09VUkNFX0lEID0gXCJjbWlzOnNvdXJjZUlkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCB0YXJnZXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVEFSR0VUX0lEID0gXCJjbWlzOnRhcmdldElkXCI7XG5cblx0Ly8gLS0tLSBQb2xpY3kgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IFRleHQgY29udGVudCBvZiB0aGUgcG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPTElDWV9URVhUID0gXCJjbWlzOnBvbGljeVRleHRcIjtcblxuXHQvLyAtLS0tIFZlcnNpb25pbmcgU3RhdGVzIC0tLS1cblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogTm8gdmVyc2lvbmluZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OSU5HX1NUQVRFX05PTkUgPSBcIm5vbmVcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1ham9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NQUpPUiA9IFwibWFqb3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1pbm9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NSU5PUiA9IFwibWlub3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogRG9jdW1lbnQgaXMgY2hlY2tlZCBvdXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9DSEVDS0VET1VUID0gXCJjaGVja2Vkb3V0XCI7XG5cblx0Ly8gLS0tLSBPYmplY3QgVHlwZXMgLS0tLVxuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogRG9jdW1lbnQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfRE9DVU1FTlQgPSBcImNtaXM6ZG9jdW1lbnRcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEZvbGRlci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9GT0xERVIgPSBcImNtaXM6Zm9sZGVyXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBSZWxhdGlvbnNoaXAuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfUkVMQVRJT05TSElQID0gXCJjbWlzOnJlbGF0aW9uc2hpcFwiO1xuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogUG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9UWVBFX1BPTElDWSA9IFwiY21pczpwb2xpY3lcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEl0ZW0uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfSVRFTSA9IFwiY21pczppdGVtXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBTZWNvbmRhcnkuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfU0VDT05EQVJZID0gXCJjbWlzOnNlY29uZGFyeVwiO1xuXG5cdC8qKlxuXHQgKiBHZXRzIGEgbmV3IENNSVMgc2Vzc2lvbiBpbnN0YW5jZSB0byBpbnRlcmFjdCB3aXRoIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgU2Vzc2lvbn0gaW5zdGFuY2UuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFNlc3Npb24oKTogU2Vzc2lvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gQ21pc0ZhY2FkZS5nZXRTZXNzaW9uKCk7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFjY2VzcyBjb250cm9sIGRlZmluaXRpb25zIGZvciBhIHNwZWNpZmljIHBhdGggYW5kIG1ldGhvZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIENNSVMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBvcGVyYXRpb24gbWV0aG9kIChlLmcuLCB7QGxpbmsgQ21pcy5NRVRIT0RfUkVBRH0sIHtAbGluayBDbWlzLk1FVEhPRF9XUklURX0pLlxuXHQgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYWNjZXNzIGRlZmluaXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRBY2Nlc3NEZWZpbml0aW9ucyhwYXRoOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogQWNjZXNzRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBhY2Nlc3NEZWZpbml0aW9ucyA9IENtaXNGYWNhZGUuZ2V0QWNjZXNzRGVmaW5pdGlvbnMocGF0aCwgbWV0aG9kKTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShuZXcgR3NvbigpLnRvSnNvbihhY2Nlc3NEZWZpbml0aW9ucykpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBhY2Nlc3MgY29udHJvbCBlbnRyeSAoQUNFKSBmb3IgYSBDTUlTIG9iamVjdCwgZGV0YWlsaW5nXG4gKiB3aG8gaGFzIHdoYXQgcGVybWlzc2lvbnMgb24gYSBwYXRoLlxuICovXG5pbnRlcmZhY2UgQWNjZXNzRGVmaW5pdGlvbiB7XG5cdC8qKiBHZXRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFjY2VzcyBkZWZpbml0aW9uLiAqL1xuXHRnZXRJZCgpOiBzdHJpbmc7XG5cdC8qKiBHZXRzIHRoZSBzY29wZSBvZiB0aGUgZGVmaW5pdGlvbiAoZS5nLiwgJ3VzZXInLCAnZ3JvdXAnKS4gKi9cblx0Z2V0U2NvcGUoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgcGF0aCBvZiB0aGUgQ01JUyBvYmplY3QgdGhpcyBkZWZpbml0aW9uIGFwcGxpZXMgdG8uICovXG5cdGdldFBhdGgoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgbWV0aG9kL29wZXJhdGlvbiB0aGlzIGRlZmluaXRpb24gYXBwbGllcyB0byAoZS5nLiwgJ1JFQUQnLCAnV1JJVEUnKS4gKi9cblx0Z2V0TWV0aG9kKCk6IHN0cmluZztcblx0LyoqIEdldHMgdGhlIHNlY3VyaXR5IHJvbGUgKGUuZy4sICdBZG1pbmlzdHJhdG9yJywgJ1ZpZXdlcicpLiAqL1xuXHRnZXRSb2xlKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXNzaW9uIG9iamVjdFxuICogKiBSZXByZXNlbnRzIGFuIGFjdGl2ZSBjb25uZWN0aW9uIHRvIGEgQ01JUyByZXBvc2l0b3J5LCB1c2VkIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBDTUlTIG9wZXJhdGlvbnMuXG4gKi9cbmNsYXNzIFNlc3Npb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IHRoaXMgc2Vzc2lvbiBpcyBjb25uZWN0ZWQgdG8uXG5cdCAqIEByZXR1cm5zIFJlcG9zaXRvcnkgbWV0YWRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UmVwb3NpdG9yeUluZm8oKTogUmVwb3NpdG9yeUluZm8ge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJlcG9zaXRvcnlJbmZvKCk7XG5cdFx0cmV0dXJuIG5ldyBSZXBvc2l0b3J5SW5mbyhuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUaGUgcm9vdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Um9vdEZvbGRlcigpOiBGb2xkZXIge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJvb3RGb2xkZXIoKTtcblx0XHRyZXR1cm4gbmV3IEZvbGRlcihuYXRpdmUsIG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG9iamVjdCBmYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgQ01JUyBvYmplY3RzIGxpa2UgQ29udGVudFN0cmVhbS5cblx0ICogQHJldHVybnMgQW4ge0BsaW5rIE9iamVjdEZhY3Rvcnl9IGluc3RhbmNlLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEZhY3RvcnkoKTogT2JqZWN0RmFjdG9yeSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0RmFjdG9yeSgpO1xuXHRcdHJldHVybiBuZXcgT2JqZWN0RmFjdG9yeShuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIENNSVMgb2JqZWN0IChEb2N1bWVudCBvciBGb2xkZXIpIGJ5IGl0cyB1bmlxdWUgSUQuXG5cdCAqIEBwYXJhbSBvYmplY3RJZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50fSBvciB7QGxpbmsgRm9sZGVyfSBpbnN0YW5jZS5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgb2JqZWN0IHR5cGUgaXMgdW5zdXBwb3J0ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T2JqZWN0KG9iamVjdElkOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3Qgb2JqZWN0SW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRPYmplY3Qob2JqZWN0SWQpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgbnVsbCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBudWxsKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgQ01JUyBvYmplY3QgKERvY3VtZW50IG9yIEZvbGRlcikgYnkgaXRzIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBvYmplY3QgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4sIFwiL3BhdGgvdG8vb2JqZWN0XCIpLlxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBEb2N1bWVudH0gb3Ige0BsaW5rIEZvbGRlcn0gaW5zdGFuY2UuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgcmVhZCBhY2Nlc3MgaXMgbm90IGFsbG93ZWQgb3IgdGhlIG9iamVjdCB0eXBlIGlzIHVuc3VwcG9ydGVkLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEJ5UGF0aChwYXRoOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHBhdGgsIENtaXMuTUVUSE9EX1JFQUQpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmVhZCBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgcGF0aCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0QnlQYXRoKHBhdGgpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgcGF0aCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBwYXRoKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGZvbGRlciBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHkgYmFzZWQgb24gYSBwYXRoLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXRcblx0ICogY3JlYXRlcyBhbGwgbm9uLWV4aXN0ZW50IHBhcmVudCBmb2xkZXJzLlxuXHQgKiBFeGFtcGxlOiBgY3JlYXRlRm9sZGVyKFwiL25ldy9wYXRoL3N0cnVjdHVyZVwiKWBcblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCAob3IgZXhpc3RpbmcpIGlubmVybW9zdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRm9sZGVyKGxvY2F0aW9uOiBzdHJpbmcpOiBGb2xkZXIge1xuXHRcdGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMSwgbG9jYXRpb24ubGVuZ3RoKTtcblx0XHR9XG5cdFx0aWYgKGxvY2F0aW9uLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgbG9jYXRpb24ubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNlZ21lbnRzID0gbG9jYXRpb24uc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBmb2xkZXIgPSB0aGlzLmdldFJvb3RGb2xkZXIoKTtcblx0XHRmb3IgKGNvbnN0IG5leHQgb2Ygc2VnbWVudHMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFtDbWlzLk9CSkVDVF9UWVBFX0lEXTogQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIsXG5cdFx0XHRcdFtDbWlzLk5BTUVdOiBuZXh0XG5cdFx0XHR9O1xuXHRcdFx0Zm9sZGVyID0gZm9sZGVyLmNyZWF0ZUZvbGRlcihwcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIHBhcmVudCBmb2xkZXIgc3RydWN0dXJlIGV4aXN0cy5cblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBwYXJlbnQgZm9sZGVyIChlLmcuLCBcIi9wYXRoL3RvL2ZvbGRlclwiKS5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVEb2N1bWVudChsb2NhdGlvbjogc3RyaW5nLCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjb250ZW50U3RyZWFtOiBDb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGU6IHN0cmluZyk6IERvY3VtZW50IHtcblx0XHRjb25zdCBmb2xkZXIgPSB0aGlzLmNyZWF0ZUZvbGRlcihsb2NhdGlvbik7XG5cdFx0cmV0dXJuIGZvbGRlci5jcmVhdGVEb2N1bWVudChwcm9wZXJ0aWVzLCBjb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGUpO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBSZXBvc2l0b3J5SW5mbyBvYmplY3RcbiAqICogUHJvdmlkZXMgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbm5lY3RlZCBDTUlTIHJlcG9zaXRvcnkuXG4gKi9cbmNsYXNzIFJlcG9zaXRvcnlJbmZvIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcG9zaXRvcnkuXG5cdCAqIEByZXR1cm5zIFRoZSByZXBvc2l0b3J5IElELlxuXHQgKi9cblx0cHVibGljIGdldElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cblx0ICogQHJldHVybnMgVGhlIHJlcG9zaXRvcnkgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxufVxuXG4vKipcbiAqIEZvbGRlciBvYmplY3RcbiAqICogUmVwcmVzZW50cyBhIENNSVMgZm9sZGVyIG9iamVjdCwgYWxsb3dpbmcgb3BlcmF0aW9ucyBsaWtlIGNyZWF0aW5nIGNoaWxkcmVuLCBkZWxldGluZywgYW5kIHJlbmFtaW5nLlxuICovXG5leHBvcnQgY2xhc3MgRm9sZGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBuYW1lLlxuXHQgKi9cblx0cHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZm9sZGVyIHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGZvbGRlciAobXVzdCBpbmNsdWRlIHtAbGluayBDbWlzLk5BTUV9KS5cblx0ICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQge0BsaW5rIEZvbGRlcn0gb2JqZWN0LlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHdyaXRlIGFjY2VzcyBpcyBub3QgYWxsb3dlZC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVGb2xkZXIocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IEZvbGRlciB7XG5cdFx0dmFyIGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dmFyIG1hcEluc3RhbmNlID0gbmV3IEhhc2hNYXAoKTtcblx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVGb2xkZXIobWFwSW5zdGFuY2UpO1xuXHRcdHZhciBmb2xkZXIgPSBuZXcgRm9sZGVyKG5hdGl2ZSwgbnVsbCk7XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRG9jdW1lbnQocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY29udGVudFN0cmVhbTogQ29udGVudFN0cmVhbSwgdmVyc2lvbmluZ1N0YXRlOiBzdHJpbmcpOiBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCBtYXBJbnN0YW5jZSA9IG5ldyBIYXNoTWFwKCk7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXRlID0gQ21pc0ZhY2FkZS5nZXRWZXJzaW9uaW5nU3RhdGUodmVyc2lvbmluZ1N0YXRlKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVEb2N1bWVudChtYXBJbnN0YW5jZSwgY29udGVudFN0cmVhbS5uYXRpdmUsIHN0YXRlKTtcblx0XHRyZXR1cm4gbmV3IERvY3VtZW50KG5hdGl2ZSwgbnVsbCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY2hpbGRyZW4gb2YgdGhpcyBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBvZiBnZW5lcmljIHtAbGluayBDbWlzT2JqZWN0fSB3cmFwcGVycyBmb3IgdGhlIGNoaWxkcmVuLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHJlYWQgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGdldENoaWxkcmVuKCk6IENtaXNPYmplY3RbXSB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9SRUFEKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlJlYWQgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBbXTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRyZW4oKTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlSXRlcmF0b3IgPSBjaGlsZHJlbkluc3RhbmNlLml0ZXJhdG9yKCk7XG5cdFx0d2hpbGUgKGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5oYXNOZXh0KCkpIHtcblx0XHRcdGNvbnN0IGNtaXNPYmplY3RJbnN0YW5jZSA9IGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRjb25zdCBjbWlzT2JqZWN0ID0gbmV3IENtaXNPYmplY3QoY21pc09iamVjdEluc3RhbmNlKTtcblx0XHRcdGNoaWxkcmVuLnB1c2goY21pc09iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGlsZHJlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBmb2xkZXIgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBmb2xkZXIgaXMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGl0IGlzIHRoZSByb290IGZvbGRlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzUm9vdEZvbGRlcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNSb290Rm9sZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGFyZW50IGZvbGRlciBvZiB0aGlzIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIHBhcmVudCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Rm9sZGVyUGFyZW50KCk6IEZvbGRlciB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Rm9sZGVyUGFyZW50KCk7XG5cdFx0cmV0dXJuIG5ldyBGb2xkZXIobmF0aXZlLCBudWxsKTtcblx0fTtcblxuXHQvKipcblx0ICogRGVsZXRlcyB0aGlzIGZvbGRlciAobXVzdCBiZSBlbXB0eSB0byBzdWNjZWVkKS5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJlbmFtZXMgdGhpcyBmb2xkZXIuXG5cdCAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGZvbGRlci5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhpcyBmb2xkZXIgYW5kIGFsbCBpdHMgY29udGVudHMgcmVjdXJzaXZlbHkuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZVRyZWUoKTogdm9pZCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCB1bmlmaWVkT2JqZWN0RGVsZXRlID0gQ21pc0ZhY2FkZS5nZXRVbmlmaWVkT2JqZWN0RGVsZXRlKCk7XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlVHJlZSh0cnVlLCB1bmlmaWVkT2JqZWN0RGVsZXRlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlcidzIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VHlwZSgpOiBUeXBlRGVmaW5pdGlvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0VHlwZSgpO1xuXHRcdHJldHVybiBuZXcgVHlwZURlZmluaXRpb24obmF0aXZlKTtcblx0fVxufVxuXG4vKipcbiAqIENtaXNPYmplY3Qgb2JqZWN0XG4gKiAqIEEgZ2VuZXJpYyB3cmFwcGVyIGZvciBDTUlTIG9iamVjdHMsIHVzZWQgcHJpbWFyaWx5IGZvciBjaGlsZHJlbiBsaXN0cy5cbiAqL1xuY2xhc3MgQ21pc09iamVjdCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBDTUlTIG9iamVjdC4gSGFuZGxlcyBkaWZmZXJlbmNlcyBpbiBuYXRpdmUgQ01JUyBpbXBsZW1lbnRhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgcGF0aC5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Ly90aGlzIGlzIGNhdXNlZCBieSBoYXZpbmcgZGlmZmVyZW50IHVuZGVybHlpbmcgbmF0aXZlIG9iamVjdHMgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cblx0XHRpZiAodGhpcy5uYXRpdmUuZ2V0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGgoKTtcblx0XHR9XG5cblx0XHQvL0FwYWNoZSBDaGVtaXN0cnkgQ21pc09iamVjdCBoYXMgbm8gZ2V0UGF0aCgpIGJ1dCBnZXRQYXRocygpIC0gaHR0cHM6Ly9jaGVtaXN0cnkuYXBhY2hlLm9yZy9kb2NzL2NtaXMtc2FtcGxlcy9zYW1wbGVzL3JldHJpZXZlLW9iamVjdHMvaW5kZXguaHRtbFxuXHRcdGlmICh0aGlzLm5hdGl2ZS5nZXRQYXRocykge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGhzKClbMF07XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQYXRoIG5vdCBmb3VuZCBmb3IgQ21pc09iamVjdCB3aXRoIGlkICR7dGhpcy5nZXRJZCgpfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgb2JqZWN0J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhlIENNSVMgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5kZWxldGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5hbWVzIHRoZSBDTUlTIG9iamVjdC5cblx0ICogQHBhcmFtIG5ld05hbWUgVGhlIG5ldyBuYW1lIGZvciB0aGUgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yZW5hbWUobmV3TmFtZSk7XG5cdH1cblxufVxuXG4vKipcbiAqIE9iamVjdEZhY3Rvcnkgb2JqZWN0XG4gKiAqIFByb3ZpZGVzIG1ldGhvZHMgdG8gY3JlYXRlIGNvbnRlbnQgc3RyZWFtcy5cbiAqL1xuY2xhc3MgT2JqZWN0RmFjdG9yeSB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgY29udGVudCBzdHJlYW0gaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgb3IgdXBkYXRlIGRvY3VtZW50IGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGxlbmd0aCBUaGUgc2l6ZSBvZiB0aGUgY29udGVudCBzdHJlYW0gaW4gYnl0ZXMuXG5cdCAqIEBwYXJhbSBtaW1ldHlwZSBUaGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIGlucHV0IHN0cmVhbSBjb250YWluaW5nIHRoZSBkYXRhLlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29udGVudFN0cmVhbX0gb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIG1pbWV0eXBlOiBzdHJpbmcsIGlucHV0U3RyZWFtOiBzdHJlYW1zLklucHV0U3RyZWFtKTogQ29udGVudFN0cmVhbSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWUsIGxlbmd0aCwgbWltZXR5cGUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG5ldyBDb250ZW50U3RyZWFtKG5hdGl2ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBDb250ZW50U3RyZWFtIG9iamVjdFxuICogKiBSZXByZXNlbnRzIHRoZSBiaW5hcnkgY29udGVudCBzdHJlYW0gb2YgYSBDTUlTIERvY3VtZW50LlxuICovXG5jbGFzcyBDb250ZW50U3RyZWFtIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgSmF2YS1iYWNrZWQgaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBBbiB7QGxpbmsgc3RyZWFtcy5JbnB1dFN0cmVhbX0gd3JhcHBlci5cblx0ICovXG5cdHB1YmxpYyBnZXRTdHJlYW0oKTogc3RyZWFtcy5JbnB1dFN0cmVhbSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0U3RyZWFtKCk7XG5cdFx0cmV0dXJuIG5ldyBzdHJlYW1zLklucHV0U3RyZWFtKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS5cblx0ICogQHJldHVybnMgVGhlIE1JTUUgdHlwZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWltZVR5cGUoKTtcblx0fVxufVxuXG4vKipcbiAqIERvY3VtZW50IG9iamVjdFxuICogKiBSZXByZXNlbnRzIGEgQ01JUyBkb2N1bWVudCBvYmplY3QsIGFsbG93aW5nIG9wZXJhdGlvbnMgbGlrZSByZWFkaW5nIGNvbnRlbnQsIGRlbGV0aW5nLCBhbmQgcmVuYW1pbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50IG5hbWUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXROYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBkZWZpbml0aW9uIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIHRoaXMgZG9jdW1lbnQuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBhbGxvd2VkID0gQ21pc0ZhY2FkZS5pc0FsbG93ZWQodGhpcy5nZXRQYXRoKCksIENtaXMuTUVUSE9EX1dSSVRFKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIldyaXRlIGFjY2VzcyBub3QgYWxsb3dlZCBvbjogXCIgKyB0aGlzLmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5kZWxldGUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluYXJ5IGNvbnRlbnQgc3RyZWFtIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBDb250ZW50U3RyZWFtfSBvYmplY3QsIG9yIGBudWxsYCBpZiB0aGUgZG9jdW1lbnQgaGFzIG5vIGNvbnRlbnQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGVudFN0cmVhbSgpOiBDb250ZW50U3RyZWFtIHwgbnVsbCB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Q29udGVudFN0cmVhbSgpO1xuXHRcdGlmIChuYXRpdmUgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBuZXcgQ29udGVudFN0cmVhbShuYXRpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQncyBjb250ZW50IHN0cmVhbSBpbiBieXRlcy5cblx0ICogQHJldHVybnMgVGhlIHNpemUgaW4gYnl0ZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2l6ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTaXplKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuYW1lcyB0aGlzIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gbmV3TmFtZSBUaGUgbmV3IG5hbWUgZm9yIHRoZSBkb2N1bWVudC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGVmaW5pdGlvbiBvZiBhIENNSVMgb2JqZWN0IHR5cGUgKGUuZy4sIGNtaXM6ZG9jdW1lbnQsIGNtaXM6Zm9sZGVyKS5cbiAqL1xuY2xhc3MgVHlwZURlZmluaXRpb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIG9iamVjdCB0eXBlIChlLmcuLCAnY21pczpkb2N1bWVudCcpLlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gQ21pcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsY0FBeUI7QUFDekIsTUFBTSxhQUFhLEtBQUssS0FBSyxxREFBcUQ7QUFDbEYsTUFBTSxPQUFPLEtBQUssS0FBSyxzQkFBc0I7QUFDN0MsTUFBTSxVQUFVLEtBQUssS0FBSyxtQkFBbUI7QUFFdEMsTUFBTSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1qQixPQUF1QixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJckMsT0FBdUIsZUFBZTtBQUFBO0FBQUE7QUFBQSxFQUl0QyxPQUF1QixPQUFPO0FBQUE7QUFBQSxFQUU5QixPQUF1QixZQUFZO0FBQUE7QUFBQSxFQUVuQyxPQUF1QixpQkFBaUI7QUFBQTtBQUFBLEVBRXhDLE9BQXVCLGVBQWU7QUFBQTtBQUFBLEVBRXRDLE9BQXVCLGFBQWE7QUFBQTtBQUFBLEVBRXBDLE9BQXVCLGdCQUFnQjtBQUFBO0FBQUEsRUFFdkMsT0FBdUIsbUJBQW1CO0FBQUE7QUFBQSxFQUUxQyxPQUF1Qix5QkFBeUI7QUFBQTtBQUFBLEVBRWhELE9BQXVCLGVBQWU7QUFBQTtBQUFBO0FBQUEsRUFJdEMsT0FBdUIsZUFBZTtBQUFBO0FBQUEsRUFFdEMsT0FBdUIsb0JBQW9CO0FBQUE7QUFBQSxFQUUzQyxPQUF1QixtQkFBbUI7QUFBQTtBQUFBLEVBRTFDLE9BQXVCLDBCQUEwQjtBQUFBO0FBQUEsRUFFakQsT0FB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