@sinequa/assistant 3.9.5 → 3.9.6-rc1

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 (69) hide show
  1. package/chat/chat-message/chat-message.component.d.ts +17 -25
  2. package/chat/chat-message/i18n/de.json +11 -0
  3. package/chat/chat-reference/chat-reference.component.d.ts +18 -8
  4. package/chat/chat-reference/i18n/de.json +4 -0
  5. package/chat/chat-settings-v3/i18n/de.json +14 -0
  6. package/chat/chat.component.d.ts +2 -1
  7. package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +2 -3
  8. package/chat/debug-message/i18n/de.json +3 -0
  9. package/chat/dialogs/i18n/de.json +19 -0
  10. package/chat/directives/copy-to-clipboard.directive.d.ts +8 -0
  11. package/chat/documents-upload/document-list/document-list.component.d.ts +4 -9
  12. package/chat/documents-upload/document-overview/document-overview.component.d.ts +3 -17
  13. package/chat/documents-upload/document-upload/document-upload.component.d.ts +3 -8
  14. package/chat/documents-upload/documents-upload.service.d.ts +7 -16
  15. package/chat/documents-upload/i18n/de.json +24 -0
  16. package/chat/i18n/de.json +42 -0
  17. package/chat/markdown-it-plugins/code-block.plugin.d.ts +2 -0
  18. package/chat/markdown-it-plugins/image-reference.plugin.d.ts +3 -0
  19. package/chat/markdown-it-plugins/link.plugin.d.ts +5 -0
  20. package/chat/markdown-it-plugins/page-reference.plugin.d.ts +3 -0
  21. package/chat/markdown-it-plugins/reference.plugin.d.ts +7 -0
  22. package/chat/public-api.d.ts +2 -1
  23. package/chat/references/i18n/de.json +6 -0
  24. package/chat/references/references.component.d.ts +43 -0
  25. package/chat/saved-chats/i18n/de.json +5 -0
  26. package/chat/services/app.service.d.ts +2 -1
  27. package/chat/services/custom-elements.service.d.ts +13 -0
  28. package/chat/smart-renderer/smart-renderer.d.ts +23 -0
  29. package/chat/token-progress-bar/i18n/de.json +4 -0
  30. package/chat/tooltip/tooltip.directive.d.ts +2 -2
  31. package/chat/types.d.ts +8 -42
  32. package/esm2022/chat/chat-message/chat-message.component.mjs +33 -135
  33. package/esm2022/chat/chat-reference/chat-reference.component.mjs +60 -26
  34. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +1 -1
  35. package/esm2022/chat/chat.component.mjs +47 -12
  36. package/esm2022/chat/chat.service.mjs +3 -2
  37. package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +2 -2
  38. package/esm2022/chat/debug-message/debug-message.service.mjs +4 -7
  39. package/esm2022/chat/directives/copy-to-clipboard.directive.mjs +68 -0
  40. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +21 -22
  41. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +8 -31
  42. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +12 -14
  43. package/esm2022/chat/documents-upload/documents-upload.service.mjs +25 -44
  44. package/esm2022/chat/markdown-it-plugins/code-block.plugin.mjs +14 -0
  45. package/esm2022/chat/markdown-it-plugins/image-reference.plugin.mjs +58 -0
  46. package/esm2022/chat/markdown-it-plugins/link.plugin.mjs +15 -0
  47. package/esm2022/chat/markdown-it-plugins/page-reference.plugin.mjs +60 -0
  48. package/esm2022/chat/markdown-it-plugins/reference.plugin.mjs +68 -0
  49. package/esm2022/chat/public-api.mjs +3 -2
  50. package/esm2022/chat/references/references.component.mjs +293 -0
  51. package/esm2022/chat/saved-chats/saved-chats.component.mjs +4 -3
  52. package/esm2022/chat/saved-chats/saved-chats.service.mjs +9 -12
  53. package/esm2022/chat/services/app.service.mjs +8 -2
  54. package/esm2022/chat/services/assistant-configuration.service.mjs +9 -18
  55. package/esm2022/chat/services/assistant-metadata.service.mjs +3 -3
  56. package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +3 -6
  57. package/esm2022/chat/services/custom-elements.service.mjs +43 -0
  58. package/esm2022/chat/smart-renderer/smart-renderer.mjs +103 -0
  59. package/esm2022/chat/tooltip/tooltip.directive.mjs +9 -9
  60. package/esm2022/chat/types.mjs +2 -5
  61. package/fesm2022/sinequa-assistant-chat.mjs +910 -497
  62. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
  63. package/package.json +4 -6
  64. package/chat/prompt.component.d.ts +0 -25
  65. package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +0 -3
  66. package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +0 -3
  67. package/esm2022/chat/prompt.component.mjs +0 -88
  68. package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +0 -56
  69. package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +0 -57
@@ -100,7 +100,8 @@ export class ChatService {
100
100
  ])),
101
101
  // Map the results of parallel requests to a boolean indicating success
102
102
  map(([models, functions]) => {
103
- const result = !!models && !!functions;
103
+ const result = (models !== undefined && functions !== undefined && !!models && !!functions);
104
+ this.models = models;
104
105
  this.initProcess$.next(result);
105
106
  return result;
106
107
  }),
@@ -599,4 +600,4 @@ export class ChatService {
599
600
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService, decorators: [{
600
601
  type: Injectable
601
602
  }] });
602
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksRUFDSixHQUFHLEVBRUgsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0gsVUFBVSxFQUNYLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLEtBQUssRUFFTCxJQUFJLEVBQ0osWUFBWSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBcUIxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0MsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsNkJBQTZCLEVBQTBDLE1BQU0sNENBQTRDLENBQUM7QUFDbkksT0FBTyxFQUFFLHdCQUF3QixFQUFxQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BILE9BQU8sRUFBRSw4QkFBOEIsRUFBMkMsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2SSxP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LENBQUM7UUFFRixJQUFJLElBQUksS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQ25DLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHO1lBQ1osSUFBSTtZQUNKLE1BQU0sRUFBRTtnQkFDTixHQUFHLFdBQVc7Z0JBQ2QsR0FBRyxPQUFPO2FBQ1g7U0FDRixDQUFBO1FBQ0QsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBbm9CVSxXQUFXO21IQUFYLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gXCJAanN2ZXJzZS90cmFuc2xvY29cIjtcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgZGVmZXIsXG4gIGZpbHRlcixcbiAgZm9ya0pvaW4sXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG4gIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb24gfSBmcm9tIFwiQG1pY3Jvc29mdC9zaWduYWxyXCI7XG5pbXBvcnQge1xuICBBdWRpdCxcbiAgUXVlcnksXG4gIGd1aWQsXG4gIGdsb2JhbENvbmZpZ1xufSBmcm9tIFwiQHNpbmVxdWEvYXRvbWljXCI7XG5cbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hcHAuc2VydmljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgUHJpbmNpcGFsU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3ByaW5jaXBhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NXZWJTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvdXNlci1zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBDaGF0Q29uZmlnLFxuICBDaGF0TWVzc2FnZSxcbiAgQ2hhdFJlc3BvbnNlLFxuICBDaGF0VXNhZ2VNZXRyaWNzLFxuICBEZWJ1Z01lc3NhZ2UsXG4gIERlbGV0ZVNhdmVkQ2hhdFJlc3BvbnNlLFxuICBHbGxtRnVuY3Rpb24sXG4gIEdsbG1Nb2RlbERlc2NyaXB0aW9uLFxuICBLdk9iamVjdCxcbiAgTGlzdE9iamVjdCxcbiAgTWVzc2FnZUhhbmRsZXIsXG4gIFF1b3RhLFxuICBTYXZlZENoYXQsXG4gIFNhdmVkQ2hhdEhpc3RvcnksXG4gIFNhdmVkQ2hhdFJlc3BvbnNlLFxuICBUb2tlbkNvbnN1bXB0aW9uLFxuICBVc2VyVG9rZW5Db25zdW1wdGlvblxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zaWduYWxSLndlYi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRVdGlscyB9IGZyb20gXCIuL3V0aWxzL3V0aWxzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNhdmVkQ2hhdHNTZXJ2aWNlLCBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuc2VydmljZVwiO1xuaW1wb3J0IHsgU2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlLCBTaWduYWxSQ29ubmVjdGlvbk9wZXJhdGlvbkNvbmZpZyB9IGZyb20gXCIuL3NlcnZpY2VzL3NpZ25hbFItY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSwgQXNzaXN0YW50Q29uZmlndXJhdGlvbk9wZXJhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3Npc3RhbnQtY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UsIEFzc2lzdGFudE1ldGFkYXRhT3BlcmF0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC1tZXRhZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UsIEFzc2lzdGFudFRva2Vuc1RyYWNraW5nT3BlcmF0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC10b2tlbnMtdHJhY2tpbmcuc2VydmljZVwiO1xuaW1wb3J0IHsgQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLCBBc3Npc3RhbnRXc0ZyYW1lc0NvbnRleHQgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3Npc3RhbnQtd3MtZnJhbWVzLnNlcnZpY2VcIjsgLy8gQWRkZWRcbmltcG9ydCB7IERlYnVnTWVzc2FnZU9wZXJhdGlvbkNvbmZpZywgRGVidWdNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuL2RlYnVnLW1lc3NhZ2UvZGVidWctbWVzc2FnZS5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCB3ZWJzb2NrZXQgZW5kcG9pbnQuICovXG4gIFdTX1JFUVVFU1RfVVJMOiBzdHJpbmc7XG4gIC8qKiBOYW1lIG9mIHRoZSBhc3Npc3RhbnQgUkVTVCBlbmRwb2ludC4gKi9cbiAgUkVTVF9SRVFVRVNUX1VSTDogc3RyaW5nO1xuICAvKiogU2lnbmFsUiBjb25uZWN0aW9uIGluc3RhbmNlICovXG4gIHB1YmxpYyBjb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKiogRW1pdCB0cnVlIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgcHJvY2VzcyBpcyBkb25lLiAqL1xuICBpbml0UHJvY2VzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIEVtaXQgdHJ1ZSBvbmNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYXNzaXN0YW50IGNvbmZpZyBpcyBkb25lLiAqL1xuICBpbml0Q29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogRW1pdCB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFzc2lzdGFudC4gKi9cbiAgYXNzaXN0YW50Q29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhdENvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdHJ1ZSBpZiB0aGUgdXNlciBoYXMgYmVlbiBvdmVycmlkZGVuLCBmYWxzZSBvdGhlcndpc2UuICovXG4gIHVzZXJPdmVycmlkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBFbWl0IHRydWUgaWYgdGhlIGZldGNoIG9mIGFuIGFzc2lzdGFudCdzIHJlc3BvbnNlIGlzIG9uZ29pbmcgKGl0IGluY2x1ZGVzIFN0cmVhbWluZyBzdGF0dXMgb2YgdGhlIGFzc2lzdGFudCBlbmRwb2ludCBBTkQgc2F2aW5nIHRoZSBkaXNjdXNzaW9uIGlmIHNhdmUgQ2hhdCBpcyBlbmFibGVkKS5cbiAgICogVGhpcyBpcyB1c2VkIHRvIHByZXZlbnQgbXVsdGlwbGUgZmV0Y2hlcyBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBUeXBpY2FsbHksIHRoZXJlIGlzIG5vIHByb2JsZW0gY2hhaW5pbmcgZmV0Y2hlcywgYnV0IHdoZW4gZm9yY2luZyBhIHJlbG9hZCBhZnRlciBxdWVyeSBjaGFuZ2VzIGNhc2VzLCBpdCBjYW4ndCBiZSBhbGxvd2VkIGJlY2F1c2UgaXQgYnJlYWtzIHRoZSB3aG9sZSBidXNpbmVzcyBsb2dpYy5cbiAgKi9cbiAgc3RyZWFtaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogU3RvcmUgdGhlIG1lc3NhZ2VzIGhpc3Rvcnkgb2YgdGhlIGN1cnJlbnQgY2hhdC4gKi9cbiAgY2hhdEhpc3Rvcnk6IENoYXRNZXNzYWdlW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBMaXN0IG9mIG1vZGVscyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci4gKi9cbiAgbW9kZWxzOiBHbGxtTW9kZWxEZXNjcmlwdGlvbltdIHwgdW5kZWZpbmVkO1xuICAvKiogTGlzdCBvZiBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIuICovXG4gIGZ1bmN0aW9uczogR2xsbUZ1bmN0aW9uW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBMaXN0IG9mIHNhdmVkIGNoYXRzLiAqL1xuICBzYXZlZENoYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2F2ZWRDaGF0W10+KFtdKTtcbiAgLyoqIFdoZXRoZXIgdGhlcmUgaXMgYW4gZXJyb3Igd2l0aCBzYXZlZCBjaGF0cy4gKi9cbiAgc2F2ZWRDaGF0c0Vycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogRW1pdCB0aGUgc2F2ZWQgY2hhdCB0byBsb2FkLiAqL1xuICBsb2FkU2F2ZWRDaGF0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2F2ZWRDaGF0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0aGUgcXVvdGEgZWFjaCB0aW1lIHRoZSBjaGF0IGlzIGludm9rZWQuICovXG4gIHF1b3RhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVvdGEgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBFbWl0IHRoZSBjYWxjdWxhdGVkIHVzZXIncyB0b2tlbiBjb25zdW1wdGlvbiBiYXNlZCBvbiB0aGUgcXVvdGEuICovXG4gIHVzZXJUb2tlbkNvbnN1bXB0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlclRva2VuQ29uc3VtcHRpb24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBFbWl0IHRoZSBjaGF0IHVzYWdlIG1ldHJpY3MgZWFjaCB0aW1lIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgcmVzcG9uc2UgaXMgY29tcGxldGVkLiAqL1xuICBjaGF0VXNhZ2VNZXRyaWNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhdFVzYWdlTWV0cmljcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIGNhbGN1bGF0ZWQgY2hhdCdzIHRva2VuIGNvbnN1bXB0aW9uIGJhc2VkIG9uIHRoZSBjaGF0IHVzYWdlIG1ldHJpY3MuICovXG4gIGNoYXRUb2tlbkNvbnN1bXB0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VG9rZW5Db25zdW1wdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdHJ1ZSBpZiBcIkNhbmNlbFRhc2tzXCIgaXMgb25nb2luZy4gKi9cbiAgc3RvcHBpbmdHZW5lcmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogSW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZSBkZWZpbmluZyB0aGUgYXNzaXN0YW50IGluc3RhbmNlLiAqL1xuICBwcml2YXRlIF9jaGF0SW5zdGFuY2VJZDogc3RyaW5nO1xuICAvKiogR2VuZXJhdGVkIEdVSUQgZm9yIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvbiB1c2VkIHRvIHNhdmUvZ2V0L2RlbGV0ZSBpdCBhbmQgaWRlbnRpZnkgYXVkaXQgZXZlbnRzLiAqL1xuICBwcml2YXRlIF9jaGF0SWQ6IHN0cmluZztcblxuICBwdWJsaWMgdXNlclNldHRpbmdzU2VydmljZSA9IGluamVjdChVc2VyU2V0dGluZ3NXZWJTZXJ2aWNlKTtcbiAgcHVibGljIG5vdGlmaWNhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvbnNTZXJ2aWNlKTtcbiAgcHVibGljIGFwcFNlcnZpY2UgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gIHB1YmxpYyBwcmluY2lwYWxTZXJ2aWNlID0gaW5qZWN0KFByaW5jaXBhbFNlcnZpY2UpO1xuICBwdWJsaWMgYXNzaXN0YW50VXRpbHMgPSBpbmplY3QoQXNzaXN0YW50VXRpbHMpO1xuICBwcml2YXRlIHNhdmVkQ2hhdHNTZXJ2aWNlID0gaW5qZWN0KFNhdmVkQ2hhdHNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzaWduYWxSQ29ubmVjdGlvblNlcnZpY2UgPSBpbmplY3QoU2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgYXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlID0gaW5qZWN0KEFzc2lzdGFudE1ldGFkYXRhU2VydmljZSk7XG4gIHByaXZhdGUgYXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlID0gaW5qZWN0KEFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZSk7XG4gIHByaXZhdGUgZGVidWdNZXNzYWdlU2VydmljZSA9IGluamVjdChEZWJ1Z01lc3NhZ2VTZXJ2aWNlKTtcbiAgLy8gSW5qZWN0IHRoZSBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UgdXNpbmcgJ25ldycgdG8gZW5zdXJlIGEgc2VwYXJhdGUgbG9jYWwgaW5zdGFuY2UgZm9yIGVhY2ggQ2hhdFNlcnZpY2UgaW5zdGFuY2VcbiAgcHJpdmF0ZSBhc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UgPSBuZXcoQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbG9jbyA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYXNzaXN0YW50IHByb2Nlc3MuXG4gICAqIEl0IGluY2x1ZGVzIGJ1aWxkaW5nIGFuZCBzdGFydGluZyBhIGNvbm5lY3Rpb24sIGV4ZWN1dGluZyBwYXJhbGxlbCByZXF1ZXN0cyBmb3IgbW9kZWxzIGFuZCBmdW5jdGlvbnMsIGFuZCBoYW5kbGluZyBlcnJvcnMgZHVyaW5nIHRoZSBwcm9jZXNzLlxuICAgKiDimqDvuI8gVGhpcyBtZXRob2QgTVVTVCBiZSBjYWxsZWQgT05MWSBpZiB0aGUgdXNlciBpcyBsb2dnZWRJbiBhbmQgb25jZSB3aGVuIHRoZSBhc3Npc3RhbnQgaXMgaW5pdGlhbGl6ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGU8Ym9vbGVhbj4gaW5kaWNhdGluZyB0aGUgc3VjY2VzcyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy5cbiAgICovXG4gIGluaXQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgLy8gRW5zdXJlIGFsbCBsb2dpYyBpcyBleGVjdXRlZCB3aGVuIHN1YnNjcmliZWQgdG8gdGhlIG9ic2VydmFibGVcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4ge1xuICAgICAgdGhpcy5faW5pdEFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlKCk7XG4gICAgICByZXR1cm4gZnJvbSh0aGlzLmluaXRDaGF0Q29uZmlnKCkpO1xuICAgIH0pLnBpcGUoXG4gICAgICAvLyBXYWl0IGZvciB0aGUgY29uZmlndXJhdGlvbiB0byBiZSBpbml0aWFsaXplZFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuaW5pdENvbmZpZyQucGlwZShmaWx0ZXIoQm9vbGVhbiksIHRha2UoMSkpKSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0V1NSZXF1ZXN0c1VybCgpO1xuICAgICAgICB0aGlzLmdldFJFU1RSZXF1ZXN0c1VybCgpO1xuICAgICAgICB0aGlzLl9pbml0QXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2luaXRBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5faW5pdFNhdmVkQ2hhdHNTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2luaXREZWJ1Z01lc3NhZ2VTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2luaXRTaWduYWxSQ29ubmVjdGlvblNlcnZpY2UoKTtcbiAgICAgIH0pLFxuICAgICAgLy8gQnVpbGQgYW5kIHN0YXJ0IHRoZSBTaWduYWxSIGNvbm5lY3Rpb25cbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmJ1aWxkQ29ubmVjdGlvbigpKSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlIGhlcmUsIG5vdyB0aGF0ICd0aGlzLmNvbm5lY3Rpb24nIGlzIHNldFxuICAgICAgICB0aGlzLl9pbml0QXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuaW5pdE1lc3NhZ2VIYW5kbGVycygpO1xuICAgICAgfSksXG4gICAgICAvLyBTdGFydCB0aGUgY29ubmVjdGlvblxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc3RhcnRDb25uZWN0aW9uKCkpLFxuICAgICAgLy8gRmV0Y2ggbWV0YWRhdGEgaW4gcGFyYWxsZWxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICBmb3JrSm9pbihbXG4gICAgICAgICAgdGhpcy5saXN0TW9kZWxzKCksXG4gICAgICAgICAgdGhpcy5saXN0RnVuY3Rpb25zKClcbiAgICAgICAgXSlcbiAgICAgICksXG4gICAgICAvLyBNYXAgdGhlIHJlc3VsdHMgb2YgcGFyYWxsZWwgcmVxdWVzdHMgdG8gYSBib29sZWFuIGluZGljYXRpbmcgc3VjY2Vzc1xuICAgICAgbWFwKChbbW9kZWxzLCBmdW5jdGlvbnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICEhbW9kZWxzICYmICEhZnVuY3Rpb25zO1xuICAgICAgICB0aGlzLmluaXRQcm9jZXNzJC5uZXh0KHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSxcbiAgICAgIC8vIEFueSBlcnJvcnMgZHVyaW5nIHRoZSBwcm9jZXNzIGFyZSBjYXVnaHQsIGxvZ2dlZCwgYW5kIHJlLXRocm93biB0byBwcm9wYWdhdGUgdGhlIGVycm9yIGZ1cnRoZXJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgICB0YWtlKDEpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgdGhlIGVuZHBvaW50IHRvIHVzZSBmb3IgdGhlIHdlYnNvY2tldCByZXF1ZXN0c1xuICAgKiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYXBwIGNvbmZpZ1xuICAgKi9cbiAgZ2V0V1NSZXF1ZXN0c1VybCgpIHtcbiAgICB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdTUmVxdWVzdHNVcmwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgdGhlIGVuZHBvaW50IHRvIHVzZSBmb3IgdGhlIGh0dHAgcmVxdWVzdHNcbiAgICogSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFwcCBjb25maWdcbiAgICovXG4gIGdldFJFU1RSZXF1ZXN0c1VybCgpIHtcbiAgICB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFJFU1RSZXF1ZXN0c1VybCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBTYXZlZENoYXRzU2VydmljZSB3aXRoIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0aGUgYFNhdmVkQ2hhdHNTZXJ2aWNlYCBieSBwcm92aWRpbmcgaXQgd2l0aCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIChgU2F2ZWRDaGF0c09wZXJhdGlvbkNvbmZpZ2ApIHRoYXQgaW5jbHVkZXMgdmFyaW91cyBjYWxsYmFja3MgYW5kIHByb3BlcnRpZXMgcmVxdWlyZWRcbiAgICogZm9yIGl0cyBvcGVyYXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiB3aWxsIG9ubHkgcHJvY2VlZCBpZiBib3RoIGBhc3Npc3RhbnRDb25maWckYCBhbmRcbiAgICogYFJFU1RfUkVRVUVTVF9VUkxgIGFyZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBpbmNsdWRlczpcbiAgICogLSBBcHBsaWNhdGlvbiBuYW1lIHJldHJpZXZhbC5cbiAgICogLSBJbnN0YW5jZSBJRCByZXRyaWV2YWwuXG4gICAqIC0gUkVTVCBBUEkgVVJMIHJldHJpZXZhbC5cbiAgICogLSBEZWJ1ZyBmbGFnIHJldHJpZXZhbC5cbiAgICogLSBDaGF0IElEIGZvciBuZXcgc2F2ZXMuXG4gICAqIC0gU2F2ZWQgY2hhdHMgZW5hYmxlbWVudCBjaGVjay5cbiAgICogLSBNZXRob2RzIGZvciBzZXR0aW5nIGEgc2F2ZWQgY2hhdCBJRCwgdXBkYXRpbmcgdGhlIHNhdmVkIGNoYXRzIGxpc3QsIGFuZCBnZW5lcmF0aW5nIGF1ZGl0IGV2ZW50cy5cbiAgICpcbiAgICogSWYgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBhcmUgbm90IHJlYWR5LCBhbiBlcnJvciBpcyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pbml0U2F2ZWRDaGF0c1NlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwpIHtcbiAgICAgIGNvbnN0IHNhdmVkQ2hhdHNPcENvbmZpZzogU2F2ZWRDaGF0c09wZXJhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgZ2V0QXBwTmFtZTogKCkgPT4gdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICAgIGdldEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuY2hhdEluc3RhbmNlSWQsXG4gICAgICAgIGdldFJlc3RVcmw6ICgpID0+IHRoaXMuUkVTVF9SRVFVRVNUX1VSTCxcbiAgICAgICAgZ2V0RGVidWdGbGFnOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMuZGVidWcsXG4gICAgICAgIGlzU2F2ZWRDaGF0c0VuYWJsZWQ6ICgpID0+ICEhdGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlPy5zYXZlZENoYXRTZXR0aW5ncy5lbmFibGVkLFxuICAgICAgICBzZXRTYXZlZENoYXRzRXJyb3JTdGF0dXM6IChoYXNFcnJvcikgPT4gdGhpcy5zYXZlZENoYXRzRXJyb3IkLm5leHQoaGFzRXJyb3IpLFxuICAgICAgICB1cGRhdGVTYXZlZENoYXRzTGlzdDogKGNoYXRzKSA9PiB0aGlzLnNhdmVkQ2hhdHMkLm5leHQoY2hhdHMpLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuaW5pdChzYXZlZENoYXRzT3BDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIGlkZWFsbHkgbm90IGhhcHBlbiBpZiBpbml0IG9yZGVyIGlzIGNvcnJlY3RcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBTYXZlZENoYXRzU2VydmljZTogYXNzaXN0YW50Q29uZmlnIG9yIFJFU1RfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFNpZ25hbFIgY29ubmVjdGlvbiBzZXJ2aWNlIHdpdGggdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBlbnN1cmVzIHRoYXQgdGhlIFNpZ25hbFIgY29ubmVjdGlvbiBzZXJ2aWNlIGlzIHByb3Blcmx5IHNldCB1cFxuICAgKiBieSBwcm92aWRpbmcgaXQgd2l0aCB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHN1Y2ggYXMgdGhlIFdlYlNvY2tldFxuICAgKiByZXF1ZXN0IFVSTCBhbmQgYXNzaXN0YW50IGNvbmZpZ3VyYXRpb24uIEl0IGFsc28gbWFuYWdlcyB0aGUgU2lnbmFsUiBodWIgY29ubmVjdGlvblxuICAgKiBpbnN0YW5jZS5cbiAgICpcbiAgICogUHJlY29uZGl0aW9uczpcbiAgICogLSBgYXNzaXN0YW50Q29uZmlnJC52YWx1ZWAgbXVzdCBiZSBhdmFpbGFibGUuXG4gICAqIC0gYFdTX1JFUVVFU1RfVVJMYCBtdXN0IGJlIGRlZmluZWQuXG4gICAqXG4gICAqIElmIHRoZXNlIHByZWNvbmRpdGlvbnMgYXJlIG5vdCBtZXQsIGFuIGVycm9yIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRTaWduYWxSQ29ubmVjdGlvblNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLldTX1JFUVVFU1RfVVJMKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hbFJPcENvbmZpZzogU2lnbmFsUkNvbm5lY3Rpb25PcGVyYXRpb25Db25maWcgPSB7XG4gICAgICAgICAgICBnZXRXc1JlcXVlc3RVcmw6ICgpID0+IHRoaXMuV1NfUkVRVUVTVF9VUkwsXG4gICAgICAgICAgICBnZXRBc3Npc3RhbnRDb25maWdWYWx1ZTogKCkgPT4gdGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlLFxuICAgICAgICAgICAgZ2V0SHViQ29ubmVjdGlvbjogKCkgPT4gdGhpcy5jb25uZWN0aW9uLCAvLyBVc2luZyBnZXRIdWJDb25uZWN0aW9uIGFzIHBlciB1c2VyJ3MgZmlsZVxuICAgICAgICAgICAgc2V0SHViQ29ubmVjdGlvbjogKGNvbm4pID0+IHsgdGhpcy5jb25uZWN0aW9uID0gY29ubjsgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5pbml0KHNpZ25hbFJPcENvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBub3QgaGFwcGVuIGlmIGluaXQgb3JkZXIgaXMgY29ycmVjdFxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgU2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlOiBhc3Npc3RhbnRDb25maWcgb3IgV1NfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFzc2lzdGFudCBDb25maWd1cmF0aW9uIFNlcnZpY2Ugd2l0aCB0aGUgbmVjZXNzYXJ5IG9wZXJhdGlvbiBjb250ZXh0LlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQgYnkgcHJvdmlkaW5nIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnNcbiAgICogYW5kIHN0YXRlIG1hbmFnZW1lbnQgbWVjaGFuaXNtcyByZXF1aXJlZCBmb3IgdGhlIGFzc2lzdGFudCdzIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogVGhlIG9wZXJhdGlvbiBjb250ZXh0IGluY2x1ZGVzOlxuICAgKiAtIE1ldGhvZHMgdG8gcmV0cmlldmUgY2hhdCBpbnN0YW5jZSBhbmQgY2hhdCBJRHMuXG4gICAqIC0gTWV0aG9kcyB0byBnZXQgYW5kIHNldCBhc3Npc3RhbnQgY29uZmlndXJhdGlvbiB2YWx1ZXMuXG4gICAqIC0gTWV0aG9kcyB0byBzZXQgV2ViU29ja2V0IGFuZCBSRVNUIHJlcXVlc3QgVVJMcy5cbiAgICogLSBNZXRob2RzIHRvIHVwZGF0ZSB0aGUgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbiBzdGF0dXMuXG4gICAqIC0gQSBtZXRob2QgdG8gZ2VuZXJhdGUgYXVkaXQgZXZlbnRzIGZvciB0cmFja2luZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdEFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlKCkge1xuICAgIGNvbnN0IGNvbmZpZ09wQ29udGV4dDogQXNzaXN0YW50Q29uZmlndXJhdGlvbk9wZXJhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGdldENoYXRJbnN0YW5jZUlkOiAoKSA9PiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgICBnZXRDaGF0SWQ6ICgpID0+IHRoaXMuY2hhdElkLFxuICAgICAgICBnZXRBc3Npc3RhbnRDb25maWdWYWx1ZTogKCkgPT4gdGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlLFxuICAgICAgICBzZXRXU1JlcXVlc3RzVXJsOiAodXJsKSA9PiB0aGlzLldTX1JFUVVFU1RfVVJMID0gdXJsLFxuICAgICAgICBzZXRSRVNUUmVxdWVzdHNVcmw6ICh1cmwpID0+IHRoaXMuUkVTVF9SRVFVRVNUX1VSTCA9IHVybCxcbiAgICAgICAgc2V0QXNzaXN0YW50Q29uZmlnOiAoY29uZmlnKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQubmV4dChjb25maWcpLFxuICAgICAgICBzZXRJbml0Q29uZmlnU3RhdHVzOiAoc3RhdHVzKSA9PiB0aGlzLmluaXRDb25maWckLm5leHQoc3RhdHVzKSxcbiAgICAgICAgZ2VuZXJhdGVBdWRpdEV2ZW50OiAodHlwZSwgZGV0YWlscywgaWQpID0+IHRoaXMuZ2VuZXJhdGVBdWRpdEV2ZW50KHR5cGUsIGRldGFpbHMsIGlkKVxuICAgIH07XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5pbml0KGNvbmZpZ09wQ29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFzc2lzdGFudE1ldGFkYXRhU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgYGFzc2lzdGFudENvbmZpZyRgIHZhbHVlIGFuZCBgUkVTVF9SRVFVRVNUX1VSTGAgYXJlIGF2YWlsYWJsZS5cbiAgICogSWYgYm90aCBhcmUgcmVhZHksIGl0IGNyZWF0ZXMgYW4gYEFzc2lzdGFudE1ldGFkYXRhT3BlcmF0aW9uQ29udGV4dGAgb2JqZWN0IGFuZFxuICAgKiBpbml0aWFsaXplcyB0aGUgYGFzc2lzdGFudE1ldGFkYXRhU2VydmljZWAgd2l0aCBpdC4gVGhlIG9wZXJhdGlvbiBjb250ZXh0IHByb3ZpZGVzXG4gICAqIG1ldGhvZHMgdG8gcmV0cmlldmUgdGhlIFJFU1QgVVJMLCBhc3Npc3RhbnQgY29uZmlndXJhdGlvbiwgYW5kIHRvIHNldCBtb2RlbHMgYW5kIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogSWYgdGhlIHJlcXVpcmVkIHZhbHVlcyBhcmUgbm90IHJlYWR5LCBhbiBlcnJvciBpcyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pbml0QXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlKCkge1xuICAgIGlmICh0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUgJiYgdGhpcy5SRVNUX1JFUVVFU1RfVVJMKSB7XG4gICAgICBjb25zdCBtZXRhZGF0YU9wQ29udGV4dDogQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0ID0ge1xuICAgICAgICBnZXRSZXN0VXJsOiAoKSA9PiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwsXG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIHNldE1vZGVsczogKG1vZGVscykgPT4geyB0aGlzLm1vZGVscyA9IG1vZGVsczsgfSxcbiAgICAgICAgc2V0RnVuY3Rpb25zOiAoZnVuY3Rpb25zKSA9PiB7IHRoaXMuZnVuY3Rpb25zID0gZnVuY3Rpb25zOyB9XG4gICAgICB9O1xuICAgICAgdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UuaW5pdChtZXRhZGF0YU9wQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBvciBSRVNUX1JFUVVFU1RfVVJMIG5vdCByZWFkeS5cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBBc3Npc3RhbnQgVG9rZW5zIFRyYWNraW5nIFNlcnZpY2Ugd2l0aCB0aGUgbmVjZXNzYXJ5IG9wZXJhdGlvbiBjb250ZXh0LlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSBzZXJ2aWNlIGJ5IHByb3ZpZGluZyBpdCB3aXRoIGZ1bmN0aW9ucyB0byBtYW5hZ2UgcXVvdGFzLFxuICAgKiB0b2tlbiBjb25zdW1wdGlvbiwgdXNhZ2UgbWV0cmljcywgYW5kIGF1ZGl0IGV2ZW50cywgYXMgd2VsbCBhcyBhY2Nlc3MgdG8gYXNzaXN0YW50IGNvbmZpZ3VyYXRpb25cbiAgICogYW5kIG1vZGVsIHJldHJpZXZhbC5cbiAgICpcbiAgICogVGhlIGluaXRpYWxpemF0aW9uIHdpbGwgb25seSBwcm9jZWVkIGlmIHRoZSBhc3Npc3RhbnQgY29uZmlndXJhdGlvbiBpcyBhdmFpbGFibGUuXG4gICAqIElmIHRoZSBjb25maWd1cmF0aW9uIGlzIG5vdCByZWFkeSwgYW4gZXJyb3IgbWVzc2FnZSBpcyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pbml0QXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlKCkge1xuICAgIGlmICh0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHRva2Vuc09wQ29udGV4dDogQXNzaXN0YW50VG9rZW5zVHJhY2tpbmdPcGVyYXRpb25Db250ZXh0ID0ge1xuICAgICAgICBnZXRBc3Npc3RhbnRDb25maWdWYWx1ZTogKCkgPT4gdGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlLFxuICAgICAgICBzZXRRdW90YTogKHF1b3RhKSA9PiB0aGlzLnF1b3RhJC5uZXh0KHF1b3RhKSxcbiAgICAgICAgc2V0VXNlclRva2VuQ29uc3VtcHRpb246IChjb25zdW1wdGlvbikgPT4gdGhpcy51c2VyVG9rZW5Db25zdW1wdGlvbiQubmV4dChjb25zdW1wdGlvbiksXG4gICAgICAgIHNldENoYXRVc2FnZU1ldHJpY3M6IChtZXRyaWNzKSA9PiB0aGlzLmNoYXRVc2FnZU1ldHJpY3MkLm5leHQobWV0cmljcyksXG4gICAgICAgIHNldENoYXRUb2tlbkNvbnN1bXB0aW9uOiAoY29uc3VtcHRpb24pID0+IHRoaXMuY2hhdFRva2VuQ29uc3VtcHRpb24kLm5leHQoY29uc3VtcHRpb24pLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpLFxuICAgICAgICBnZXRNb2RlbDogKHNlcnZpY2VJZCwgbW9kZWxJZCkgPT4gdGhpcy5nZXRNb2RlbChzZXJ2aWNlSWQsIG1vZGVsSWQpXG4gICAgICB9O1xuICAgICAgdGhpcy5hc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UuaW5pdCh0b2tlbnNPcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgQXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlOiBhc3Npc3RhbnRDb25maWcgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFzc2lzdGFudCBXZWJTb2NrZXQgRnJhbWVzIFNlcnZpY2Ugd2l0aCB0aGUgbmVjZXNzYXJ5IG9wZXJhdGlvbiBjb250ZXh0LlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlIHRvIGZ1bmN0aW9uIHByb3Blcmx5LlxuICAgKiBJdCBlbnN1cmVzIHRoYXQgdGhlIGFzc2lzdGFudCBjb25maWd1cmF0aW9uIGFuZCBjb25uZWN0aW9uIGFyZSBhdmFpbGFibGUgYmVmb3JlIGluaXRpYWxpemluZyB0aGUgc2VydmljZS5cbiAgICpcbiAgICogVGhlIG9wZXJhdGlvbiBjb250ZXh0IHByb3ZpZGVzIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHN0YXRlIG1hbmFnZW1lbnQgbWV0aG9kcywgaW5jbHVkaW5nOlxuICAgKiAtIEFjY2Vzc2luZyB0aGUgYXNzaXN0YW50IGNvbmZpZ3VyYXRpb24sIGNoYXQgaW5zdGFuY2UgSUQsIHNhdmVkIGNoYXQgSUQsIGFuZCBjaGF0IGhpc3RvcnkuXG4gICAqIC0gTWFuYWdpbmcgc3RyZWFtaW5nIGFuZCBzdG9wcGluZyBnZW5lcmF0aW9uIHN0YXR1c2VzLlxuICAgKiAtIFVwZGF0aW5nIHF1b3RhIGFuZCBjaGF0IHVzYWdlIG1ldHJpY3MuXG4gICAqIC0gR2VuZXJhdGluZyBhdWRpdCBldmVudHMuXG4gICAqIC0gTWFuYWdpbmcgc2F2ZWQgY2hhdHMgKGFkZGluZywgdXBkYXRpbmcsIGFuZCBsaXN0aW5nKS5cbiAgICpcbiAgICogSWYgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyAoYGFzc2lzdGFudENvbmZpZyRgIGFuZCBgY29ubmVjdGlvbmApIGFyZSBub3QgcmVhZHksIGFuIGVycm9yIGlzIGxvZ2dlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLmNvbm5lY3Rpb24pIHtcbiAgICAgIGNvbnN0IHdzRnJhbWVzT3BDb250ZXh0OiBBc3Npc3RhbnRXc0ZyYW1lc0NvbnRleHQgPSB7XG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZzogKCkgPT4gdGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlLFxuICAgICAgICBnZXRDaGF0SW5zdGFuY2VJZDogKCkgPT4gdGhpcy5jaGF0SW5zdGFuY2VJZCxcbiAgICAgICAgZ2V0Q2hhdElkOiAoKSA9PiB0aGlzLmNoYXRJZCxcbiAgICAgICAgZ2V0SHViQ29ubmVjdGlvbjogKCkgPT4gdGhpcy5jb25uZWN0aW9uLFxuICAgICAgICBnZXRDaGF0SGlzdG9yeTogKCkgPT4gdGhpcy5jaGF0SGlzdG9yeSxcbiAgICAgICAgc2V0U3RyZWFtaW5nU3RhdHVzOiAoaXNTdHJlYW1pbmcpID0+IHRoaXMuc3RyZWFtaW5nJC5uZXh0KGlzU3RyZWFtaW5nKSxcbiAgICAgICAgc2V0Q2hhdEhpc3Rvcnk6IChoaXN0b3J5KSA9PiB7IHRoaXMuY2hhdEhpc3RvcnkgPSBoaXN0b3J5OyB9LFxuICAgICAgICBzZXRTdG9wcGluZ0dlbmVyYXRpb25TdGF0dXM6IChpc1N0b3BwaW5nKSA9PiB0aGlzLnN0b3BwaW5nR2VuZXJhdGlvbiQubmV4dChpc1N0b3BwaW5nKSxcbiAgICAgICAgc2V0U2F2ZWRDaGF0c0Vycm9yU3RhdHVzOiAoaGFzRXJyb3IpID0+IHRoaXMuc2F2ZWRDaGF0c0Vycm9yJC5uZXh0KGhhc0Vycm9yKSxcbiAgICAgICAgdXBkYXRlUXVvdGE6IChxdW90YSwgcHJvcGFnYXRlRXJyb3IpID0+IHRoaXMudXBkYXRlUXVvdGEocXVvdGEsIHByb3BhZ2F0ZUVycm9yKSxcbiAgICAgICAgdXBkYXRlQ2hhdFVzYWdlTWV0cmljczogKG1ldHJpY3MpID0+IHRoaXMudXBkYXRlQ2hhdFVzYWdlTWV0cmljcyhtZXRyaWNzKSxcbiAgICAgICAgZ2VuZXJhdGVBdWRpdEV2ZW50OiAodHlwZSwgZGV0YWlscywgaWQpID0+IHRoaXMuZ2VuZXJhdGVBdWRpdEV2ZW50KHR5cGUsIGRldGFpbHMsIGlkKSxcbiAgICAgICAgYWRkU2F2ZWRDaGF0OiAoaWQsIG1lc3NhZ2VzKSA9PiB0aGlzLmFkZFNhdmVkQ2hhdChpZCwgbWVzc2FnZXMpLFxuICAgICAgICB1cGRhdGVTYXZlZENoYXQ6IChpZCwgbmFtZSwgbWVzc2FnZXMpID0+IHRoaXMudXBkYXRlU2F2ZWRDaGF0KGlkLCBuYW1lLCBtZXNzYWdlcyksXG4gICAgICAgIGxpc3RTYXZlZENoYXQ6ICgpID0+IHRoaXMubGlzdFNhdmVkQ2hhdCgpLFxuICAgICAgICBpc0V4aXN0aW5nU2F2ZWRDaGF0OiAoaWQpID0+IHRoaXMuaXNFeGlzdGluZ1NhdmVkQ2hhdChpZClcbiAgICAgIH07XG4gICAgICB0aGlzLmFzc2lzdGFudFdzRnJhbWVzU2VydmljZS5pbml0KHdzRnJhbWVzT3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlOiBjb3JlIGRlcGVuZGVuY2llcyBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2luaXREZWJ1Z01lc3NhZ2VTZXJ2aWNlKCkge1xuICAgIGlmICh0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUgJiYgdGhpcy5SRVNUX1JFUVVFU1RfVVJMKSB7XG4gICAgICBjb25zdCBkZWJ1Z01lc3NhZ2VPcENvbnRleHQ6IERlYnVnTWVzc2FnZU9wZXJhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgZ2V0UmVzdFVybDogKCkgPT4gdGhpcy5SRVNUX1JFUVVFU1RfVVJMXG4gICAgICB9O1xuICAgICAgdGhpcy5kZWJ1Z01lc3NhZ2VTZXJ2aWNlLmluaXQoZGVidWdNZXNzYWdlT3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIERlYnVnTWVzc2FnZVNlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBvciBSRVNUX1JFUVVFU1RfVVJMIG5vdCByZWFkeS5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFzc2lzdGFudHMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRBc3Npc3RhbnRzU2V0dGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKi9cbiAgZ2V0IGNoYXRJbnN0YW5jZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYXRJbnN0YW5jZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3QgdGhlIGluc3RhbmNlIElEIG9mIHRoZSBjaGF0IHNlcnZpY2VcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgVGhlIGluc3RhbmNlIElEIG9mIHRoZSBjaGF0IHNlcnZpY2VcbiAgICovXG4gIHNldENoYXRJbnN0YW5jZUlkKGluc3RhbmNlSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NoYXRJbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvbiB3aGljaCBpcyB1c2VkIHRvIHNhdmUvZ2V0L2RlbGV0ZSB0aGUgZGlzY3Vzc2lvbiBhbmQgaWRlbnRpZnkgYXVkaXQgZXZlbnRzXG4gICAqIEByZXR1cm5zIFRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb25cbiAgICovXG4gIGdldCBjaGF0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhdElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIEdVSUQgZm9yIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvbiB3aGljaCBpcyB1c2VkIHRvIHNhdmUvZ2V0L2RlbGV0ZSBpdCBhbmQgaWRlbnRpZnkgYXVkaXQgZXZlbnRzXG4gICAqIEBwYXJhbSBjaGF0SWQgaWYgcHJvdmlkZWQsIGl0IHdpbGwgYmUgY29uc2lkZXJlZCBhcyB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gaWRlbnRpZnkgYXVkaXQgZXZlbnRzXG4gICAqL1xuICBnZW5lcmF0ZUNoYXRJZChjaGF0SWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jaGF0SWQgPSBjaGF0SWQgfHwgZ3VpZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNoYXQgY29uZmlnIGJ5IG1hbmFnaW5nIE9OTFkgc3ViLW9iamVjdCAqKmRlZmF1bHRWYWx1ZXMqKiBjb25maWdzIG9mIHRoZSBzdGFuZGFyZCBhcHAgY29uZmlnIChkZWZpbmVkIGluIHRoZSBjdXN0b21pemF0aW9uIGpzb24gdGFiICkgYW5kIHRoZSB1c2VyIHByZWZlcmVuY2VzLlxuICAgKiBUbyBkbyBzbywgYSB0cmFja2luZyBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgdG8gbm90aWZ5IHRoZSB1c2VyIGFib3V0IHRoZSBhdmFpbGFibGUgdXBkYXRlcyBpbiB0aGUgZGVmYXVsdFZhbHVlcyBvYmplY3Qgb2YgdGhlIHN0YW5kYXJkIGFwcCBjb25maWcuXG4gICAqIFRoZSByZXN0IG9mIHRoZSBjb25maWcgb2JqZWN0IGNvbWluZyBmcm9tIFwic3RhbmRhcmQgYXBwIGNvbmZpZ1wiIGlzIHVzZWQgYXMgaXQgaXMgd2l0aG91dCBhbnkgb3ZlcnJpZGUuXG4gICAqIFRodXMsIHRoZSB1c2VyIHByZWZlcmVuY2VzIGFyZSB1c2VkIG9ubHkgZm9yIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdC5cbiAgICogVGhpcyBwcm92aWRlIGEgY2VudHJhbGl6ZWQgd2F5IHRvIG1hbmFnZSB0aGUgcmVzdCBvZiB0aGUgY29uZmlnIG9iamVjdCBieSBhZG1pbnMgYW5kIGVuc3VyZSBhIHVuaXF1ZSBjb21tb24gYmVoYXZpb3IgZm9yIGFsbCB1c2Vycy5cbiAgICovXG4gIGFzeW5jIGluaXRDaGF0Q29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UuaW5pdENoYXRDb25maWcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGNoYXQgY29uZmlnIGFuZCBzdG9yZSBpdHMgZGVmYXVsdFZhbHVlcyBpbiB0aGUgdXNlciBwcmVmZXJlbmNlc1xuICAgKiBAcGFyYW0gY29uZmlnICBUaGUgdXBkYXRlZCBjaGF0IGNvbmZpZ1xuICAgKiBAcGFyYW0gaGFzaGVzICBUaGUgdXBkYXRlZCBoYXNoZXMgdG8gc3RvcmUgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXNcbiAgICogQHBhcmFtIG5vdGlmeSAgV2hldGhlciB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIHVwZGF0ZVxuICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXBkYXRlIGlzIHN1Y2Nlc3NmdWxcbiAgICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1cGRhdGUgZmFpbHNcbiAgICovXG4gIHVwZGF0ZUNoYXRDb25maWcoXG4gICAgY29uZmlnOiBDaGF0Q29uZmlnLFxuICAgIGhhc2hlcz86IHsgXCJhcHBsaWVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiPzogc3RyaW5nOyBcInNraXBwZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI/OiBzdHJpbmcgfSxcbiAgICBub3RpZnkgPSB0cnVlLFxuICAgIHN1Y2Nlc3NDYWxsYmFjaz86ICgpID0+IGFueSxcbiAgICBlcnJvckNhbGxiYWNrPzogKCkgPT4gYW55XG4gICk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UudXBkYXRlQ2hhdENvbmZpZyhjb25maWcsIGhhc2hlcywgbm90aWZ5LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgbG9nZ2VkIGluIHVzZXJcbiAgICovXG4gIG92ZXJyaWRlVXNlcigpOiB2b2lkIHtcbiAgICBjb25zdCB7IHVzZXJPdmVycmlkZUFjdGl2ZSwgdXNlck92ZXJyaWRlIH0gPSBnbG9iYWxDb25maWc7XG4gICAgaWYgKCEodXNlck92ZXJyaWRlQWN0aXZlICYmIHVzZXJPdmVycmlkZSkpIHtcbiAgICAgIHRoaXMudXNlck92ZXJyaWRlJC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIHRoZSBwYXlsb2FkIHRvIHNlbmQgdG8gdGhlIE92ZXJyaWRlVXNlciBtZXRob2RcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaW5zdGFuY2VJZDogdGhpcy5jaGF0SW5zdGFuY2VJZCxcbiAgICAgIHVzZXI6IHVzZXJPdmVycmlkZS51c2VybmFtZSxcbiAgICAgIGRvbWFpbjogdXNlck92ZXJyaWRlLmRvbWFpblxuICAgIH1cblxuICAgIC8vIEludm9rZSB0aGUgT3ZlcnJpZGVVc2VyIG1ldGhvZCBhbmQgaGFuZGxlIGVycm9yc1xuICAgIHRoaXMuY29ubmVjdGlvbiEuaW52b2tlKCdPdmVycmlkZVVzZXInLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcykgPT4gdGhpcy51c2VyT3ZlcnJpZGUkLm5leHQoISFyZXMpKVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW52b2tpbmcgT3ZlcnJpZGVVc2VyOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyAvLyBSZXR1cm4gYSByZXNvbHZlZCBwcm9taXNlIHRvIGhhbmRsZSB0aGUgZXJyb3IgYW5kIHByZXZlbnQgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIHdoZW4gbm8gZnVydGhlciBlcnJvciBoYW5kbGluZyBleGlzdHMgZG93bnN0cmVhbVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlIEZldGNoIEFQSSB0byByZXRyaWV2ZSBhIG5ldyBtZXNzYWdlIGdpdmVuIGFsbCBwcmV2aW91cyBtZXNzYWdlc1xuICAgKi9cbiAgZmV0Y2gobWVzc2FnZXM6IENoYXRNZXNzYWdlW10sIHF1ZXJ5OiBRdWVyeSk6IE9ic2VydmFibGU8Q2hhdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmZldGNoKG1lc3NhZ2VzLCBxdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIG1vZGVscyBhdmFpbGFibGUgb24gdGhlIHNlcnZlclxuICAgKi9cbiAgbGlzdE1vZGVscygpOiBPYnNlcnZhYmxlPEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UubGlzdE1vZGVscygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIgQU5EIG1hdGNoaW5nIGVuYWJsZWQgZnVuY3Rpb25zIGluIHRoZSBjaGF0IGNvbmZpZ1xuICAgKi9cbiAgbGlzdEZ1bmN0aW9ucygpOiBPYnNlcnZhYmxlPEdsbG1GdW5jdGlvbltdIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlLmxpc3RGdW5jdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgYXNzaXN0YW50IGFuc3dlciBnZW5lcmF0aW9uIGFuZCBjYW5jZWxzIGFsbCB0aGUgb25nb2luZyBhbmQgcGVuZGluZyByZWxhdGVkIHRhc2tzXG4gICAqL1xuICBzdG9wR2VuZXJhdGlvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2Uuc3RvcEdlbmVyYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhhbmRsZXIgZm9yIHF1b3RhIHVwZGF0ZXMgZWFjaCB0aW1lIHRoZSBjaGF0IGlzIGludm9rZWQuXG4gICAqIEl0IGVtaXRzIHRoZSB1cGRhdGVkIHF1b3RhIHRvIHRoZSBxdW90YSQgc3ViamVjdCwgZW1pdHMgYWNjb3JkaW5nbHkgdGhlIHVwZGF0ZWQgdXNlcidzIHRva2VucyBjb25zdW1wdGlvbiBhbmQgbm90aWZpZXMgdGhlIHVzZXIgaWYgdGhlIG1heCBxdW90YSBpcyByZWFjaGVkLlxuICAgKiBAcGFyYW0gcXVvdGEgVGhlIHVwZGF0ZWQgcXVvdGFcbiAgICogQHBhcmFtIHByb3BhZ2F0ZUVycm9yIFdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSBlcnJvciB0byB0aGUgY2FsbGVyXG4gICAqL1xuICB1cGRhdGVRdW90YShxdW90YTogUXVvdGEsIHByb3BhZ2F0ZUVycm9yID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZS51cGRhdGVRdW90YShxdW90YSwgcHJvcGFnYXRlRXJyb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgaGFuZGxlciBmb3IgY2hhdCB1c2FnZSBtZXRyaWNzIGVhY2ggdGltZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgYXNzaXN0YW50IHJlc3BvbnNlIGlzIGNvbXBsZXRlZC5cbiAgICogSXQgZW1pdHMgdGhlIGNoYXQgdXNhZ2UgbWV0cmljcyB0byB0aGUgY2hhdFVzYWdlTWV0cmljcyQgc3ViamVjdCwgZW1pdHMgYWNjb3JkaW5nbHkgdGhlIHVwZGF0ZWQgY2hhdCdzIHRva2VucyBjb25zdW1wdGlvblxuICAgKiBAcGFyYW0gY2hhdFVzYWdlTWV0cmljcyBUaGUgY2hhdCB1c2FnZSBtZXRyaWNzXG4gICAqL1xuICB1cGRhdGVDaGF0VXNhZ2VNZXRyaWNzKGNoYXRVc2FnZU1ldHJpY3M6IENoYXRVc2FnZU1ldHJpY3MpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZS51cGRhdGVDaGF0VXNhZ2VNZXRyaWNzKGNoYXRVc2FnZU1ldHJpY3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbW9kZWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnaXZlbiAoc2VydmljZUlkICsgbW9kZWxJZClcbiAgICogSWYgYSBtb2RlbCBpcyBub3QgZm91bmQsIGFuIGVycm9yIG1lc3NhZ2UgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHNlcnZpY2VJZCBUaGUgc2VydmljZUlkIG9mIHRoZSBtb2RlbFxuICAgKiBAcGFyYW0gbW9kZWxJZCBUaGUgbW9kZWxJZCBvZiB0aGUgbW9kZWxcbiAgICogQHJldHVybnMgVGhlIG1vZGVsIGRlc2NyaXB0aW9uXG4gICAqL1xuICBnZXRNb2RlbChzZXJ2aWNlSWQ6IHN0cmluZywgbW9kZWxJZDogc3RyaW5nKTogR2xsbU1vZGVsRGVzY3JpcHRpb24gfCB1bmRlZmluZWR7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscz8uZmluZChtID0+IG0uc2VydmljZUlkID09PSBzZXJ2aWNlSWQgJiYgbS5tb2RlbElkID09PSBtb2RlbElkKTtcbiAgICAvLyBIYW5kbGUgb2Jzb2xldGUgY29uZmlnXG4gICAgaWYoIW1vZGVsKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGBGQVRBTCBFUlJPUiA6IFRoZSBtb2RlbCAoc2VydmljZUlkID0gJyR7c2VydmljZUlkfScsIG1vZGVsSWQgPSAnJHttb2RlbElkfScpIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuIFBsZWFzZSBjb250YWN0IGFuIGFkbWluIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLmApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGQVRBTCBFUlJPUiA6IFRoZSBtb2RlbCAoc2VydmljZUlkID0gJyR7c2VydmljZUlkfScsIG1vZGVsSWQgPSAnJHttb2RlbElkfScpIGlzIG5vIGxvbmdlciBhdmFpbGFibGVgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBsaXN0IHNhdmVkIGNoYXRzIGJlbG9uZ2luZyB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoZSBhc3Npc3RhbnRcbiAgICovXG4gIGxpc3RTYXZlZENoYXQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENoYXRzU2VydmljZS5saXN0Q2hhdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNhdmVkIGNoYXQgd2l0aCB0aGUgZ2l2ZW4gaWQsIGlmIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICovXG4gIGdldFNhdmVkQ2hhdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRIaXN0b3J5IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuZ2V0Q2hhdEJ5SWQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgc2F2ZWQgY2hhdCB3aXRoIHRoZSBnaXZlbiBpZCBhbHJlYWR5IGV4aXN0c1xuICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBzYXZlZCBjaGF0XG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHNhdmVkIGNoYXQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGlzRXhpc3RpbmdTYXZlZENoYXQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmlzRXhpc3RpbmdDaGF0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgY2hhdCB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlc1xuICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIGFkZCB0byB0aGUgc2F2ZWQgY2hhdCBpbmRleFxuICAgKiBAcmV0dXJucyBUaGUgc2F2ZWQgY2hhdFxuICAgKi9cbiAgYWRkU2F2ZWRDaGF0KGlkOiBzdHJpbmcsIG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmFkZENoYXQoaWQsIG1lc3NhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBzYXZlZCBjaGF0IHdpdGggdGhlIGdpdmVuIGlkLlxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBzYXZlZCBjaGF0XG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuZXcgbmFtZSBvZiB0aGUgc2F2ZWQgY2hhdCwgaWYgcHJvdmlkZWRcbiAgICogQHBhcmFtIG1lc3NhZ2VzIFRoZSBtZXNzYWdlcyB0byB1cGRhdGUgdGhlIHNhdmVkIGNoYXQgaGlzdG9yeSwgaWYgcHJvdmlkZWRcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc2F2ZWQgY2hhdCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdXBkYXRlZFxuICAgKi9cbiAgdXBkYXRlU2F2ZWRDaGF0KGlkOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIG1lc3NhZ2VzPzogQ2hhdE1lc3NhZ2VbXSk6IE9ic2VydmFibGU8U2F2ZWRDaGF0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5zYXZlZENoYXRzU2VydmljZS51cGRhdGVDaGF0KGlkLCBuYW1lLCBtZXNzYWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBkZWxldGUgb2Ygc2F2ZWQgY2hhdHMgbWF0Y2hpbmcgdGhlIGdpdmVuIGlkc1xuICAgKiBAcGFyYW0gaWRzIExpc3Qgb2YgaWRzIG9mIHRoZSBzYXZlZCBjaGF0cyB0byBkZWxldGVcbiAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkZWxldGVkIGNoYXRzXG4gICAqL1xuICBkZWxldGVTYXZlZENoYXQoaWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8RGVsZXRlU2F2ZWRDaGF0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5zYXZlZENoYXRzU2VydmljZS5kZWxldGVDaGF0KGlkcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVidWdNZXNzYWdlKG1lc3NhZ2U6IERlYnVnTWVzc2FnZSk6IE9ic2VydmFibGU8S3ZPYmplY3QgfCBMaXN0T2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuZGVidWdNZXNzYWdlU2VydmljZS5nZXREZWJ1Z01lc3NhZ2UobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBvdXQtb2YtdGhlLWJveCBoYW5kbGVyc1xuICAgKiBJdCBpcyBhIHBsYWNlaG9sZGVyIGZvciBub24tc3RyZWFtaW5nIHNjZW5hcmlvcywgd2hlcmUgeW91IGludm9rZSBhIHNwZWNpZmljIGh1YiBtZXRob2QsIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRzIHdpdGggZnJhbWUgbWVzc2FnZShzKVxuICAgKi9cbiAgaW5pdE1lc3NhZ2VIYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2lzdGFudFdzRnJhbWVzU2VydmljZS5pbml0TWVzc2FnZUhhbmRsZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgYW5kIHJlZ2lzdGVyIHRoZSBlbnRpcmUgX21lc3NhZ2VIYW5kbGVycyBtYXAgYnkgbWVyZ2luZyB0aGUgcHJvdmlkZWQgbWFwIHdpdGggdGhlIGRlZmF1bHQgb25lXG4gICAqIEBwYXJhbSBfbWVzc2FnZUhhbmRsZXJzXG4gICAqL1xuICBvdmVycmlkZU1lc3NhZ2VIYW5kbGVyczxUPihfbWVzc2FnZUhhbmRsZXJzOiBNYXA8c3RyaW5nLCBNZXNzYWdlSGFuZGxlcjxUPj4pOiB2b2lkIHtcbiAgICB0aGlzLmFzc2lzdGFudFdzRnJhbWVzU2VydmljZS5vdmVycmlkZU1lc3NhZ2VIYW5kbGVycyhfbWVzc2FnZUhhbmRsZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpYyBldmVudC5cbiAgICogSWYgYSBsaXN0ZW5lciBmb3IgdGhpcyBzYW1lIGV2ZW50IGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqIElmIHRoZSBsaXN0ZW5lciBoYXMgXCJpc0dsb2JhbEhhbmRsZXJcIiBzZXQgdG8gdHJ1ZSwgaXQgd2lsbCBiZSByZWdpc3RlcmVkIHRvIHRoZSBodWIgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIGV2ZW50TmFtZSBOYW1lIG9mIHRoZSBldmVudCB0byByZWdpc3RlciBhIGxpc3RlbmVyIGZvclxuICAgKiBAcGFyYW0gZXZlbnRIYW5kbGVyIFRoZSBoYW5kbGVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyByZWNlaXZlZFxuICAgKi9cbiAgYWRkTWVzc2FnZUhhbmRsZXI8VD4oZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50SGFuZGxlcjogTWVzc2FnZUhhbmRsZXI8VD4pOiB2b2lkIHtcbiAgICB0aGlzLmFzc2lzdGFudFdzRnJhbWVzU2VydmljZS5hZGRNZXNzYWdlSGFuZGxlcihldmVudE5hbWUsIGV2ZW50SGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgZXZlbnQgZnJvbSB0aGUgX21lc3NhZ2VIYW5kbGVycyBtYXAgYW5kIHVuc3Vic2NyaWJlIGZyb20gcmVjZWl2aW5nIG1lc3NhZ2VzIGZvciB0aGlzIGV2ZW50IGZyb20gdGhlIFNpZ25hbFIgaHViLlxuICAgKiBAcGFyYW0gZXZlbnROYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIHJlbW92ZSB0aGUgbGlzdGVuZXIgZm9yXG4gICAqL1xuICByZW1vdmVNZXNzYWdlSGFuZGxlcihldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLnJlbW92ZU1lc3NhZ2VIYW5kbGVyKGV2ZW50TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjb25uZWN0aW9uIHRvIHRoZSBzaWduYWxSIHdlYnNvY2tldCBhbmQgcmVnaXN0ZXIgZGVmYXVsdCBsaXN0ZW5lcnMgdG8gdGhlIG1ldGhvZHMgZGVmaW5lZCBpbiB0aGUgc2VydmVyIGh1YiBjbGFzc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbm5lY3Rpb24uIEl0IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBvcHRpb25zXG4gICAqIEBwYXJhbSBsb2dMZXZlbCBEZWZpbmUgdGhlIGxvZyBsZXZlbCBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGVcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgYnVpbHRcbiAgICovXG4gIGJ1aWxkQ29ubmVjdGlvbihvcHRpb25zPzogQ29ubmVjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zaWduYWxSQ29ubmVjdGlvblNlcnZpY2UuYnVpbGRDb25uZWN0aW9uKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBjb25uZWN0aW9uXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHN0YXJ0ZWRcbiAgICovXG4gIHN0YXJ0Q29ubmVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zaWduYWxSQ29ubmVjdGlvblNlcnZpY2Uuc3RhcnRDb25uZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGUgY29ubmVjdGlvblxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBzdG9wcGVkXG4gICAqL1xuICBzdG9wQ29ubmVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zaWduYWxSQ29ubmVjdGlvblNlcnZpY2Uuc3RvcENvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhbiBhdWRpdCBldmVudCB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBkZXRhaWxzLiBUaGUgZ2VuZXJhdGVkIGF1ZGl0IGV2ZW50IGlzIHNlbnQgYWZ0ZXJ3YXJkcyB2aWEgdGhlIEF1ZGl0V2ViU2VydmljZVxuICAgKiBAcGFyYW0gdHlwZSBBdWRpdCBldmVudCB0eXBlXG4gICAqIEBwYXJhbSBkZXRhaWxzIEF1ZGl0IGV2ZW50IGRldGFpbHNcbiAgICogQHBhcmFtIGlkIEFjdGlvbnMgKHNhdmVkQ2hhdCBkZWxldGUvcmVuYW1lLy4uLikgbWF5IG9jY3VyIG9uIGEgc3BlY2lmaWMgY2hhdCBkaWZmZXJlbnQgdGhhbiB0aGUgY3VycmVudCBvbmUgc3RvcmVkIGluIHRoaXMgc2VydmljZSwgc28gdGhlIGNoYXQgaWQgY2FuIGJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZTogc3RyaW5nLCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpZD86IHN0cmluZykge1xuICAgIGNvbnN0IGJhc2VEZXRhaWxzID0ge1xuICAgICAgXCJ1cmxcIjogZGVjb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxcbiAgICAgIFwiYXBwXCI6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lLFxuICAgICAgXCJ1c2VyLWlkXCI6IHRoaXMucHJpbmNpcGFsU2VydmljZS5wcmluY2lwYWw/LnVzZXJJZCxcbiAgICAgIFwiaW5zdGFuY2UtaWRcIjogdGhpcy5jaGF0SW5zdGFuY2VJZCxcbiAgICAgIFwiY2hhdC1pZFwiOiBpZCB8fCB0aGlzLmNoYXRJZCxcbiAgICAgIFwic2VydmljZS1pZFwiOiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMuc2VydmljZV9pZCxcbiAgICAgIFwibW9kZWwtaWRcIjogdGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLm1vZGVsX2lkXG4gICAgfTtcblxuICAgIGlmICh0eXBlID09PSBcImFzdC1tZXNzYWdlLm1lc3NhZ2VcIikge1xuICAgICAgYmFzZURldGFpbHNbXCJpcy11c2VyLWlucHV0XCJdID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYXVkaXQgPSB7XG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIC4uLmJhc2VEZXRhaWxzLFxuICAgICAgICAuLi5kZXRhaWxzXG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IEF1ZGl0Lm5vdGlmeShhdWRpdCk7XG4gIH1cblxufVxuIl19
603
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksRUFDSixHQUFHLEVBRUgsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0gsVUFBVSxFQUNYLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLEtBQUssRUFFTCxJQUFJLEVBQ0osWUFBWSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBcUIxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0MsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsNkJBQTZCLEVBQTBDLE1BQU0sNENBQTRDLENBQUM7QUFDbkksT0FBTyxFQUFFLHdCQUF3QixFQUFxQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BILE9BQU8sRUFBRSw4QkFBOEIsRUFBMkMsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2SSxP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QUMsYUFBYSxDQUFDLFVBQVU7WUFDbkUsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFNLENBQUMsYUFBYSxDQUFDLFFBQVE7U0FDaEUsQ0FBQztRQUVGLElBQUksSUFBSSxLQUFLLHFCQUFxQixFQUFFLENBQUM7WUFDbkMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN2QyxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUc7WUFDWixJQUFJO1lBQ0osTUFBTSxFQUFFO2dCQUNOLEdBQUcsV0FBVztnQkFDZCxHQUFHLE9BQU87YUFDWDtTQUNGLENBQUE7UUFDRCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQzsrR0Fwb0JVLFdBQVc7bUhBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSBcIkBqc3ZlcnNlL3RyYW5zbG9jb1wiO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBkZWZlcixcbiAgZmlsdGVyLFxuICBmb3JrSm9pbixcbiAgZnJvbSxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbiAgdGhyb3dFcnJvclxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSHViQ29ubmVjdGlvbiB9IGZyb20gXCJAbWljcm9zb2Z0L3NpZ25hbHJcIjtcbmltcG9ydCB7XG4gIEF1ZGl0LFxuICBRdWVyeSxcbiAgZ3VpZCxcbiAgZ2xvYmFsQ29uZmlnXG59IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcblxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2FwcC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQcmluY2lwYWxTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvcHJpbmNpcGFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IFVzZXJTZXR0aW5nc1dlYlNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy91c2VyLXNldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIENoYXRDb25maWcsXG4gIENoYXRNZXNzYWdlLFxuICBDaGF0UmVzcG9uc2UsXG4gIENoYXRVc2FnZU1ldHJpY3MsXG4gIERlYnVnTWVzc2FnZSxcbiAgRGVsZXRlU2F2ZWRDaGF0UmVzcG9uc2UsXG4gIEdsbG1GdW5jdGlvbixcbiAgR2xsbU1vZGVsRGVzY3JpcHRpb24sXG4gIEt2T2JqZWN0LFxuICBMaXN0T2JqZWN0LFxuICBNZXNzYWdlSGFuZGxlcixcbiAgUXVvdGEsXG4gIFNhdmVkQ2hhdCxcbiAgU2F2ZWRDaGF0SGlzdG9yeSxcbiAgU2F2ZWRDaGF0UmVzcG9uc2UsXG4gIFRva2VuQ29uc3VtcHRpb24sXG4gIFVzZXJUb2tlbkNvbnN1bXB0aW9uXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb25uZWN0aW9uT3B0aW9ucyB9IGZyb20gXCIuL3NlcnZpY2VzL3NpZ25hbFIud2ViLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFzc2lzdGFudFV0aWxzIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHMuc2VydmljZVwiO1xuaW1wb3J0IHsgU2F2ZWRDaGF0c1NlcnZpY2UsIFNhdmVkQ2hhdHNPcGVyYXRpb25Db25maWcgfSBmcm9tIFwiLi9zYXZlZC1jaGF0cy9zYXZlZC1jaGF0cy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTaWduYWxSQ29ubmVjdGlvblNlcnZpY2UsIFNpZ25hbFJDb25uZWN0aW9uT3BlcmF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vc2VydmljZXMvc2lnbmFsUi1jb25uZWN0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLCBBc3Npc3RhbnRDb25maWd1cmF0aW9uT3BlcmF0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC1jb25maWd1cmF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFzc2lzdGFudE1ldGFkYXRhU2VydmljZSwgQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0IH0gZnJvbSBcIi4vc2VydmljZXMvYXNzaXN0YW50LW1ldGFkYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZSwgQXNzaXN0YW50VG9rZW5zVHJhY2tpbmdPcGVyYXRpb25Db250ZXh0IH0gZnJvbSBcIi4vc2VydmljZXMvYXNzaXN0YW50LXRva2Vucy10cmFja2luZy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UsIEFzc2lzdGFudFdzRnJhbWVzQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC13cy1mcmFtZXMuc2VydmljZVwiOyAvLyBBZGRlZFxuaW1wb3J0IHsgRGVidWdNZXNzYWdlT3BlcmF0aW9uQ29uZmlnLCBEZWJ1Z01lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4vZGVidWctbWVzc2FnZS9kZWJ1Zy1tZXNzYWdlLnNlcnZpY2VcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENoYXRTZXJ2aWNlIHtcblxuICAvKiogTmFtZSBvZiB0aGUgYXNzaXN0YW50IHdlYnNvY2tldCBlbmRwb2ludC4gKi9cbiAgV1NfUkVRVUVTVF9VUkw6IHN0cmluZztcbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCBSRVNUIGVuZHBvaW50LiAqL1xuICBSRVNUX1JFUVVFU1RfVVJMOiBzdHJpbmc7XG4gIC8qKiBTaWduYWxSIGNvbm5lY3Rpb24gaW5zdGFuY2UgKi9cbiAgcHVibGljIGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKiBFbWl0IHRydWUgb25jZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGFzc2lzdGFudCBwcm9jZXNzIGlzIGRvbmUuICovXG4gIGluaXRQcm9jZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogRW1pdCB0cnVlIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgY29uZmlnIGlzIGRvbmUuICovXG4gIGluaXRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBFbWl0IHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgYXNzaXN0YW50LiAqL1xuICBhc3Npc3RhbnRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGF0Q29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0cnVlIGlmIHRoZSB1c2VyIGhhcyBiZWVuIG92ZXJyaWRkZW4sIGZhbHNlIG90aGVyd2lzZS4gKi9cbiAgdXNlck92ZXJyaWRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIEVtaXQgdHJ1ZSBpZiB0aGUgZmV0Y2ggb2YgYW4gYXNzaXN0YW50J3MgcmVzcG9uc2UgaXMgb25nb2luZyAoaXQgaW5jbHVkZXMgU3RyZWFtaW5nIHN0YXR1cyBvZiB0aGUgYXNzaXN0YW50IGVuZHBvaW50IEFORCBzYXZpbmcgdGhlIGRpc2N1c3Npb24gaWYgc2F2ZSBDaGF0IGlzIGVuYWJsZWQpLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBmZXRjaGVzIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIFR5cGljYWxseSwgdGhlcmUgaXMgbm8gcHJvYmxlbSBjaGFpbmluZyBmZXRjaGVzLCBidXQgd2hlbiBmb3JjaW5nIGEgcmVsb2FkIGFmdGVyIHF1ZXJ5IGNoYW5nZXMgY2FzZXMsIGl0IGNhbid0IGJlIGFsbG93ZWQgYmVjYXVzZSBpdCBicmVha3MgdGhlIHdob2xlIGJ1c2luZXNzIGxvZ2ljLlxuICAqL1xuICBzdHJlYW1pbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBTdG9yZSB0aGUgbWVzc2FnZXMgaGlzdG9yeSBvZiB0aGUgY3VycmVudCBjaGF0LiAqL1xuICBjaGF0SGlzdG9yeTogQ2hhdE1lc3NhZ2VbXSB8IHVuZGVmaW5lZDtcbiAgLyoqIExpc3Qgb2YgbW9kZWxzIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyLiAqL1xuICBtb2RlbHM6IEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBMaXN0IG9mIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci4gKi9cbiAgZnVuY3Rpb25zOiBHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZDtcbiAgLyoqIExpc3Qgb2Ygc2F2ZWQgY2hhdHMuICovXG4gIHNhdmVkQ2hhdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYXZlZENoYXRbXT4oW10pO1xuICAvKiogV2hldGhlciB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHNhdmVkIGNoYXRzLiAqL1xuICBzYXZlZENoYXRzRXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBFbWl0IHRoZSBzYXZlZCBjaGF0IHRvIGxvYWQuICovXG4gIGxvYWRTYXZlZENoYXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYXZlZENoYXQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBFbWl0IHRoZSBxdW90YSBlYWNoIHRpbWUgdGhlIGNoYXQgaXMgaW52b2tlZC4gKi9cbiAgcXVvdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdW90YSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIGNhbGN1bGF0ZWQgdXNlcidzIHRva2VuIGNvbnN1bXB0aW9uIGJhc2VkIG9uIHRoZSBxdW90YS4gKi9cbiAgdXNlclRva2VuQ29uc3VtcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyVG9rZW5Db25zdW1wdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIGNoYXQgdXNhZ2UgbWV0cmljcyBlYWNoIHRpbWUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGFzc2lzdGFudCByZXNwb25zZSBpcyBjb21wbGV0ZWQuICovXG4gIGNoYXRVc2FnZU1ldHJpY3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGF0VXNhZ2VNZXRyaWNzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0aGUgY2FsY3VsYXRlZCBjaGF0J3MgdG9rZW4gY29uc3VtcHRpb24gYmFzZWQgb24gdGhlIGNoYXQgdXNhZ2UgbWV0cmljcy4gKi9cbiAgY2hhdFRva2VuQ29uc3VtcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUb2tlbkNvbnN1bXB0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0cnVlIGlmIFwiQ2FuY2VsVGFza3NcIiBpcyBvbmdvaW5nLiAqL1xuICBzdG9wcGluZ0dlbmVyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBJbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlIGRlZmluaW5nIHRoZSBhc3Npc3RhbnQgaW5zdGFuY2UuICovXG4gIHByaXZhdGUgX2NoYXRJbnN0YW5jZUlkOiBzdHJpbmc7XG4gIC8qKiBHZW5lcmF0ZWQgR1VJRCBmb3IgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0IGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHMuICovXG4gIHByaXZhdGUgX2NoYXRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyB1c2VyU2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXR0aW5nc1dlYlNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgcHVibGljIHByaW5jaXBhbFNlcnZpY2UgPSBpbmplY3QoUHJpbmNpcGFsU2VydmljZSk7XG4gIHB1YmxpYyBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG4gIHByaXZhdGUgc2F2ZWRDaGF0c1NlcnZpY2UgPSBpbmplY3QoU2F2ZWRDaGF0c1NlcnZpY2UpO1xuICBwcml2YXRlIHNpZ25hbFJDb25uZWN0aW9uU2VydmljZSA9IGluamVjdChTaWduYWxSQ29ubmVjdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UgPSBpbmplY3QoQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UgPSBpbmplY3QoQXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkZWJ1Z01lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KERlYnVnTWVzc2FnZVNlcnZpY2UpO1xuICAvLyBJbmplY3QgdGhlIEFzc2lzdGFudFdzRnJhbWVzU2VydmljZSB1c2luZyAnbmV3JyB0byBlbnN1cmUgYSBzZXBhcmF0ZSBsb2NhbCBpbnN0YW5jZSBmb3IgZWFjaCBDaGF0U2VydmljZSBpbnN0YW5jZVxuICBwcml2YXRlIGFzc2lzdGFudFdzRnJhbWVzU2VydmljZSA9IG5ldyhBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsb2NvID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBhc3Npc3RhbnQgcHJvY2Vzcy5cbiAgICogSXQgaW5jbHVkZXMgYnVpbGRpbmcgYW5kIHN0YXJ0aW5nIGEgY29ubmVjdGlvbiwgZXhlY3V0aW5nIHBhcmFsbGVsIHJlcXVlc3RzIGZvciBtb2RlbHMgYW5kIGZ1bmN0aW9ucywgYW5kIGhhbmRsaW5nIGVycm9ycyBkdXJpbmcgdGhlIHByb2Nlc3MuXG4gICAqIOKaoO+4jyBUaGlzIG1ldGhvZCBNVVNUIGJlIGNhbGxlZCBPTkxZIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZEluIGFuZCBvbmNlIHdoZW4gdGhlIGFzc2lzdGFudCBpcyBpbml0aWFsaXplZC5cbiAgICpcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZTxib29sZWFuPiBpbmRpY2F0aW5nIHRoZSBzdWNjZXNzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLlxuICAgKi9cbiAgaW5pdCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAvLyBFbnN1cmUgYWxsIGxvZ2ljIGlzIGV4ZWN1dGVkIHdoZW4gc3Vic2NyaWJlZCB0byB0aGUgb2JzZXJ2YWJsZVxuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICB0aGlzLl9pbml0QXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UoKTtcbiAgICAgIHJldHVybiBmcm9tKHRoaXMuaW5pdENoYXRDb25maWcoKSk7XG4gICAgfSkucGlwZShcbiAgICAgIC8vIFdhaXQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlIGluaXRpYWxpemVkXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5pbml0Q29uZmlnJC5waXBlKGZpbHRlcihCb29sZWFuKSwgdGFrZSgxKSkpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5nZXRXU1JlcXVlc3RzVXJsKCk7XG4gICAgICAgIHRoaXMuZ2V0UkVTVFJlcXVlc3RzVXJsKCk7XG4gICAgICAgIHRoaXMuX2luaXRBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5faW5pdEFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0U2F2ZWRDaGF0c1NlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5faW5pdERlYnVnTWVzc2FnZVNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5faW5pdFNpZ25hbFJDb25uZWN0aW9uU2VydmljZSgpO1xuICAgICAgfSksXG4gICAgICAvLyBCdWlsZCBhbmQgc3RhcnQgdGhlIFNpZ25hbFIgY29ubmVjdGlvblxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYnVpbGRDb25uZWN0aW9uKCkpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UgaGVyZSwgbm93IHRoYXQgJ3RoaXMuY29ubmVjdGlvbicgaXMgc2V0XG4gICAgICAgIHRoaXMuX2luaXRBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5pbml0TWVzc2FnZUhhbmRsZXJzKCk7XG4gICAgICB9KSxcbiAgICAgIC8vIFN0YXJ0IHRoZSBjb25uZWN0aW9uXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zdGFydENvbm5lY3Rpb24oKSksXG4gICAgICAvLyBGZXRjaCBtZXRhZGF0YSBpbiBwYXJhbGxlbFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIGZvcmtKb2luKFtcbiAgICAgICAgICB0aGlzLmxpc3RNb2RlbHMoKSxcbiAgICAgICAgICB0aGlzLmxpc3RGdW5jdGlvbnMoKVxuICAgICAgICBdKVxuICAgICAgKSxcbiAgICAgIC8vIE1hcCB0aGUgcmVzdWx0cyBvZiBwYXJhbGxlbCByZXF1ZXN0cyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzXG4gICAgICBtYXAoKFttb2RlbHMsIGZ1bmN0aW9uc10pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKG1vZGVscyAhPT0gdW5kZWZpbmVkICYmIGZ1bmN0aW9ucyAhPT0gdW5kZWZpbmVkICYmICEhbW9kZWxzICYmICEhZnVuY3Rpb25zKTtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSBtb2RlbHM7XG4gICAgICAgIHRoaXMuaW5pdFByb2Nlc3MkLm5leHQocmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pLFxuICAgICAgLy8gQW55IGVycm9ycyBkdXJpbmcgdGhlIHByb2Nlc3MgYXJlIGNhdWdodCwgbG9nZ2VkLCBhbmQgcmUtdGhyb3duIHRvIHByb3BhZ2F0ZSB0aGUgZXJyb3IgZnVydGhlclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJyZWQ6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICAgIHRha2UoMSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgZW5kcG9pbnQgdG8gdXNlIGZvciB0aGUgd2Vic29ja2V0IHJlcXVlc3RzXG4gICAqIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcHAgY29uZmlnXG4gICAqL1xuICBnZXRXU1JlcXVlc3RzVXJsKCkge1xuICAgIHRoaXMuYXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0V1NSZXF1ZXN0c1VybCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgZW5kcG9pbnQgdG8gdXNlIGZvciB0aGUgaHR0cCByZXF1ZXN0c1xuICAgKiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYXBwIGNvbmZpZ1xuICAgKi9cbiAgZ2V0UkVTVFJlcXVlc3RzVXJsKCkge1xuICAgIHRoaXMuYXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0UkVTVFJlcXVlc3RzVXJsKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFNhdmVkQ2hhdHNTZXJ2aWNlIHdpdGggdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSBgU2F2ZWRDaGF0c1NlcnZpY2VgIGJ5IHByb3ZpZGluZyBpdCB3aXRoIGEgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogKGBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnYCkgdGhhdCBpbmNsdWRlcyB2YXJpb3VzIGNhbGxiYWNrcyBhbmQgcHJvcGVydGllcyByZXF1aXJlZFxuICAgKiBmb3IgaXRzIG9wZXJhdGlvbi4gVGhlIGluaXRpYWxpemF0aW9uIHdpbGwgb25seSBwcm9jZWVkIGlmIGJvdGggYGFzc2lzdGFudENvbmZpZyRgIGFuZFxuICAgKiBgUkVTVF9SRVFVRVNUX1VSTGAgYXJlIGF2YWlsYWJsZS5cbiAgICpcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGluY2x1ZGVzOlxuICAgKiAtIEFwcGxpY2F0aW9uIG5hbWUgcmV0cmlldmFsLlxuICAgKiAtIEluc3RhbmNlIElEIHJldHJpZXZhbC5cbiAgICogLSBSRVNUIEFQSSBVUkwgcmV0cmlldmFsLlxuICAgKiAtIERlYnVnIGZsYWcgcmV0cmlldmFsLlxuICAgKiAtIENoYXQgSUQgZm9yIG5ldyBzYXZlcy5cbiAgICogLSBTYXZlZCBjaGF0cyBlbmFibGVtZW50IGNoZWNrLlxuICAgKiAtIE1ldGhvZHMgZm9yIHNldHRpbmcgYSBzYXZlZCBjaGF0IElELCB1cGRhdGluZyB0aGUgc2F2ZWQgY2hhdHMgbGlzdCwgYW5kIGdlbmVyYXRpbmcgYXVkaXQgZXZlbnRzLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcmVhZHksIGFuIGVycm9yIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRTYXZlZENoYXRzU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuUkVTVF9SRVFVRVNUX1VSTCkge1xuICAgICAgY29uc3Qgc2F2ZWRDaGF0c09wQ29uZmlnOiBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnID0ge1xuICAgICAgICBnZXRBcHBOYW1lOiAoKSA9PiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZSxcbiAgICAgICAgZ2V0SW5zdGFuY2VJZDogKCkgPT4gdGhpcy5jaGF0SW5zdGFuY2VJZCxcbiAgICAgICAgZ2V0UmVzdFVybDogKCkgPT4gdGhpcy5SRVNUX1JFUVVFU1RfVVJMLFxuICAgICAgICBnZXREZWJ1Z0ZsYWc6ICgpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5kZWJ1ZyxcbiAgICAgICAgaXNTYXZlZENoYXRzRW5hYmxlZDogKCkgPT4gISF0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWU/LnNhdmVkQ2hhdFNldHRpbmdzLmVuYWJsZWQsXG4gICAgICAgIHNldFNhdmVkQ2hhdHNFcnJvclN0YXR1czogKGhhc0Vycm9yKSA9PiB0aGlzLnNhdmVkQ2hhdHNFcnJvciQubmV4dChoYXNFcnJvciksXG4gICAgICAgIHVwZGF0ZVNhdmVkQ2hhdHNMaXN0OiAoY2hhdHMpID0+IHRoaXMuc2F2ZWRDaGF0cyQubmV4dChjaGF0cyksXG4gICAgICAgIGdlbmVyYXRlQXVkaXRFdmVudDogKHR5cGUsIGRldGFpbHMsIGlkKSA9PiB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudCh0eXBlLCBkZXRhaWxzLCBpZCksXG4gICAgICB9O1xuICAgICAgdGhpcy5zYXZlZENoYXRzU2VydmljZS5pbml0KHNhdmVkQ2hhdHNPcENvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBub3QgaGFwcGVuIGlmIGluaXQgb3JkZXIgaXMgY29ycmVjdFxuICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIFNhdmVkQ2hhdHNTZXJ2aWNlOiBhc3Npc3RhbnRDb25maWcgb3IgUkVTVF9SRVFVRVNUX1VSTCBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgU2lnbmFsUiBjb25uZWN0aW9uIHNlcnZpY2Ugd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgU2lnbmFsUiBjb25uZWN0aW9uIHNlcnZpY2UgaXMgcHJvcGVybHkgc2V0IHVwXG4gICAqIGJ5IHByb3ZpZGluZyBpdCB3aXRoIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHZhbHVlcywgc3VjaCBhcyB0aGUgV2ViU29ja2V0XG4gICAqIHJlcXVlc3QgVVJMIGFuZCBhc3Npc3RhbnQgY29uZmlndXJhdGlvbi4gSXQgYWxzbyBtYW5hZ2VzIHRoZSBTaWduYWxSIGh1YiBjb25uZWN0aW9uXG4gICAqIGluc3RhbmNlLlxuICAgKlxuICAgKiBQcmVjb25kaXRpb25zOlxuICAgKiAtIGBhc3Npc3RhbnRDb25maWckLnZhbHVlYCBtdXN0IGJlIGF2YWlsYWJsZS5cbiAgICogLSBgV1NfUkVRVUVTVF9VUkxgIG11c3QgYmUgZGVmaW5lZC5cbiAgICpcbiAgICogSWYgdGhlc2UgcHJlY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgYW4gZXJyb3IgaXMgbG9nZ2VkIHRvIHRoZSBjb25zb2xlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFNpZ25hbFJDb25uZWN0aW9uU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuV1NfUkVRVUVTVF9VUkwpIHtcbiAgICAgICAgY29uc3Qgc2lnbmFsUk9wQ29uZmlnOiBTaWduYWxSQ29ubmVjdGlvbk9wZXJhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgIGdldFdzUmVxdWVzdFVybDogKCkgPT4gdGhpcy5XU19SRVFVRVNUX1VSTCxcbiAgICAgICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgICAgICBnZXRIdWJDb25uZWN0aW9uOiAoKSA9PiB0aGlzLmNvbm5lY3Rpb24sIC8vIFVzaW5nIGdldEh1YkNvbm5lY3Rpb24gYXMgcGVyIHVzZXIncyBmaWxlXG4gICAgICAgICAgICBzZXRIdWJDb25uZWN0aW9uOiAoY29ubikgPT4geyB0aGlzLmNvbm5lY3Rpb24gPSBjb25uOyB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlLmluaXQoc2lnbmFsUk9wQ29uZmlnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBpZGVhbGx5IG5vdCBoYXBwZW4gaWYgaW5pdCBvcmRlciBpcyBjb3JyZWN0XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBTaWduYWxSQ29ubmVjdGlvblNlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBvciBXU19SRVFVRVNUX1VSTCBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50IENvbmZpZ3VyYXRpb24gU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBieSBwcm92aWRpbmcgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9uc1xuICAgKiBhbmQgc3RhdGUgbWFuYWdlbWVudCBtZWNoYW5pc21zIHJlcXVpcmVkIGZvciB0aGUgYXNzaXN0YW50J3MgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgaW5jbHVkZXM6XG4gICAqIC0gTWV0aG9kcyB0byByZXRyaWV2ZSBjaGF0IGluc3RhbmNlIGFuZCBjaGF0IElEcy5cbiAgICogLSBNZXRob2RzIHRvIGdldCBhbmQgc2V0IGFzc2lzdGFudCBjb25maWd1cmF0aW9uIHZhbHVlcy5cbiAgICogLSBNZXRob2RzIHRvIHNldCBXZWJTb2NrZXQgYW5kIFJFU1QgcmVxdWVzdCBVUkxzLlxuICAgKiAtIE1ldGhvZHMgdG8gdXBkYXRlIHRoZSBpbml0aWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHN0YXR1cy5cbiAgICogLSBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhdWRpdCBldmVudHMgZm9yIHRyYWNraW5nIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pbml0QXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UoKSB7XG4gICAgY29uc3QgY29uZmlnT3BDb250ZXh0OiBBc3Npc3RhbnRDb25maWd1cmF0aW9uT3BlcmF0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgZ2V0Q2hhdEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuY2hhdEluc3RhbmNlSWQsXG4gICAgICAgIGdldENoYXRJZDogKCkgPT4gdGhpcy5jaGF0SWQsXG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIHNldFdTUmVxdWVzdHNVcmw6ICh1cmwpID0+IHRoaXMuV1NfUkVRVUVTVF9VUkwgPSB1cmwsXG4gICAgICAgIHNldFJFU1RSZXF1ZXN0c1VybDogKHVybCkgPT4gdGhpcy5SRVNUX1JFUVVFU1RfVVJMID0gdXJsLFxuICAgICAgICBzZXRBc3Npc3RhbnRDb25maWc6IChjb25maWcpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC5uZXh0KGNvbmZpZyksXG4gICAgICAgIHNldEluaXRDb25maWdTdGF0dXM6IChzdGF0dXMpID0+IHRoaXMuaW5pdENvbmZpZyQubmV4dChzdGF0dXMpLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpXG4gICAgfTtcbiAgICB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmluaXQoY29uZmlnT3BDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlIHdpdGggdGhlIG5lY2Vzc2FyeSBvcGVyYXRpb24gY29udGV4dC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBgYXNzaXN0YW50Q29uZmlnJGAgdmFsdWUgYW5kIGBSRVNUX1JFUVVFU1RfVVJMYCBhcmUgYXZhaWxhYmxlLlxuICAgKiBJZiBib3RoIGFyZSByZWFkeSwgaXQgY3JlYXRlcyBhbiBgQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0YCBvYmplY3QgYW5kXG4gICAqIGluaXRpYWxpemVzIHRoZSBgYXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlYCB3aXRoIGl0LiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgcHJvdmlkZXNcbiAgICogbWV0aG9kcyB0byByZXRyaWV2ZSB0aGUgUkVTVCBVUkwsIGFzc2lzdGFudCBjb25maWd1cmF0aW9uLCBhbmQgdG8gc2V0IG1vZGVscyBhbmQgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgdmFsdWVzIGFyZSBub3QgcmVhZHksIGFuIGVycm9yIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwpIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhT3BDb250ZXh0OiBBc3Npc3RhbnRNZXRhZGF0YU9wZXJhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGdldFJlc3RVcmw6ICgpID0+IHRoaXMuUkVTVF9SRVFVRVNUX1VSTCxcbiAgICAgICAgZ2V0QXNzaXN0YW50Q29uZmlnVmFsdWU6ICgpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSxcbiAgICAgICAgc2V0TW9kZWxzOiAobW9kZWxzKSA9PiB7IHRoaXMubW9kZWxzID0gbW9kZWxzOyB9LFxuICAgICAgICBzZXRGdW5jdGlvbnM6IChmdW5jdGlvbnMpID0+IHsgdGhpcy5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7IH1cbiAgICAgIH07XG4gICAgICB0aGlzLmFzc2lzdGFudE1ldGFkYXRhU2VydmljZS5pbml0KG1ldGFkYXRhT3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIEFzc2lzdGFudE1ldGFkYXRhU2VydmljZTogYXNzaXN0YW50Q29uZmlnIG9yIFJFU1RfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFzc2lzdGFudCBUb2tlbnMgVHJhY2tpbmcgU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIHNlcnZpY2UgYnkgcHJvdmlkaW5nIGl0IHdpdGggZnVuY3Rpb25zIHRvIG1hbmFnZSBxdW90YXMsXG4gICAqIHRva2VuIGNvbnN1bXB0aW9uLCB1c2FnZSBtZXRyaWNzLCBhbmQgYXVkaXQgZXZlbnRzLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBhc3Npc3RhbnQgY29uZmlndXJhdGlvblxuICAgKiBhbmQgbW9kZWwgcmV0cmlldmFsLlxuICAgKlxuICAgKiBUaGUgaW5pdGlhbGl6YXRpb24gd2lsbCBvbmx5IHByb2NlZWQgaWYgdGhlIGFzc2lzdGFudCBjb25maWd1cmF0aW9uIGlzIGF2YWlsYWJsZS5cbiAgICogSWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgbm90IHJlYWR5LCBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSkge1xuICAgICAgY29uc3QgdG9rZW5zT3BDb250ZXh0OiBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ09wZXJhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIHNldFF1b3RhOiAocXVvdGEpID0+IHRoaXMucXVvdGEkLm5leHQocXVvdGEpLFxuICAgICAgICBzZXRVc2VyVG9rZW5Db25zdW1wdGlvbjogKGNvbnN1bXB0aW9uKSA9PiB0aGlzLnVzZXJUb2tlbkNvbnN1bXB0aW9uJC5uZXh0KGNvbnN1bXB0aW9uKSxcbiAgICAgICAgc2V0Q2hhdFVzYWdlTWV0cmljczogKG1ldHJpY3MpID0+IHRoaXMuY2hhdFVzYWdlTWV0cmljcyQubmV4dChtZXRyaWNzKSxcbiAgICAgICAgc2V0Q2hhdFRva2VuQ29uc3VtcHRpb246IChjb25zdW1wdGlvbikgPT4gdGhpcy5jaGF0VG9rZW5Db25zdW1wdGlvbiQubmV4dChjb25zdW1wdGlvbiksXG4gICAgICAgIGdlbmVyYXRlQXVkaXRFdmVudDogKHR5cGUsIGRldGFpbHMsIGlkKSA9PiB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudCh0eXBlLCBkZXRhaWxzLCBpZCksXG4gICAgICAgIGdldE1vZGVsOiAoc2VydmljZUlkLCBtb2RlbElkKSA9PiB0aGlzLmdldE1vZGVsKHNlcnZpY2VJZCwgbW9kZWxJZClcbiAgICAgIH07XG4gICAgICB0aGlzLmFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZS5pbml0KHRva2Vuc09wQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50IFdlYlNvY2tldCBGcmFtZXMgU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgdG8gZnVuY3Rpb24gcHJvcGVybHkuXG4gICAqIEl0IGVuc3VyZXMgdGhhdCB0aGUgYXNzaXN0YW50IGNvbmZpZ3VyYXRpb24gYW5kIGNvbm5lY3Rpb24gYXJlIGF2YWlsYWJsZSBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBzZXJ2aWNlLlxuICAgKlxuICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgcHJvdmlkZXMgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgc3RhdGUgbWFuYWdlbWVudCBtZXRob2RzLCBpbmNsdWRpbmc6XG4gICAqIC0gQWNjZXNzaW5nIHRoZSBhc3Npc3RhbnQgY29uZmlndXJhdGlvbiwgY2hhdCBpbnN0YW5jZSBJRCwgc2F2ZWQgY2hhdCBJRCwgYW5kIGNoYXQgaGlzdG9yeS5cbiAgICogLSBNYW5hZ2luZyBzdHJlYW1pbmcgYW5kIHN0b3BwaW5nIGdlbmVyYXRpb24gc3RhdHVzZXMuXG4gICAqIC0gVXBkYXRpbmcgcXVvdGEgYW5kIGNoYXQgdXNhZ2UgbWV0cmljcy5cbiAgICogLSBHZW5lcmF0aW5nIGF1ZGl0IGV2ZW50cy5cbiAgICogLSBNYW5hZ2luZyBzYXZlZCBjaGF0cyAoYWRkaW5nLCB1cGRhdGluZywgYW5kIGxpc3RpbmcpLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIChgYXNzaXN0YW50Q29uZmlnJGAgYW5kIGBjb25uZWN0aW9uYCkgYXJlIG5vdCByZWFkeSwgYW4gZXJyb3IgaXMgbG9nZ2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdEFzc2lzdGFudFdzRnJhbWVzU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuY29ubmVjdGlvbikge1xuICAgICAgY29uc3Qgd3NGcmFtZXNPcENvbnRleHQ6IEFzc2lzdGFudFdzRnJhbWVzQ29udGV4dCA9IHtcbiAgICAgICAgZ2V0QXNzaXN0YW50Q29uZmlnOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIGdldENoYXRJbnN0YW5jZUlkOiAoKSA9PiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgICBnZXRDaGF0SWQ6ICgpID0+IHRoaXMuY2hhdElkLFxuICAgICAgICBnZXRIdWJDb25uZWN0aW9uOiAoKSA9PiB0aGlzLmNvbm5lY3Rpb24sXG4gICAgICAgIGdldENoYXRIaXN0b3J5OiAoKSA9PiB0aGlzLmNoYXRIaXN0b3J5LFxuICAgICAgICBzZXRTdHJlYW1pbmdTdGF0dXM6IChpc1N0cmVhbWluZykgPT4gdGhpcy5zdHJlYW1pbmckLm5leHQoaXNTdHJlYW1pbmcpLFxuICAgICAgICBzZXRDaGF0SGlzdG9yeTogKGhpc3RvcnkpID0+IHsgdGhpcy5jaGF0SGlzdG9yeSA9IGhpc3Rvcnk7IH0sXG4gICAgICAgIHNldFN0b3BwaW5nR2VuZXJhdGlvblN0YXR1czogKGlzU3RvcHBpbmcpID0+IHRoaXMuc3RvcHBpbmdHZW5lcmF0aW9uJC5uZXh0KGlzU3RvcHBpbmcpLFxuICAgICAgICBzZXRTYXZlZENoYXRzRXJyb3JTdGF0dXM6IChoYXNFcnJvcikgPT4gdGhpcy5zYXZlZENoYXRzRXJyb3IkLm5leHQoaGFzRXJyb3IpLFxuICAgICAgICB1cGRhdGVRdW90YTogKHF1b3RhLCBwcm9wYWdhdGVFcnJvcikgPT4gdGhpcy51cGRhdGVRdW90YShxdW90YSwgcHJvcGFnYXRlRXJyb3IpLFxuICAgICAgICB1cGRhdGVDaGF0VXNhZ2VNZXRyaWNzOiAobWV0cmljcykgPT4gdGhpcy51cGRhdGVDaGF0VXNhZ2VNZXRyaWNzKG1ldHJpY3MpLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpLFxuICAgICAgICBhZGRTYXZlZENoYXQ6IChpZCwgbWVzc2FnZXMpID0+IHRoaXMuYWRkU2F2ZWRDaGF0KGlkLCBtZXNzYWdlcyksXG4gICAgICAgIHVwZGF0ZVNhdmVkQ2hhdDogKGlkLCBuYW1lLCBtZXNzYWdlcykgPT4gdGhpcy51cGRhdGVTYXZlZENoYXQoaWQsIG5hbWUsIG1lc3NhZ2VzKSxcbiAgICAgICAgbGlzdFNhdmVkQ2hhdDogKCkgPT4gdGhpcy5saXN0U2F2ZWRDaGF0KCksXG4gICAgICAgIGlzRXhpc3RpbmdTYXZlZENoYXQ6IChpZCkgPT4gdGhpcy5pc0V4aXN0aW5nU2F2ZWRDaGF0KGlkKVxuICAgICAgfTtcbiAgICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmluaXQod3NGcmFtZXNPcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2U6IGNvcmUgZGVwZW5kZW5jaWVzIG5vdCByZWFkeS5cIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdERlYnVnTWVzc2FnZVNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwpIHtcbiAgICAgIGNvbnN0IGRlYnVnTWVzc2FnZU9wQ29udGV4dDogRGVidWdNZXNzYWdlT3BlcmF0aW9uQ29uZmlnID0ge1xuICAgICAgICBnZXRSZXN0VXJsOiAoKSA9PiB0aGlzLlJFU1RfUkVRVUVTVF9VUkxcbiAgICAgIH07XG4gICAgICB0aGlzLmRlYnVnTWVzc2FnZVNlcnZpY2UuaW5pdChkZWJ1Z01lc3NhZ2VPcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgRGVidWdNZXNzYWdlU2VydmljZTogYXNzaXN0YW50Q29uZmlnIG9yIFJFU1RfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgYXNzaXN0YW50cygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEFzc2lzdGFudHNTZXR0aW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqL1xuICBnZXQgY2hhdEluc3RhbmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhdEluc3RhbmNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdCB0aGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCBUaGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKi9cbiAgc2V0Q2hhdEluc3RhbmNlSWQoaW5zdGFuY2VJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fY2hhdEluc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIHRoZSBkaXNjdXNzaW9uIGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvblxuICAgKi9cbiAgZ2V0IGNoYXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGF0SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gR1VJRCBmb3IgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0IGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICogQHBhcmFtIGNoYXRJZCBpZiBwcm92aWRlZCwgaXQgd2lsbCBiZSBjb25zaWRlcmVkIGFzIHRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICovXG4gIGdlbmVyYXRlQ2hhdElkKGNoYXRJZD86IHN0cmluZykge1xuICAgIHRoaXMuX2NoYXRJZCA9IGNoYXRJZCB8fCBndWlkKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY2hhdCBjb25maWcgYnkgbWFuYWdpbmcgT05MWSBzdWItb2JqZWN0ICoqZGVmYXVsdFZhbHVlcyoqIGNvbmZpZ3Mgb2YgdGhlIHN0YW5kYXJkIGFwcCBjb25maWcgKGRlZmluZWQgaW4gdGhlIGN1c3RvbWl6YXRpb24ganNvbiB0YWIgKSBhbmQgdGhlIHVzZXIgcHJlZmVyZW5jZXMuXG4gICAqIFRvIGRvIHNvLCBhIHRyYWNraW5nIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIGF2YWlsYWJsZSB1cGRhdGVzIGluIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdCBvZiB0aGUgc3RhbmRhcmQgYXBwIGNvbmZpZy5cbiAgICogVGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyBvYmplY3QgY29taW5nIGZyb20gXCJzdGFuZGFyZCBhcHAgY29uZmlnXCIgaXMgdXNlZCBhcyBpdCBpcyB3aXRob3V0IGFueSBvdmVycmlkZS5cbiAgICogVGh1cywgdGhlIHVzZXIgcHJlZmVyZW5jZXMgYXJlIHVzZWQgb25seSBmb3IgdGhlIGRlZmF1bHRWYWx1ZXMgb2JqZWN0LlxuICAgKiBUaGlzIHByb3ZpZGUgYSBjZW50cmFsaXplZCB3YXkgdG8gbWFuYWdlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgb2JqZWN0IGJ5IGFkbWlucyBhbmQgZW5zdXJlIGEgdW5pcXVlIGNvbW1vbiBiZWhhdmlvciBmb3IgYWxsIHVzZXJzLlxuICAgKi9cbiAgYXN5bmMgaW5pdENoYXRDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5pbml0Q2hhdENvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY2hhdCBjb25maWcgYW5kIHN0b3JlIGl0cyBkZWZhdWx0VmFsdWVzIGluIHRoZSB1c2VyIHByZWZlcmVuY2VzXG4gICAqIEBwYXJhbSBjb25maWcgIFRoZSB1cGRhdGVkIGNoYXQgY29uZmlnXG4gICAqIEBwYXJhbSBoYXNoZXMgIFRoZSB1cGRhdGVkIGhhc2hlcyB0byBzdG9yZSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlc1xuICAgKiBAcGFyYW0gbm90aWZ5ICBXaGV0aGVyIHRvIG5vdGlmeSB0aGUgdXNlciBhYm91dCB0aGUgdXBkYXRlXG4gICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1cGRhdGUgaXMgc3VjY2Vzc2Z1bFxuICAgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVwZGF0ZSBmYWlsc1xuICAgKi9cbiAgdXBkYXRlQ2hhdENvbmZpZyhcbiAgICBjb25maWc6IENoYXRDb25maWcsXG4gICAgaGFzaGVzPzogeyBcImFwcGxpZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI/OiBzdHJpbmc7IFwic2tpcHBlZC1kZWZhdWx0VmFsdWVzLWhhc2hcIj86IHN0cmluZyB9LFxuICAgIG5vdGlmeSA9IHRydWUsXG4gICAgc3VjY2Vzc0NhbGxiYWNrPzogKCkgPT4gYW55LFxuICAgIGVycm9yQ2FsbGJhY2s/OiAoKSA9PiBhbnlcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS51cGRhdGVDaGF0Q29uZmlnKGNvbmZpZywgaGFzaGVzLCBub3RpZnksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgKi9cbiAgb3ZlcnJpZGVVc2VyKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdXNlck92ZXJyaWRlQWN0aXZlLCB1c2VyT3ZlcnJpZGUgfSA9IGdsb2JhbENvbmZpZztcbiAgICBpZiAoISh1c2VyT3ZlcnJpZGVBY3RpdmUgJiYgdXNlck92ZXJyaWRlKSkge1xuICAgICAgdGhpcy51c2VyT3ZlcnJpZGUkLm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXBhcmUgdGhlIHBheWxvYWQgdG8gc2VuZCB0byB0aGUgT3ZlcnJpZGVVc2VyIG1ldGhvZFxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpbnN0YW5jZUlkOiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgdXNlcjogdXNlck92ZXJyaWRlLnVzZXJuYW1lLFxuICAgICAgZG9tYWluOiB1c2VyT3ZlcnJpZGUuZG9tYWluXG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBPdmVycmlkZVVzZXIgbWV0aG9kIGFuZCBoYW5kbGUgZXJyb3JzXG4gICAgdGhpcy5jb25uZWN0aW9uIS5pbnZva2UoJ092ZXJyaWRlVXNlcicsIGRhdGEpXG4gICAgICAudGhlbigocmVzKSA9PiB0aGlzLnVzZXJPdmVycmlkZSQubmV4dCghIXJlcykpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnZva2luZyBPdmVycmlkZVVzZXI6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vIFJldHVybiBhIHJlc29sdmVkIHByb21pc2UgdG8gaGFuZGxlIHRoZSBlcnJvciBhbmQgcHJldmVudCB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gd2hlbiBubyBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nIGV4aXN0cyBkb3duc3RyZWFtXG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgRmV0Y2ggQVBJIHRvIHJldHJpZXZlIGEgbmV3IG1lc3NhZ2UgZ2l2ZW4gYWxsIHByZXZpb3VzIG1lc3NhZ2VzXG4gICAqL1xuICBmZXRjaChtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSwgcXVlcnk6IFF1ZXJ5KTogT2JzZXJ2YWJsZTxDaGF0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UuZmV0Y2gobWVzc2FnZXMsIHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgbW9kZWxzIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyXG4gICAqL1xuICBsaXN0TW9kZWxzKCk6IE9ic2VydmFibGU8R2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudE1ldGFkYXRhU2VydmljZS5saXN0TW9kZWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gdGhlIHNlcnZlciBBTkQgbWF0Y2hpbmcgZW5hYmxlZCBmdW5jdGlvbnMgaW4gdGhlIGNoYXQgY29uZmlnXG4gICAqL1xuICBsaXN0RnVuY3Rpb25zKCk6IE9ic2VydmFibGU8R2xsbUZ1bmN0aW9uW10gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UubGlzdEZ1bmN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBhc3Npc3RhbnQgYW5zd2VyIGdlbmVyYXRpb24gYW5kIGNhbmNlbHMgYWxsIHRoZSBvbmdvaW5nIGFuZCBwZW5kaW5nIHJlbGF0ZWQgdGFza3NcbiAgICovXG4gIHN0b3BHZW5lcmF0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudFdzRnJhbWVzU2VydmljZS5zdG9wR2VuZXJhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgaGFuZGxlciBmb3IgcXVvdGEgdXBkYXRlcyBlYWNoIHRpbWUgdGhlIGNoYXQgaXMgaW52b2tlZC5cbiAgICogSXQgZW1pdHMgdGhlIHVwZGF0ZWQgcXVvdGEgdG8gdGhlIHF1b3RhJCBzdWJqZWN0LCBlbWl0cyBhY2NvcmRpbmdseSB0aGUgdXBkYXRlZCB1c2VyJ3MgdG9rZW5zIGNvbnN1bXB0aW9uIGFuZCBub3RpZmllcyB0aGUgdXNlciBpZiB0aGUgbWF4IHF1b3RhIGlzIHJlYWNoZWQuXG4gICAqIEBwYXJhbSBxdW90YSBUaGUgdXBkYXRlZCBxdW90YVxuICAgKiBAcGFyYW0gcHJvcGFnYXRlRXJyb3IgV2hldGhlciB0byBwcm9wYWdhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXJcbiAgICovXG4gIHVwZGF0ZVF1b3RhKHF1b3RhOiBRdW90YSwgcHJvcGFnYXRlRXJyb3IgPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlLnVwZGF0ZVF1b3RhKHF1b3RhLCBwcm9wYWdhdGVFcnJvcik7XG4gIH1cblxuICAvKipcbiAgICogQSBoYW5kbGVyIGZvciBjaGF0IHVzYWdlIG1ldHJpY3MgZWFjaCB0aW1lIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgcmVzcG9uc2UgaXMgY29tcGxldGVkLlxuICAgKiBJdCBlbWl0cyB0aGUgY2hhdCB1c2FnZSBtZXRyaWNzIHRvIHRoZSBjaGF0VXNhZ2VNZXRyaWNzJCBzdWJqZWN0LCBlbWl0cyBhY2NvcmRpbmdseSB0aGUgdXBkYXRlZCBjaGF0J3MgdG9rZW5zIGNvbnN1bXB0aW9uXG4gICAqIEBwYXJhbSBjaGF0VXNhZ2VNZXRyaWNzIFRoZSBjaGF0IHVzYWdlIG1ldHJpY3NcbiAgICovXG4gIHVwZGF0ZUNoYXRVc2FnZU1ldHJpY3MoY2hhdFVzYWdlTWV0cmljczogQ2hhdFVzYWdlTWV0cmljcyk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlLnVwZGF0ZUNoYXRVc2FnZU1ldHJpY3MoY2hhdFVzYWdlTWV0cmljcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb2RlbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdpdmVuIChzZXJ2aWNlSWQgKyBtb2RlbElkKVxuICAgKiBJZiBhIG1vZGVsIGlzIG5vdCBmb3VuZCwgYW4gZXJyb3IgbWVzc2FnZSBpcyByZXR1cm5lZFxuICAgKiBAcGFyYW0gc2VydmljZUlkIFRoZSBzZXJ2aWNlSWQgb2YgdGhlIG1vZGVsXG4gICAqIEBwYXJhbSBtb2RlbElkIFRoZSBtb2RlbElkIG9mIHRoZSBtb2RlbFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWwgZGVzY3JpcHRpb25cbiAgICovXG4gIGdldE1vZGVsKHNlcnZpY2VJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBHbGxtTW9kZWxEZXNjcmlwdGlvbiB8IHVuZGVmaW5lZHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxzPy5maW5kKG0gPT4gbS5zZXJ2aWNlSWQgPT09IHNlcnZpY2VJZCAmJiBtLm1vZGVsSWQgPT09IG1vZGVsSWQpO1xuICAgIC8vIEhhbmRsZSBvYnNvbGV0ZSBjb25maWdcbiAgICBpZighbW9kZWwpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoYEZBVEFMIEVSUk9SIDogVGhlIG1vZGVsIChzZXJ2aWNlSWQgPSAnJHtzZXJ2aWNlSWR9JywgbW9kZWxJZCA9ICcke21vZGVsSWR9JykgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4gUGxlYXNlIGNvbnRhY3QgYW4gYWRtaW4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZBVEFMIEVSUk9SIDogVGhlIG1vZGVsIChzZXJ2aWNlSWQgPSAnJHtzZXJ2aWNlSWR9JywgbW9kZWxJZCA9ICcke21vZGVsSWR9JykgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGxpc3Qgc2F2ZWQgY2hhdHMgYmVsb25naW5nIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIGFzc2lzdGFudFxuICAgKi9cbiAgbGlzdFNhdmVkQ2hhdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmxpc3RDaGF0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2F2ZWQgY2hhdCB3aXRoIHRoZSBnaXZlbiBpZCwgaWYgZXhpc3RzLiBPdGhlcndpc2UsIHJldHVybiB1bmRlZmluZWRcbiAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgc2F2ZWQgY2hhdFxuICAgKi9cbiAgZ2V0U2F2ZWRDaGF0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdEhpc3RvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zYXZlZENoYXRzU2VydmljZS5nZXRDaGF0QnlJZChpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBzYXZlZCBjaGF0IHdpdGggdGhlIGdpdmVuIGlkIGFscmVhZHkgZXhpc3RzXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc2F2ZWQgY2hhdCBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNFeGlzdGluZ1NhdmVkQ2hhdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuaXNFeGlzdGluZ0NoYXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBjaGF0IHdpdGggdGhlIGdpdmVuIG1lc3NhZ2VzXG4gICAqIEBwYXJhbSBtZXNzYWdlcyBUaGUgbWVzc2FnZXMgdG8gYWRkIHRvIHRoZSBzYXZlZCBjaGF0IGluZGV4XG4gICAqIEByZXR1cm5zIFRoZSBzYXZlZCBjaGF0XG4gICAqL1xuICBhZGRTYXZlZENoYXQoaWQ6IHN0cmluZywgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10pOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuYWRkQ2hhdChpZCwgbWVzc2FnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNhdmVkIGNoYXQgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5ldyBuYW1lIG9mIHRoZSBzYXZlZCBjaGF0LCBpZiBwcm92aWRlZFxuICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIHVwZGF0ZSB0aGUgc2F2ZWQgY2hhdCBoaXN0b3J5LCBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzYXZlZCBjaGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXG4gICAqL1xuICB1cGRhdGVTYXZlZENoYXQoaWQ6IHN0cmluZywgbmFtZT86IHN0cmluZywgbWVzc2FnZXM/OiBDaGF0TWVzc2FnZVtdKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLnVwZGF0ZUNoYXQoaWQsIG5hbWUsIG1lc3NhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWxrIGRlbGV0ZSBvZiBzYXZlZCBjaGF0cyBtYXRjaGluZyB0aGUgZ2l2ZW4gaWRzXG4gICAqIEBwYXJhbSBpZHMgTGlzdCBvZiBpZHMgb2YgdGhlIHNhdmVkIGNoYXRzIHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRlbGV0ZWQgY2hhdHNcbiAgICovXG4gIGRlbGV0ZVNhdmVkQ2hhdChpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxEZWxldGVTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmRlbGV0ZUNoYXQoaWRzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWJ1Z01lc3NhZ2UobWVzc2FnZTogRGVidWdNZXNzYWdlKTogT2JzZXJ2YWJsZTxLdk9iamVjdCB8IExpc3RPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWJ1Z01lc3NhZ2VTZXJ2aWNlLmdldERlYnVnTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIG91dC1vZi10aGUtYm94IGhhbmRsZXJzXG4gICAqIEl0IGlzIGEgcGxhY2Vob2xkZXIgZm9yIG5vbi1zdHJlYW1pbmcgc2NlbmFyaW9zLCB3aGVyZSB5b3UgaW52b2tlIGEgc3BlY2lmaWMgaHViIG1ldGhvZCwgYW5kIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBmcmFtZSBtZXNzYWdlKHMpXG4gICAqL1xuICBpbml0TWVzc2FnZUhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmluaXRNZXNzYWdlSGFuZGxlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBhbmQgcmVnaXN0ZXIgdGhlIGVudGlyZSBfbWVzc2FnZUhhbmRsZXJzIG1hcCBieSBtZXJnaW5nIHRoZSBwcm92aWRlZCBtYXAgd2l0aCB0aGUgZGVmYXVsdCBvbmVcbiAgICogQHBhcmFtIF9tZXNzYWdlSGFuZGxlcnNcbiAgICovXG4gIG92ZXJyaWRlTWVzc2FnZUhhbmRsZXJzPFQ+KF9tZXNzYWdlSGFuZGxlcnM6IE1hcDxzdHJpbmcsIE1lc3NhZ2VIYW5kbGVyPFQ+Pik6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLm92ZXJyaWRlTWVzc2FnZUhhbmRsZXJzKF9tZXNzYWdlSGFuZGxlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIGV2ZW50LlxuICAgKiBJZiBhIGxpc3RlbmVyIGZvciB0aGlzIHNhbWUgZXZlbnQgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICogSWYgdGhlIGxpc3RlbmVyIGhhcyBcImlzR2xvYmFsSGFuZGxlclwiIHNldCB0byB0cnVlLCBpdCB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8gdGhlIGh1YiBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0gZXZlbnROYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIHJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9yXG4gICAqIEBwYXJhbSBldmVudEhhbmRsZXIgVGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gICAqL1xuICBhZGRNZXNzYWdlSGFuZGxlcjxUPihldmVudE5hbWU6IHN0cmluZywgZXZlbnRIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmFkZE1lc3NhZ2VIYW5kbGVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpYyBldmVudCBmcm9tIHRoZSBfbWVzc2FnZUhhbmRsZXJzIG1hcCBhbmQgdW5zdWJzY3JpYmUgZnJvbSByZWNlaXZpbmcgbWVzc2FnZXMgZm9yIHRoaXMgZXZlbnQgZnJvbSB0aGUgU2lnbmFsUiBodWIuXG4gICAqIEBwYXJhbSBldmVudE5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lciBmb3JcbiAgICovXG4gIHJlbW92ZU1lc3NhZ2VIYW5kbGVyKGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UucmVtb3ZlTWVzc2FnZUhhbmRsZXIoZXZlbnROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbm5lY3Rpb24gdG8gdGhlIHNpZ25hbFIgd2Vic29ja2V0IGFuZCByZWdpc3RlciBkZWZhdWx0IGxpc3RlbmVycyB0byB0aGUgbWV0aG9kcyBkZWZpbmVkIGluIHRoZSBzZXJ2ZXIgaHViIGNsYXNzXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgY29ubmVjdGlvbi4gSXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9wdGlvbnNcbiAgICogQHBhcmFtIGxvZ0xldmVsIERlZmluZSB0aGUgbG9nIGxldmVsIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBidWlsdFxuICAgKi9cbiAgYnVpbGRDb25uZWN0aW9uKG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5idWlsZENvbm5lY3Rpb24ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIGNvbm5lY3Rpb25cbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgc3RhcnRlZFxuICAgKi9cbiAgc3RhcnRDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5zdGFydENvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSBjb25uZWN0aW9uXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHN0b3BwZWRcbiAgICovXG4gIHN0b3BDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5zdG9wQ29ubmVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGF1ZGl0IGV2ZW50IHdpdGggdGhlIGdpdmVuIHR5cGUgYW5kIGRldGFpbHMuIFRoZSBnZW5lcmF0ZWQgYXVkaXQgZXZlbnQgaXMgc2VudCBhZnRlcndhcmRzIHZpYSB0aGUgQXVkaXRXZWJTZXJ2aWNlXG4gICAqIEBwYXJhbSB0eXBlIEF1ZGl0IGV2ZW50IHR5cGVcbiAgICogQHBhcmFtIGRldGFpbHMgQXVkaXQgZXZlbnQgZGV0YWlsc1xuICAgKiBAcGFyYW0gaWQgQWN0aW9ucyAoc2F2ZWRDaGF0IGRlbGV0ZS9yZW5hbWUvLi4uKSBtYXkgb2NjdXIgb24gYSBzcGVjaWZpYyBjaGF0IGRpZmZlcmVudCB0aGFuIHRoZSBjdXJyZW50IG9uZSBzdG9yZWQgaW4gdGhpcyBzZXJ2aWNlLCBzbyB0aGUgY2hhdCBpZCBjYW4gYmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlQXVkaXRFdmVudCh0eXBlOiBzdHJpbmcsIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlkPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYmFzZURldGFpbHMgPSB7XG4gICAgICBcInVybFwiOiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpLFxuICAgICAgXCJhcHBcIjogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBcInVzZXItaWRcIjogdGhpcy5wcmluY2lwYWxTZXJ2aWNlLnByaW5jaXBhbD8udXNlcklkLFxuICAgICAgXCJpbnN0YW5jZS1pZFwiOiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgXCJjaGF0LWlkXCI6IGlkIHx8IHRoaXMuY2hhdElkLFxuICAgICAgXCJzZXJ2aWNlLWlkXCI6IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5zZXJ2aWNlX2lkLFxuICAgICAgXCJtb2RlbC1pZFwiOiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMubW9kZWxfaWRcbiAgICB9O1xuXG4gICAgaWYgKHR5cGUgPT09IFwiYXN0LW1lc3NhZ2UubWVzc2FnZVwiKSB7XG4gICAgICBiYXNlRGV0YWlsc1tcImlzLXVzZXItaW5wdXRcIl0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhdWRpdCA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgLi4uYmFzZURldGFpbHMsXG4gICAgICAgIC4uLmRldGFpbHNcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgQXVkaXQubm90aWZ5KGF1ZGl0KTtcbiAgfVxuXG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { CommonModule } from "@angular/common";
2
2
  import { Component, Input } from "@angular/core";
3
- import * as Prism from 'prismjs';
4
3
  import { provideTranslocoScope, TranslocoPipe } from '@jsverse/transloco';
4
+ import * as Prism from 'prismjs';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../services/ui.service";
7
7
  import * as i2 from "../debug-message.service";
@@ -40,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40
40
  }], parentColor: [{
41
41
  type: Input
42
42
  }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2RlYnVnLW1lc3NhZ2UvZGVidWctbWVzc2FnZS1kZXRhaWxzL2RlYnVnLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kZWJ1Zy1tZXNzYWdlL2RlYnVnLW1lc3NhZ2UtZGV0YWlscy9kZWJ1Zy1tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBYzFFLE1BQU0sT0FBTyw0QkFBNEI7SUFLdkMsWUFDUyxFQUFhLEVBQ2IsbUJBQXdDO1FBRHhDLE9BQUUsR0FBRixFQUFFLENBQVc7UUFDYix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBTHhDLFVBQUssR0FBVyxDQUFDLENBQUMsQ0FBRSwwQkFBMEI7UUFDOUMsZ0JBQVcsR0FBVyxFQUFFLENBQUMsQ0FBRSw2QkFBNkI7SUFLN0QsQ0FBQztJQUVMLGVBQWU7UUFDYixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUE7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUEyQjtRQUNyQyxJQUFHLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDOytHQXpCVSw0QkFBNEI7bUdBQTVCLDRCQUE0Qiw2SUFGNUIsQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLDBCQ2YxRCxzbkRBeUJBLG0zSERSYSw0QkFBNEIsOEdBSDdCLFlBQVksNFlBQUUsYUFBYTs7NEZBRzFCLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSwwQkFBMEIsY0FHeEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxhQUMzQixDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0hBRy9DLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0ICogYXMgUHJpc20gZnJvbSAncHJpc21qcyc7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvU2NvcGUsIFRyYW5zbG9jb1BpcGUgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuXG5pbXBvcnQgeyBLdk9iamVjdCwgTGlzdE9iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3VpLnNlcnZpY2VcIjtcbmltcG9ydCB7IERlYnVnTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiLi4vZGVidWctbWVzc2FnZS5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzcS1kZWJ1Zy1tZXNzYWdlLWRldGFpbHNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9kZWJ1Zy1tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RlYnVnLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsb2NvUGlwZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVUcmFuc2xvY29TY29wZSgnY2hhdC1kZWJ1Zy1tZXNzYWdlJyldXG59KVxuZXhwb3J0IGNsYXNzIERlYnVnTWVzc2FnZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgZGF0YTogKEt2T2JqZWN0IHwgTGlzdE9iamVjdClbXSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgbGV2ZWw6IG51bWJlciA9IDA7ICAvLyBUcmFjayB0aGUgbmVzdGluZyBsZXZlbFxuICBASW5wdXQoKSBwYXJlbnRDb2xvcjogc3RyaW5nID0gJyc7ICAvLyBUcmFjayB0aGUgcGFyZW50IHJvdyBjb2xvclxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB1aTogVUlTZXJ2aWNlLFxuICAgIHB1YmxpYyBkZWJ1Z01lc3NhZ2VTZXJ2aWNlOiBEZWJ1Z01lc3NhZ2VTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIFByaXNtLmhpZ2hsaWdodEFsbCgpO1xuICB9XG5cbiAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gIH1cblxuICBnZXRSb3dDbGFzcyhpdGVtOiBLdk9iamVjdCB8IExpc3RPYmplY3QpOiBzdHJpbmcge1xuICAgIGlmKGl0ZW0uaXNFcnJvcikgcmV0dXJuICdyb3ctZXJyb3InO1xuICAgIHJldHVybiB0aGlzLnBhcmVudENvbG9yO1xuICB9XG5cbiAgY29weVRvQ2xpcGJvYXJkKGNvZGU6IGFueSkge1xuICAgIHRoaXMudWkuY29weVRvQ2xpcGJvYXJkKEpTT04uc3RyaW5naWZ5KGNvZGUsIG51bGwsIDIpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhOyBsZXQgaSA9IGluZGV4XCI+XG4gIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdLVidcIiBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhpdGVtKVwiIGNsYXNzPVwiZC1mbGV4IHctMTAwIGt2LW9iamVjdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJrdi1rZXlcIj57eyBpdGVtLmRhdGEua2V5IH19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImt2LXZhbHVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPYmplY3QoaXRlbS5kYXRhLnZhbHVlKTsgZWxzZSBub3JtYWxWYWx1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21cIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKGl0ZW0uZGF0YS52YWx1ZSlcIj48aSBjbGFzcz1cImZhciBmYS1mdyBmYS1jbGlwYm9hcmRcIj48L2k+IHt7ICdjaGF0RGVidWdNZXNzYWdlLmNvcHlDb2RlJyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwcmUgY2xhc3M9XCJsYW5ndWFnZS1qc29uIG15LTAgcm91bmRlZC0wIHJvdW5kZWQtYm90dG9tXCI+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS1qc29uXCI+e3sgaXRlbS5kYXRhLnZhbHVlIHwganNvbiB9fTwvY29kZT48L3ByZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsVmFsdWU+PGRpdiBjbGFzcz1cImRhdGEtdmFsdWVcIj57eyBpdGVtLmRhdGEudmFsdWUgfX08L2Rpdj48L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ0xJU1QnXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MoaXRlbSlcIiBjbGFzcz1cImQtZmxleCB3LTEwMCBsaXN0LW9iamVjdFwiPlxuICAgICA8ZGl2IGNsYXNzPVwibGlzdC1uYW1lIHctMTAwXCIgKGNsaWNrKT1cIml0ZW0uZXhwYW5kZWQ9IWl0ZW0uZXhwYW5kZWRcIiAqbmdJZj1cImxldmVsID4gMFwiPiA8IS0tcmVtb3ZlIGZpcnN0IGxldmVsIHRvZ2dsZSBzaW5jZSBhbHdheXMgaXQgaXMgYSBMSVNUIG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIG5hbWUgb2YgdGhlIHBhcmVudCwgb3RoZXJ3aXNlLCAyIHNpbWlsYXIgdGl0bGUncyBkaXYgZHVwbGljYXRlZC0tPlxuICAgICAgPGkgY2xhc3M9XCJmYXNcIiBbY2xhc3MuZmEtY2hldnJvbi11cF09XCJpdGVtLmV4cGFuZGVkXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhaXRlbS5leHBhbmRlZFwiPjwvaT5cbiAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1zIHctMTAwXCIgKm5nSWY9XCJpdGVtLmV4cGFuZGVkXCI+XG4gICAgICA8c3EtZGVidWctbWVzc2FnZS1kZXRhaWxzIFtkYXRhXT1cIml0ZW0uaXRlbXNcIiBbbGV2ZWxdPVwibGV2ZWwgKyAxXCIgW3BhcmVudENvbG9yXT1cImdldFJvd0NsYXNzKGl0ZW0pXCI+PC9zcS1kZWJ1Zy1tZXNzYWdlLWRldGFpbHM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2RlYnVnLW1lc3NhZ2UvZGVidWctbWVzc2FnZS1kZXRhaWxzL2RlYnVnLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kZWJ1Zy1tZXNzYWdlL2RlYnVnLW1lc3NhZ2UtZGV0YWlscy9kZWJ1Zy1tZXNzYWdlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQzs7Ozs7QUFjakMsTUFBTSxPQUFPLDRCQUE0QjtJQUt2QyxZQUNTLEVBQWEsRUFDYixtQkFBd0M7UUFEeEMsT0FBRSxHQUFGLEVBQUUsQ0FBVztRQUNiLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFMeEMsVUFBSyxHQUFXLENBQUMsQ0FBQyxDQUFFLDBCQUEwQjtRQUM5QyxnQkFBVyxHQUFXLEVBQUUsQ0FBQyxDQUFFLDZCQUE2QjtJQUs3RCxDQUFDO0lBRUwsZUFBZTtRQUNiLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQTtJQUNwRCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQTJCO1FBQ3JDLElBQUcsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7K0dBekJVLDRCQUE0QjttR0FBNUIsNEJBQTRCLDZJQUY1QixDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUMsMEJDZjFELHNuREF5QkEsbTNIRFJhLDRCQUE0Qiw4R0FIN0IsWUFBWSw0WUFBRSxhQUFhOzs0RkFHMUIsNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNFLDBCQUEwQixjQUd4QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLGFBQzNCLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnSEFHL0MsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvU2NvcGUsIFRyYW5zbG9jb1BpcGUgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuaW1wb3J0ICogYXMgUHJpc20gZnJvbSAncHJpc21qcyc7XG5cbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy91aS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBLdk9iamVjdCwgTGlzdE9iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVidWdNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuLi9kZWJ1Zy1tZXNzYWdlLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRlYnVnLW1lc3NhZ2UtZGV0YWlsc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RlYnVnLW1lc3NhZ2UtZGV0YWlscy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZGVidWctbWVzc2FnZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xvY29QaXBlXSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdjaGF0LWRlYnVnLW1lc3NhZ2UnKV1cbn0pXG5leHBvcnQgY2xhc3MgRGVidWdNZXNzYWdlRGV0YWlsc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGRhdGE6IChLdk9iamVjdCB8IExpc3RPYmplY3QpW10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGxldmVsOiBudW1iZXIgPSAwOyAgLy8gVHJhY2sgdGhlIG5lc3RpbmcgbGV2ZWxcbiAgQElucHV0KCkgcGFyZW50Q29sb3I6IHN0cmluZyA9ICcnOyAgLy8gVHJhY2sgdGhlIHBhcmVudCByb3cgY29sb3JcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdWk6IFVJU2VydmljZSxcbiAgICBwdWJsaWMgZGVidWdNZXNzYWdlU2VydmljZTogRGVidWdNZXNzYWdlU2VydmljZVxuICApIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBQcmlzbS5oaWdobGlnaHRBbGwoKTtcbiAgfVxuXG4gIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICB9XG5cbiAgZ2V0Um93Q2xhc3MoaXRlbTogS3ZPYmplY3QgfCBMaXN0T2JqZWN0KTogc3RyaW5nIHtcbiAgICBpZihpdGVtLmlzRXJyb3IpIHJldHVybiAncm93LWVycm9yJztcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRDb2xvcjtcbiAgfVxuXG4gIGNvcHlUb0NsaXBib2FyZChjb2RlOiBhbnkpIHtcbiAgICB0aGlzLnVpLmNvcHlUb0NsaXBib2FyZChKU09OLnN0cmluZ2lmeShjb2RlLCBudWxsLCAyKSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICA8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09PSAnS1YnXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MoaXRlbSlcIiBjbGFzcz1cImQtZmxleCB3LTEwMCBrdi1vYmplY3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwia3Yta2V5XCI+e3sgaXRlbS5kYXRhLmtleSB9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJrdi12YWx1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT2JqZWN0KGl0ZW0uZGF0YS52YWx1ZSk7IGVsc2Ugbm9ybWFsVmFsdWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtXCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZChpdGVtLmRhdGEudmFsdWUpXCI+PGkgY2xhc3M9XCJmYXIgZmEtZncgZmEtY2xpcGJvYXJkXCI+PC9pPiB7eyAnY2hhdERlYnVnTWVzc2FnZS5jb3B5Q29kZScgfCB0cmFuc2xvY28gfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cHJlIGNsYXNzPVwibGFuZ3VhZ2UtanNvbiBteS0wIHJvdW5kZWQtMCByb3VuZGVkLWJvdHRvbVwiPjxjb2RlIGNsYXNzPVwibGFuZ3VhZ2UtanNvblwiPnt7IGl0ZW0uZGF0YS52YWx1ZSB8IGpzb24gfX08L2NvZGU+PC9wcmU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI25vcm1hbFZhbHVlPjxkaXYgY2xhc3M9XCJkYXRhLXZhbHVlXCI+e3sgaXRlbS5kYXRhLnZhbHVlIH19PC9kaXY+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdMSVNUJ1wiIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzKGl0ZW0pXCIgY2xhc3M9XCJkLWZsZXggdy0xMDAgbGlzdC1vYmplY3RcIj5cbiAgICAgPGRpdiBjbGFzcz1cImxpc3QtbmFtZSB3LTEwMFwiIChjbGljayk9XCJpdGVtLmV4cGFuZGVkPSFpdGVtLmV4cGFuZGVkXCIgKm5nSWY9XCJsZXZlbCA+IDBcIj4gPCEtLXJlbW92ZSBmaXJzdCBsZXZlbCB0b2dnbGUgc2luY2UgYWx3YXlzIGl0IGlzIGEgTElTVCBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQsIG90aGVyd2lzZSwgMiBzaW1pbGFyIHRpdGxlJ3MgZGl2IGR1cGxpY2F0ZWQtLT5cbiAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW2NsYXNzLmZhLWNoZXZyb24tdXBdPVwiaXRlbS5leHBhbmRlZFwiIFtjbGFzcy5mYS1jaGV2cm9uLWRvd25dPVwiIWl0ZW0uZXhwYW5kZWRcIj48L2k+XG4gICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtcyB3LTEwMFwiICpuZ0lmPVwiaXRlbS5leHBhbmRlZFwiPlxuICAgICAgPHNxLWRlYnVnLW1lc3NhZ2UtZGV0YWlscyBbZGF0YV09XCJpdGVtLml0ZW1zXCIgW2xldmVsXT1cImxldmVsICsgMVwiIFtwYXJlbnRDb2xvcl09XCJnZXRSb3dDbGFzcyhpdGVtKVwiPjwvc3EtZGVidWctbWVzc2FnZS1kZXRhaWxzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -34,19 +34,16 @@ export class DebugMessageService {
34
34
  acc[key] = String(value);
35
35
  return acc;
36
36
  }, {}));
37
- return from(get(`plugin/${config.getRestUrl()}`, searchParams)).pipe(map(res => res?.debugMessages[0]?.content), catchError((error) => {
37
+ return from(get(`api/v1/plugin/${config.getRestUrl()}`, searchParams)).pipe(map(res => res?.debugMessages[0]?.content), catchError((error) => {
38
38
  const errorMsg = 'Error occurred while calling the debugMessageList API: ' + error.error?.errorMessage;
39
39
  console.error('DebugMessageService: ' + errorMsg);
40
40
  return throwError(() => error);
41
41
  }));
42
42
  }
43
43
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageService, providedIn: 'root' }); }
44
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageService }); }
45
45
  }
46
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageService, decorators: [{
47
- type: Injectable,
48
- args: [{
49
- providedIn: 'root'
50
- }]
47
+ type: Injectable
51
48
  }], ctorParameters: () => [] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZGVidWctbWVzc2FnZS9kZWJ1Zy1tZXNzYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFjdEMsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QixnQkFBZSxDQUFDO0lBRVQsSUFBSSxDQUFDLE1BQW1DO1FBQzdDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUN6RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNILENBQUM7SUFFTSxlQUFlLENBQUMsT0FBcUI7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUM7UUFFckMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25GLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3hELE1BQU0sSUFBSSxHQUFHO1lBQ1gsTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixNQUFNO1lBQ04sY0FBYztZQUNkLFdBQVc7U0FDWixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN6RixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQTRCLENBQUMsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBTSxVQUFVLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2RSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUMxQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLFFBQVEsR0FBRyx5REFBeUQsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztZQUN2RyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQS9DVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHtcbiAgRGVidWdNZXNzYWdlLFxuICBMaXN0T2JqZWN0XG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBEZWJ1Z01lc3NhZ2VPcGVyYXRpb25Db25maWcge1xuICBnZXRSZXN0VXJsOiAoKSA9PiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERlYnVnTWVzc2FnZVNlcnZpY2Uge1xuICBwcml2YXRlIG9wZXJhdGlvbkNvbmZpZzogRGVidWdNZXNzYWdlT3BlcmF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgaW5pdChjb25maWc6IERlYnVnTWVzc2FnZU9wZXJhdGlvbkNvbmZpZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbkNvbmZpZykge1xuICAgICAgY29uc29sZS53YXJuKCdEZWJ1Z01lc3NhZ2VTZXJ2aWNlIGFscmVhZHkgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3BlcmF0aW9uQ29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVJbml0aWFsaXplZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3BlcmF0aW9uQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlYnVnTWVzc2FnZVNlcnZpY2Ugbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVidWdNZXNzYWdlKG1lc3NhZ2U6IERlYnVnTWVzc2FnZSk6IE9ic2VydmFibGU8TGlzdE9iamVjdCB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLm9wZXJhdGlvbkNvbmZpZyE7XG5cbiAgICBpZiAoIW1lc3NhZ2UgfHwgIW1lc3NhZ2UuY2hhdElkIHx8ICFtZXNzYWdlLmRlYnVnTWVzc2FnZUlkIHx8ICFtZXNzYWdlLmV4ZWN1dGlvbklkKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJJbnZhbGlkIG1lc3NhZ2UgcHJvdmlkZWQgZm9yIGRlYnVnIHJldHJpZXZhbC5cIikpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2hhdElkLCBkZWJ1Z01lc3NhZ2VJZCwgZXhlY3V0aW9uSWQgfSA9IG1lc3NhZ2U7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkZWJ1Z01lc3NhZ2VMaXN0XCIsXG4gICAgICBjaGF0SWQsXG4gICAgICBkZWJ1Z01lc3NhZ2VJZCxcbiAgICAgIGV4ZWN1dGlvbklkXG4gICAgfTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikpO1xuXG4gICAgcmV0dXJuIGZyb20oZ2V0PGFueT4oYHBsdWdpbi8ke2NvbmZpZy5nZXRSZXN0VXJsKCl9YCwgc2VhcmNoUGFyYW1zKSkucGlwZShcbiAgICAgIG1hcChyZXMgPT4gcmVzPy5kZWJ1Z01lc3NhZ2VzWzBdPy5jb250ZW50KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTXNnID0gJ0Vycm9yIG9jY3VycmVkIHdoaWxlIGNhbGxpbmcgdGhlIGRlYnVnTWVzc2FnZUxpc3QgQVBJOiAnICsgZXJyb3IuZXJyb3I/LmVycm9yTWVzc2FnZTtcbiAgICAgICAgY29uc29sZS5lcnJvcignRGVidWdNZXNzYWdlU2VydmljZTogJyArIGVycm9yTXNnKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZGVidWctbWVzc2FnZS9kZWJ1Zy1tZXNzYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFZdEMsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QixnQkFBZSxDQUFDO0lBRVQsSUFBSSxDQUFDLE1BQW1DO1FBQzdDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUN6RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNILENBQUM7SUFFTSxlQUFlLENBQUMsT0FBcUI7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWdCLENBQUM7UUFFckMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25GLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3hELE1BQU0sSUFBSSxHQUFHO1lBQ1gsTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixNQUFNO1lBQ04sY0FBYztZQUNkLFdBQVc7U0FDWixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN6RixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQTRCLENBQUMsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBTSxpQkFBaUIsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQzFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE1BQU0sUUFBUSxHQUFHLHlEQUF5RCxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO1lBQ3ZHLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDbEQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7K0dBL0NVLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHtcbiAgRGVidWdNZXNzYWdlLFxuICBMaXN0T2JqZWN0XG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBEZWJ1Z01lc3NhZ2VPcGVyYXRpb25Db25maWcge1xuICBnZXRSZXN0VXJsOiAoKSA9PiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWJ1Z01lc3NhZ2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBvcGVyYXRpb25Db25maWc6IERlYnVnTWVzc2FnZU9wZXJhdGlvbkNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIGluaXQoY29uZmlnOiBEZWJ1Z01lc3NhZ2VPcGVyYXRpb25Db25maWcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVyYXRpb25Db25maWcpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGVidWdNZXNzYWdlU2VydmljZSBhbHJlYWR5IGluaXRpYWxpemVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZXJhdGlvbkNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlSW5pdGlhbGl6ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZXJhdGlvbkNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZWJ1Z01lc3NhZ2VTZXJ2aWNlIG5vdCBpbml0aWFsaXplZC4gQ2FsbCBpbml0KCkgZmlyc3QuJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldERlYnVnTWVzc2FnZShtZXNzYWdlOiBEZWJ1Z01lc3NhZ2UpOiBPYnNlcnZhYmxlPExpc3RPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5vcGVyYXRpb25Db25maWchO1xuXG4gICAgaWYgKCFtZXNzYWdlIHx8ICFtZXNzYWdlLmNoYXRJZCB8fCAhbWVzc2FnZS5kZWJ1Z01lc3NhZ2VJZCB8fCAhbWVzc2FnZS5leGVjdXRpb25JZCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKFwiSW52YWxpZCBtZXNzYWdlIHByb3ZpZGVkIGZvciBkZWJ1ZyByZXRyaWV2YWwuXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNoYXRJZCwgZGVidWdNZXNzYWdlSWQsIGV4ZWN1dGlvbklkIH0gPSBtZXNzYWdlO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiZGVidWdNZXNzYWdlTGlzdFwiLFxuICAgICAgY2hhdElkLFxuICAgICAgZGVidWdNZXNzYWdlSWQsXG4gICAgICBleGVjdXRpb25JZFxuICAgIH07XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pKTtcblxuICAgIHJldHVybiBmcm9tKGdldDxhbnk+KGBhcGkvdjEvcGx1Z2luLyR7Y29uZmlnLmdldFJlc3RVcmwoKX1gLCBzZWFyY2hQYXJhbXMpKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiByZXM/LmRlYnVnTWVzc2FnZXNbMF0/LmNvbnRlbnQpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSAnRXJyb3Igb2NjdXJyZWQgd2hpbGUgY2FsbGluZyB0aGUgZGVidWdNZXNzYWdlTGlzdCBBUEk6ICcgKyBlcnJvci5lcnJvcj8uZXJyb3JNZXNzYWdlO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEZWJ1Z01lc3NhZ2VTZXJ2aWNlOiAnICsgZXJyb3JNc2cpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,68 @@
1
+ import { Directive, ElementRef, inject, input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class CopyToClipboardDirective {
4
+ constructor() {
5
+ this.el = inject((ElementRef));
6
+ this.text = input("");
7
+ }
8
+ onClick() {
9
+ if (!this.text()) {
10
+ return;
11
+ }
12
+ // The text is encoded from the markdown-it plugin, so we decode it first
13
+ const decodedText = decodeURIComponent(this.text());
14
+ if (navigator.clipboard && navigator.clipboard.writeText) {
15
+ navigator.clipboard
16
+ .writeText(decodedText)
17
+ .then(() => {
18
+ // Provide visual feedback to the user
19
+ const originalHTML = this.el.nativeElement.innerHTML;
20
+ this.el.nativeElement.innerHTML =
21
+ '<svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5607 3.99999L15.0303 4.53032L6.23744 13.3232C5.55403 14.0066 4.44599 14.0066 3.76257 13.3232L4.2929 12.7929L3.76257 13.3232L0.969676 10.5303L0.439346 9.99999L1.50001 8.93933L2.03034 9.46966L4.82323 12.2626C4.92086 12.3602 5.07915 12.3602 5.17678 12.2626L13.9697 3.46966L14.5 2.93933L15.5607 3.99999Z" fill="currentColor"></path></svg>';
22
+ setTimeout(() => {
23
+ this.el.nativeElement.innerHTML = originalHTML;
24
+ }, 2000);
25
+ })
26
+ .catch((err) => {
27
+ console.error("Failed to copy text: ", err);
28
+ });
29
+ }
30
+ else {
31
+ // Fallback for older browsers
32
+ const textarea = document.createElement("textarea");
33
+ textarea.value = decodedText;
34
+ textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in MS Edge.
35
+ textarea.style.opacity = "0";
36
+ document.body.appendChild(textarea);
37
+ textarea.focus();
38
+ textarea.select();
39
+ try {
40
+ document.execCommand("copy");
41
+ // Provide visual feedback to the user
42
+ const originalHTML = this.el.nativeElement.innerHTML;
43
+ this.el.nativeElement.innerHTML =
44
+ '<svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" aria-hidden="true" style="color: currentcolor;"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5607 3.99999L15.0303 4.53032L6.23744 13.3232C5.55403 14.0066 4.44599 14.0066 3.76257 13.3232L4.2929 12.7929L3.76257 13.3232L0.969676 10.5303L0.439346 9.99999L1.50001 8.93933L2.03034 9.46966L4.82323 12.2626C4.92086 12.3602 5.07915 12.3602 5.17678 12.2626L13.9697 3.46966L14.5 2.93933L15.5607 3.99999Z" fill="currentColor"></path></svg>';
45
+ setTimeout(() => {
46
+ this.el.nativeElement.innerHTML = originalHTML;
47
+ }, 2000);
48
+ }
49
+ catch (err) {
50
+ console.error("Fallback: Oops, unable to copy", err);
51
+ }
52
+ document.body.removeChild(textarea);
53
+ }
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopyToClipboardDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
56
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: CopyToClipboardDirective, isStandalone: true, selector: "[copy-to-clipboard]", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopyToClipboardDirective, decorators: [{
59
+ type: Directive,
60
+ args: [{
61
+ selector: "[copy-to-clipboard]",
62
+ standalone: true,
63
+ host: {
64
+ "(click)": "onClick()",
65
+ },
66
+ }]
67
+ }] });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS10by1jbGlwYm9hcmQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZGlyZWN0aXZlcy9jb3B5LXRvLWNsaXBib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTckUsTUFBTSxPQUFPLHdCQUF3QjtJQVByQztRQVFVLE9BQUUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztRQUV0QyxTQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBaUR6QjtJQS9DQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXBELElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pELFNBQVMsQ0FBQyxTQUFTO2lCQUNoQixTQUFTLENBQUMsV0FBVyxDQUFDO2lCQUN0QixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULHNDQUFzQztnQkFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTO29CQUM3QixzaEJBQXNoQixDQUFDO2dCQUN6aEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO2dCQUNqRCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sOEJBQThCO1lBQzlCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDN0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsa0RBQWtEO1lBQ3JGLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQztnQkFDSCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QixzQ0FBc0M7Z0JBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUztvQkFDN0Isc2hCQUFzaEIsQ0FBQztnQkFDemhCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQztnQkFDakQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7K0dBbkRVLHdCQUF3QjttR0FBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQVBwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLFdBQVc7cUJBQ3ZCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBcIltjb3B5LXRvLWNsaXBib2FyZF1cIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGhvc3Q6IHtcclxuICAgIFwiKGNsaWNrKVwiOiBcIm9uQ2xpY2soKVwiLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3B5VG9DbGlwYm9hcmREaXJlY3RpdmUge1xyXG4gIHByaXZhdGUgZWwgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xyXG5cclxuICBwdWJsaWMgdGV4dCA9IGlucHV0KFwiXCIpO1xyXG5cclxuICBvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRleHQoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhlIHRleHQgaXMgZW5jb2RlZCBmcm9tIHRoZSBtYXJrZG93bi1pdCBwbHVnaW4sIHNvIHdlIGRlY29kZSBpdCBmaXJzdFxyXG4gICAgY29uc3QgZGVjb2RlZFRleHQgPSBkZWNvZGVVUklDb21wb25lbnQodGhpcy50ZXh0KCkpO1xyXG5cclxuICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KSB7XHJcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmRcclxuICAgICAgICAud3JpdGVUZXh0KGRlY29kZWRUZXh0KVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIC8vIFByb3ZpZGUgdmlzdWFsIGZlZWRiYWNrIHRvIHRoZSB1c2VyXHJcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEhUTUwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XHJcbiAgICAgICAgICAgICc8c3ZnIGRhdGEtdGVzdGlkPVwiZ2Vpc3QtaWNvblwiIGhlaWdodD1cIjE2XCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgd2lkdGg9XCIxNlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6IGN1cnJlbnRjb2xvcjtcIj48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTUuNTYwNyAzLjk5OTk5TDE1LjAzMDMgNC41MzAzMkw2LjIzNzQ0IDEzLjMyMzJDNS41NTQwMyAxNC4wMDY2IDQuNDQ1OTkgMTQuMDA2NiAzLjc2MjU3IDEzLjMyMzJMNC4yOTI5IDEyLjc5MjlMMy43NjI1NyAxMy4zMjMyTDAuOTY5Njc2IDEwLjUzMDNMMC40MzkzNDYgOS45OTk5OUwxLjUwMDAxIDguOTM5MzNMMi4wMzAzNCA5LjQ2OTY2TDQuODIzMjMgMTIuMjYyNkM0LjkyMDg2IDEyLjM2MDIgNS4wNzkxNSAxMi4zNjAyIDUuMTc2NzggMTIuMjYyNkwxMy45Njk3IDMuNDY5NjZMMTQuNSAyLjkzOTMzTDE1LjU2MDcgMy45OTk5OVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPjwvc3ZnPic7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IG9yaWdpbmFsSFRNTDtcclxuICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0OiBcIiwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrIGZvciBvbGRlciBicm93c2Vyc1xyXG4gICAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcclxuICAgICAgdGV4dGFyZWEudmFsdWUgPSBkZWNvZGVkVGV4dDtcclxuICAgICAgdGV4dGFyZWEuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7IC8vIFByZXZlbnQgc2Nyb2xsaW5nIHRvIGJvdHRvbSBvZiBwYWdlIGluIE1TIEVkZ2UuXHJcbiAgICAgIHRleHRhcmVhLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7XHJcbiAgICAgIHRleHRhcmVhLmZvY3VzKCk7XHJcbiAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcclxuICAgICAgICAvLyBQcm92aWRlIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlclxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsSFRNTCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XHJcbiAgICAgICAgICAnPHN2ZyBkYXRhLXRlc3RpZD1cImdlaXN0LWljb25cIiBoZWlnaHQ9XCIxNlwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIHdpZHRoPVwiMTZcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiBjdXJyZW50Y29sb3I7XCI+PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE1LjU2MDcgMy45OTk5OUwxNS4wMzAzIDQuNTMwMzJMNi4yMzc0NCAxMy4zMjMyQzUuNTU0MDMgMTQuMDA2NiA0LjQ0NTk5IDE0LjAwNjYgMy43NjI1NyAxMy4zMjMyTDQuMjkyOSAxMi43OTI5TDMuNzYyNTcgMTMuMzIzMkwwLjk2OTY3NiAxMC41MzAzTDAuNDM5MzQ2IDkuOTk5OTlMMS41MDAwMSA4LjkzOTMzTDIuMDMwMzQgOS40Njk2Nkw0LjgyMzIzIDEyLjI2MjZDNC45MjA4NiAxMi4zNjAyIDUuMDc5MTUgMTIuMzYwMiA1LjE3Njc4IDEyLjI2MjZMMTMuOTY5NyAzLjQ2OTY2TDE0LjUgMi45MzkzM0wxNS41NjA3IDMuOTk5OTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD48L3N2Zz4nO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IG9yaWdpbmFsSFRNTDtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhbGxiYWNrOiBPb3BzLCB1bmFibGUgdG8gY29weVwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=