stream-chat-angular 4.59.2 → 4.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/assets/i18n/en.d.ts +2 -0
  2. package/assets/version.d.ts +1 -1
  3. package/bundles/stream-chat-angular.umd.js +347 -173
  4. package/bundles/stream-chat-angular.umd.js.map +1 -1
  5. package/esm2015/assets/i18n/en.js +3 -1
  6. package/esm2015/assets/version.js +2 -2
  7. package/esm2015/lib/channel/channel.component.js +13 -9
  8. package/esm2015/lib/channel.service.js +24 -2
  9. package/esm2015/lib/custom-templates.service.js +9 -1
  10. package/esm2015/lib/edit-message-form/edit-message-form.component.js +87 -0
  11. package/esm2015/lib/message/message.component.js +16 -25
  12. package/esm2015/lib/message-actions-box/message-actions-box.component.js +6 -46
  13. package/esm2015/lib/message-bounce-prompt/message-bounce-prompt.component.js +80 -0
  14. package/esm2015/lib/message-list/message-list.component.js +14 -8
  15. package/esm2015/lib/parse-date.js +2 -2
  16. package/esm2015/lib/stream-chat.module.js +13 -3
  17. package/esm2015/lib/types.js +1 -1
  18. package/esm2015/public-api.js +3 -1
  19. package/fesm2015/stream-chat-angular.js +319 -169
  20. package/fesm2015/stream-chat-angular.js.map +1 -1
  21. package/lib/channel/channel.component.d.ts +3 -1
  22. package/lib/channel.service.d.ts +10 -9
  23. package/lib/custom-templates.service.d.ts +8 -0
  24. package/lib/edit-message-form/edit-message-form.component.d.ts +31 -0
  25. package/lib/message/message.component.d.ts +2 -1
  26. package/lib/message-actions-box/message-actions-box.component.d.ts +2 -11
  27. package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +28 -0
  28. package/lib/stream-chat.module.d.ts +7 -5
  29. package/lib/types.d.ts +0 -6
  30. package/package.json +1 -1
  31. package/public-api.d.ts +2 -0
  32. package/src/assets/i18n/en.ts +3 -0
  33. package/src/assets/styles/css/index.css +1 -1
  34. package/src/assets/styles/scss/Message.scss +21 -17
  35. package/src/assets/styles/scss/MessageActions.scss +0 -9
  36. package/src/assets/styles/scss/_base.scss +8 -1
  37. package/src/assets/styles/v2/css/index.css +1 -1
  38. package/src/assets/styles/v2/css/index.layout.css +1 -1
  39. package/src/assets/styles/v2/scss/AttachmentList/AttachmentList-layout.scss +6 -0
  40. package/src/assets/styles/v2/scss/EditMessageForm/EditMessageForm-layout.scss +13 -15
  41. package/src/assets/styles/v2/scss/Message/Message-layout.scss +14 -3
  42. package/src/assets/styles/v2/scss/MessageActionsBox/MessageActionsBox-layout.scss +0 -8
  43. package/src/assets/styles/v2/scss/_utils.scss +0 -1
  44. package/src/assets/version.ts +1 -1
@@ -220,6 +220,14 @@ export class CustomTemplatesService {
220
220
  * The template to show if the thread message list is empty
221
221
  */
222
222
  this.emptyThreadMessageListPlaceholder$ = new BehaviorSubject(undefined);
223
+ /**
224
+ * The template used to display the [edit message form](../components/EditMessageFormComponent.mdx)
225
+ */
226
+ this.editMessageFormTemplate$ = new BehaviorSubject(undefined);
227
+ /**
228
+ * The template used to display the [message bounce prompt](../components/MessageBouncePromptComponent.mdx)
229
+ */
230
+ this.messageBouncePromptTemplate$ = new BehaviorSubject(undefined);
223
231
  }
224
232
  }
225
233
  CustomTemplatesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: CustomTemplatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -230,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
230
238
  providedIn: 'root',
231
239
  }]
232
240
  }], ctorParameters: function () { return []; } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBb0N2Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQW9TakM7UUFqU0E7O1dBRUc7UUFDSCxxQ0FBZ0MsR0FBRyxJQUFJLGVBQWUsQ0FFcEQsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUNBQWdDLEdBQUcsSUFBSSxlQUFlLENBRXBELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFekMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUV4QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FFNUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw0QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FFM0Ms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QUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBdHRhY2htZW50Q29udGV4dCxcbiAgQXR0YWNobWVudExpc3RDb250ZXh0LFxuICBBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0LFxuICBBdmF0YXJDb250ZXh0LFxuICBDaGFubmVsQWN0aW9uc0NvbnRleHQsXG4gIENoYW5uZWxIZWFkZXJJbmZvQ29udGV4dCxcbiAgQ2hhbm5lbFByZXZpZXdDb250ZXh0LFxuICBDb21tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW1Db250ZXh0LFxuICBDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dCxcbiAgQ3VzdG9tTWV0YWRhdGFDb250ZXh0LFxuICBEYXRlU2VwYXJhdG9yQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgRGVsaXZlcmVkU3RhdHVzQ29udGV4dCxcbiAgRW1vamlQaWNrZXJDb250ZXh0LFxuICBJY29uQ29udGV4dCxcbiAgTG9hZGluZ0luZGljYXRvckNvbnRleHQsXG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgTWVudGlvblRlbXBsYXRlQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0LFxuICBNZXNzYWdlQWN0aW9uc0JveENvbnRleHQsXG4gIE1lc3NhZ2VDb250ZXh0LFxuICBNZXNzYWdlSW5wdXRDb250ZXh0LFxuICBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCxcbiAgTW9kYWxDb250ZXh0LFxuICBOb3RpZmljYXRpb25Db250ZXh0LFxuICBSZWFkU3RhdHVzQ29udGV4dCxcbiAgU2VuZGluZ1N0YXR1c0NvbnRleHQsXG4gIFN5c3RlbU1lc3NhZ2VDb250ZXh0LFxuICBUaHJlYWRIZWFkZXJDb250ZXh0LFxuICBUeXBpbmdJbmRpY2F0b3JDb250ZXh0LFxuICBVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQsXG4gIFVucmVhZE1lc3NhZ2VzTm90aWZpY2F0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQSBjZW50cmFsIGxvY2F0aW9uIGZvciByZWdpc3RlcmluZyB5b3VyIGN1c3RvbSB0ZW1wbGF0ZXMgdG8gb3ZlcnJpZGUgcGFydHMgb2YgdGhlIGNoYXQgYXBwbGljYXRpb24uXG4gKlxuICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlPFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4ge1xuICAvKipcbiAgICogVGhlIGF1dG9jb21wbGV0ZSBsaXN0IGl0ZW0gdGVtcGxhdGUgZm9yIG1lbnRpb25pbmcgdXNlcnMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqL1xuICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGxpc3QgaXRlbSB0ZW1wbGF0ZSBmb3IgY29tbWFuZHMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhbiBpdGVtIGluIHRoZSBbY2hhbm5lbCBsaXN0XSguLi9jb21wb25lbnRzL0NoYW5uZWxMaXN0Q29tcG9uZW50Lm1keCkgKGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgW2NoYW5uYWwgbGlzdCBpdGVtXSguLi9jb21wb25lbnRzL0NoYW5uZWxQcmV2aWV3Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY2hhbm5lbFByZXZpZXdUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENoYW5uZWxQcmV2aWV3Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgaW5wdXQgdGVtcGxhdGUgdXNlZCB3aGVuIGVkaXRpbmcgYSBtZXNzYWdlIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIGlucHV0XSguLi9jb21wb25lbnRzL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VJbnB1dFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUlucHV0Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgYSBbbWVudGlvbiBpbnNpZGUgYSBtZXNzYWdlXSguLi9jb2RlLWV4YW1wbGVzL21lbnRpb24tYWN0aW9ucy5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVudGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvblRlbXBsYXRlQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZvciBbZW1vamkgcGlja2VyXSguLi9jb2RlLWV4YW1wbGVzL2Vtb2ppLXBpY2tlci5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgZW1vamlQaWNrZXJUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEVtb2ppUGlja2VyQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHR5cGluZyBpbmRpY2F0b3IgdGVtcGxhdGUgdXNlZCBpbiB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgdHlwaW5nSW5kaWNhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxUeXBpbmdJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGEgbWVzc2FnZSBpbiB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVzc2FnZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgY2hhbm5lbCBhY3Rpb25zIGRpc3BsYXllZCBpbiB0aGUgW2NoYW5uZWwgaGVhZGVyXSguLi9jb21wb25lbnRzL0NoYW5uZWxIZWFkZXJDb21wb25lbnQubWR4KSAoYnkgZGVmYXVsdCBubyBjaGFubmVsIGFjdGlvbiBpcyBkaXNwbGF5ZWQpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY2hhbm5lbEFjdGlvbnNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENoYW5uZWxBY3Rpb25zQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhdHRhY2htZW50cyBvZiBhIFttZXNzYWdlXSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgYXR0YWNobWVudExpc3RUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRMaXN0Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhdHRhY2htZW50cyBpbiB0aGUgW21lc3NhZ2UgaW5wdXRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keCkgY29tcG9uZW50IChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBhdHRhY2htZW50IHByZXZpZXddKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudFByZXZpZXdMaXN0Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF2YXRhcnMgZm9yIGNoYW5uZWxzIGFuZCB1c2VycyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXZhdGFyXSguLi9jb21wb25lbnRzL0F2YXRhckNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGF2YXRhclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8QXZhdGFyQ29udGV4dD4gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgaWNvbnMgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IGljb24gY29tcG9uZW50XSguLi9jb21wb25lbnRzL0ljb25Db21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBpY29uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxJY29uQ29udGV4dD4gfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBsb2FkaW5nIGluZGljYXRvcl0oLi4vY29tcG9uZW50cy9Mb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbG9hZGluZ0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TG9hZGluZ0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBtZXNzYWdlIGFjdGlvbnMgYm94IChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIGFjdGlvbnMgYm94XSguLi9jb21wb25lbnRzL01lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbWVzc2FnZUFjdGlvbnNCb3hUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgYW4gaXRlbSBpbiB0aGUgW21lc3NhZ2UgYWN0aW9ucyBib3hdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VBY3Rpb25zQm94SXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSByZWFjdGlvbnMgb2YgYSBbbWVzc2FnZV0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keCksIGFuZCB0aGUgc2VsZWN0b3IgdG8gYWRkIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIHJlYWN0aW9ucyBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZVJlYWN0aW9uc0NvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VSZWFjdGlvbnNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGEgbW9kYWwgd2luZG93IChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtb2RhbF0oLi4vY29tcG9uZW50cy9Nb2RhbENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1vZGFsVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxNb2RhbENvbnRleHQ+IHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBbZGVmYXVsdCBub3RpZmljYXRpb24gY29tcG9uZW50XSguLi9jb21wb25lbnRzL05vdGlmaWNhdGlvbkNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgbm90aWZpY2F0aW9uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxOb3RpZmljYXRpb25Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgaGVhZGVyIG9mIGEgW3RocmVhZF0oLi4vY29tcG9uZW50cy9UaHJlYWRDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIHRocmVhZEhlYWRlclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VGhyZWFkSGVhZGVyQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIGRlbGl2ZXJlZCBzdGF0ZSBvZiB0aGUgbWVzc2FnZSBpbnNpZGUgdGhlIFttZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRGlzcGxheWVkIGZvciB0aGUgbGFzdCBtZXNzYWdlIHNlbnQgYnkgdGhlIGN1cnJlbnQgdXNlciwgaWYgdGhlIG1lc3NhZ2UgaXNuJ3QgeWV0IHJlYWQgYnkgYW55b25lXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgZGVsaXZlcmVkU3RhdHVzVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxEZWxpdmVyZWRTdGF0dXNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyB0aGUgc2VuZGluZyBzdGF0ZSBvZiB0aGUgbWVzc2FnZSBpbnNpZGUgdGhlIFttZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRGlzcGxheWVkIGZvciB0aGUgbGFzdCBtZXNzYWdlIHNlbnQgYnkgdGhlIGN1cnJlbnQgdXNlciwgaWYgdGhlIG1lc3NhZ2UgaXMgY3VycmVudGx5IGJlaW5nIHNlbnRcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBzZW5kaW5nU3RhdHVzVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxTZW5kaW5nU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbnQgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIERpc3BsYXllZCBmb3IgdGhlIGxhc3QgbWVzc2FnZSBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBtZXNzYWdlIGlzIHJlYWQgYXQgbGVhc3QgYnkgb25lIHVzZXJcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICByZWFkU3RhdHVzVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxSZWFkU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGVtcGxhdGUgdG8gZGlzcGxheSBjdXN0b20gbWV0YWRhdGEgaW5zaWRlIFttZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjdXN0b21NZXNzYWdlTWV0YWRhdGFUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEN1c3RvbU1ldGFkYXRhQ29udGV4dDxUPj4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgY2hhbm5lbCB1bmRlciB0aGUgY2hhbm5lbCBuYW1lIGluc2lkZSB0aGUgW2NoYW5uZWwgaGVhZGVyIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9DaGFubmVsSGVhZGVyQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjaGFubmVsSGVhZGVySW5mb1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbEhlYWRlckluZm9Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyBmaWxlIHVwbG9hZC9hdHRhY2htZW50IHNlbGVjdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgaW5wdXRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBjdXN0b21BdHRhY2htZW50VXBsb2FkVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGEgc2luZ2xlIGltYWdlIGF0dGFjaG1lbnQgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBpbWFnZUF0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYSB2aWRlbyBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgdmlkZW9BdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGltYWdlIGdhbGxlcnkgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBnYWxsZXJ5QXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIGZpbGUgYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGZpbGVBdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGEgY2FyZCBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYXR0YWNobWVudCBhY3Rpb25zIGFyZSBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGF0dGFjaG1lbnRBY3Rpb25zVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBbc3lzdGVtIG1lc3NhZ2VzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9zaWxlbnRfbWVzc2FnZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zeXN0ZW0pIGluZGlzZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKi9cbiAgc3lzdGVtTWVzc2FnZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8U3lzdGVtTWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGRhdGUgc2VwYXJhdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBkYXRlU2VwYXJhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxEYXRlU2VwYXJhdG9yQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB1bnJlYWQgbWVzc2FnZXMgaW5kaWNhdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpIHdoZW4gdGhlIGNoYW5uZWwgaXMgb3BlbmVkXG4gICAqXG4gICAqIFRoaXMgVUkgZWxlbWVudCBpcyB1c2VkIHRvIHNlcGFyYXRlIHVucmVhZCBtZXNzYWdlcyBmcm9tIHJlYWQgbWVzc2FnZXNcbiAgICovXG4gIG5ld01lc3NhZ2VzSW5kaWNhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdW5yZWFkIG1lc3NhZ2VzIG5vdGlmaWNhdGlvbiBpbnNpZGUgdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZFxuICAgKlxuICAgKiBVc2VycyBjYW4gdXNlIHRoaXMgbm90aWZpY2F0aW9uIHRvIGp1bXAgdG8gdGhlIGZpcnN0IHVucmVhZCBtZXNzYWdlIHdoZW4gaXQncyBjbGlja2VkXG4gICAqL1xuICBuZXdNZXNzYWdlc05vdGlmaWNhdGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VW5yZWFkTWVzc2FnZXNOb3RpZmljYXRpb25Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gc2hvdyBpZiB0aGUgbWFpbiBtZXNzYWdlIGxpc3QgaXMgZW1wdHlcbiAgICovXG4gIGVtcHR5TWFpbk1lc3NhZ2VMaXN0UGxhY2Vob2xkZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjx2b2lkPiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gc2hvdyBpZiB0aGUgdGhyZWFkIG1lc3NhZ2UgbGlzdCBpcyBlbXB0eVxuICAgKi9cbiAgZW1wdHlUaHJlYWRNZXNzYWdlTGlzdFBsYWNlaG9sZGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiJdfQ==
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBb0N2Qzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQStTakM7UUE1U0E7O1dBRUc7UUFDSCxxQ0FBZ0MsR0FBRyxJQUFJLGVBQWUsQ0FFcEQsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUNBQWdDLEdBQUcsSUFBSSxlQUFlLENBRXBELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FFekMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUV4QyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FFNUMsU0FBUyxDQUFDLENBQUM7UUFDYjs7OztXQUlHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7Ozs7V0FJRztRQUNILDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUUzQyxTQUFTLENBQUMsQ0FBQztRQUNiOzs7O1dBSUc7UUFDSCw0QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FFM0Ms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QWUsQ0FFaEQsU0FBUyxDQUFDLENBQUM7SUFDRSxDQUFDOzttSEEvU0wsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudENvbnRleHQsXG4gIEF0dGFjaG1lbnRMaXN0Q29udGV4dCxcbiAgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCxcbiAgQXZhdGFyQ29udGV4dCxcbiAgQ2hhbm5lbEFjdGlvbnNDb250ZXh0LFxuICBDaGFubmVsSGVhZGVySW5mb0NvbnRleHQsXG4gIENoYW5uZWxQcmV2aWV3Q29udGV4dCxcbiAgQ29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgQ3VzdG9tQXR0YWNobWVudFVwbG9hZENvbnRleHQsXG4gIEN1c3RvbU1ldGFkYXRhQ29udGV4dCxcbiAgRGF0ZVNlcGFyYXRvckNvbnRleHQsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIERlbGl2ZXJlZFN0YXR1c0NvbnRleHQsXG4gIEVtb2ppUGlja2VyQ29udGV4dCxcbiAgSWNvbkNvbnRleHQsXG4gIExvYWRpbmdJbmRpY2F0b3JDb250ZXh0LFxuICBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbUNvbnRleHQsXG4gIE1lbnRpb25UZW1wbGF0ZUNvbnRleHQsXG4gIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0LFxuICBNZXNzYWdlQ29udGV4dCxcbiAgTWVzc2FnZUlucHV0Q29udGV4dCxcbiAgTWVzc2FnZVJlYWN0aW9uc0NvbnRleHQsXG4gIE1vZGFsQ29udGV4dCxcbiAgTm90aWZpY2F0aW9uQ29udGV4dCxcbiAgUmVhZFN0YXR1c0NvbnRleHQsXG4gIFNlbmRpbmdTdGF0dXNDb250ZXh0LFxuICBTeXN0ZW1NZXNzYWdlQ29udGV4dCxcbiAgVGhyZWFkSGVhZGVyQ29udGV4dCxcbiAgVHlwaW5nSW5kaWNhdG9yQ29udGV4dCxcbiAgVW5yZWFkTWVzc2FnZXNJbmRpY2F0b3JDb250ZXh0LFxuICBVbnJlYWRNZXNzYWdlc05vdGlmaWNhdGlvbkNvbnRleHQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEEgY2VudHJhbCBsb2NhdGlvbiBmb3IgcmVnaXN0ZXJpbmcgeW91ciBjdXN0b20gdGVtcGxhdGVzIHRvIG92ZXJyaWRlIHBhcnRzIG9mIHRoZSBjaGF0IGFwcGxpY2F0aW9uLlxuICpcbiAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tVGVtcGxhdGVzU2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIFRoZSBhdXRvY29tcGxldGUgbGlzdCBpdGVtIHRlbXBsYXRlIGZvciBtZW50aW9uaW5nIHVzZXJzICh1c2VkIGluIHRoZSBbYEF1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50YF0oLi4vY29tcG9uZW50cy9BdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudC5tZHgpKVxuICAgKi9cbiAgbWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIGF1dG9jb21wbGV0ZSBsaXN0IGl0ZW0gdGVtcGxhdGUgZm9yIGNvbW1hbmRzICh1c2VkIGluIHRoZSBbYEF1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50YF0oLi4vY29tcG9uZW50cy9BdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGNvbW1hbmRBdXRvY29tcGxldGVJdGVtVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDb21tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYW4gaXRlbSBpbiB0aGUgW2NoYW5uZWwgbGlzdF0oLi4vY29tcG9uZW50cy9DaGFubmVsTGlzdENvbXBvbmVudC5tZHgpIChpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFtjaGFubmFsIGxpc3QgaXRlbV0oLi4vY29tcG9uZW50cy9DaGFubmVsUHJldmlld0NvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGNoYW5uZWxQcmV2aWV3VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDaGFubmVsUHJldmlld0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIGlucHV0IHRlbXBsYXRlIHVzZWQgd2hlbiBlZGl0aW5nIGEgbWVzc2FnZSAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbWVzc2FnZSBpbnB1dF0oLi4vY29tcG9uZW50cy9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBtZXNzYWdlSW5wdXRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VJbnB1dENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIGEgW21lbnRpb24gaW5zaWRlIGEgbWVzc2FnZV0oLi4vY29kZS1leGFtcGxlcy9tZW50aW9uLWFjdGlvbnMubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lbnRpb25UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lbnRpb25UZW1wbGF0ZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgW2Vtb2ppIHBpY2tlcl0oLi4vY29kZS1leGFtcGxlcy9lbW9qaS1waWNrZXIubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGVtb2ppUGlja2VyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxFbW9qaVBpY2tlckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0eXBpbmcgaW5kaWNhdG9yIHRlbXBsYXRlIHVzZWQgaW4gdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIHR5cGluZ0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VHlwaW5nSW5kaWNhdG9yQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhIG1lc3NhZ2UgaW4gdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgZm9yIGNoYW5uZWwgYWN0aW9ucyBkaXNwbGF5ZWQgaW4gdGhlIFtjaGFubmVsIGhlYWRlcl0oLi4vY29tcG9uZW50cy9DaGFubmVsSGVhZGVyQ29tcG9uZW50Lm1keCkgKGJ5IGRlZmF1bHQgbm8gY2hhbm5lbCBhY3Rpb24gaXMgZGlzcGxheWVkKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGNoYW5uZWxBY3Rpb25zVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDaGFubmVsQWN0aW9uc0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYXR0YWNobWVudHMgb2YgYSBbbWVzc2FnZV0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keCkgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IGF0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGF0dGFjaG1lbnRMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50TGlzdENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYXR0YWNobWVudHMgaW4gdGhlIFttZXNzYWdlIGlucHV0XSguLi9jb21wb25lbnRzL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudCAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXR0YWNobWVudCBwcmV2aWV3XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRQcmV2aWV3TGlzdENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGF0dGFjaG1lbnRQcmV2aWV3TGlzdFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhdmF0YXJzIGZvciBjaGFubmVscyBhbmQgdXNlcnMgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IGF2YXRhcl0oLi4vY29tcG9uZW50cy9BdmF0YXJDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBhdmF0YXJUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPEF2YXRhckNvbnRleHQ+IHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIGljb25zIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBpY29uIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9JY29uQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgaWNvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8SWNvbkNvbnRleHQ+IHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBsb2FkaW5nIGluZGljYXRvciAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbG9hZGluZyBpbmRpY2F0b3JdKC4uL2NvbXBvbmVudHMvTG9hZGluZ0luZGljYXRvckNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGxvYWRpbmdJbmRpY2F0b3JUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPExvYWRpbmdJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSBmb3IgZGlzcGxheWluZyB0aGUgbWVzc2FnZSBhY3Rpb25zIGJveCAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbWVzc2FnZSBhY3Rpb25zIGJveF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZXNzYWdlQWN0aW9uc0JveENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIGFuIGl0ZW0gaW4gdGhlIFttZXNzYWdlIGFjdGlvbnMgYm94XSguLi9jb21wb25lbnRzL01lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBtZXNzYWdlQWN0aW9uc0JveEl0ZW1UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgcmVhY3Rpb25zIG9mIGEgW21lc3NhZ2VdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpLCBhbmQgdGhlIHNlbGVjdG9yIHRvIGFkZCBhIHJlYWN0aW9uIHRvIGEgbWVzc2FnZSAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbWVzc2FnZSByZWFjdGlvbnMgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VSZWFjdGlvbnNDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBtZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZXNzYWdlUmVhY3Rpb25zQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhIG1vZGFsIHdpbmRvdyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbW9kYWxdKC4uL2NvbXBvbmVudHMvTW9kYWxDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICBtb2RhbFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8TW9kYWxDb250ZXh0PiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBvdmVycmlkZSB0aGUgW2RlZmF1bHQgbm90aWZpY2F0aW9uIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9Ob3RpZmljYXRpb25Db21wb25lbnQubWR4KVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIG5vdGlmaWNhdGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Tm90aWZpY2F0aW9uQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGhlYWRlciBvZiBhIFt0aHJlYWRdKC4uL2NvbXBvbmVudHMvVGhyZWFkQ29tcG9uZW50Lm1keClcbiAgICpcbiAgICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gICAqL1xuICB0aHJlYWRIZWFkZXJUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFRocmVhZEhlYWRlckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSBkZWxpdmVyZWQgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIERpc3BsYXllZCBmb3IgdGhlIGxhc3QgbWVzc2FnZSBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBtZXNzYWdlIGlzbid0IHlldCByZWFkIGJ5IGFueW9uZVxuICAgKlxuICAgKiBGb3IgY29kZSBleGFtcGxlcyB0byB0aGUgZGlmZmVyZW50IGN1c3RvbWl6YXRpb25zIHNlZSBvdXIgW2N1c3RvbWl6YXRpb25zIGV4YW1wbGUgYXBwbGljYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlKSwgc3BlY2lmaWNhbGx5IHRoZSBbQXBwQ29tcG9uZW50XShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZS9zcmMvYXBwKSAoc2VlIFtSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9SRUFETUUubWQjY3VzdG9taXphdGlvbi1leGFtcGxlcykgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICovXG4gIGRlbGl2ZXJlZFN0YXR1c1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RGVsaXZlcmVkU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbmRpbmcgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIERpc3BsYXllZCBmb3IgdGhlIGxhc3QgbWVzc2FnZSBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBtZXNzYWdlIGlzIGN1cnJlbnRseSBiZWluZyBzZW50XG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgc2VuZGluZ1N0YXR1c1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8U2VuZGluZ1N0YXR1c0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIHRoZSBzZW50IHN0YXRlIG9mIHRoZSBtZXNzYWdlIGluc2lkZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBEaXNwbGF5ZWQgZm9yIHRoZSBsYXN0IG1lc3NhZ2Ugc2VudCBieSB0aGUgY3VycmVudCB1c2VyLCBpZiB0aGUgbWVzc2FnZSBpcyByZWFkIGF0IGxlYXN0IGJ5IG9uZSB1c2VyXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgcmVhZFN0YXR1c1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8UmVhZFN0YXR1c0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHRvIGRpc3BsYXkgY3VzdG9tIG1ldGFkYXRhIGluc2lkZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY3VzdG9tTWVzc2FnZU1ldGFkYXRhVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDdXN0b21NZXRhZGF0YUNvbnRleHQ8VD4+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGNoYW5uZWwgdW5kZXIgdGhlIGNoYW5uZWwgbmFtZSBpbnNpZGUgdGhlIFtjaGFubmVsIGhlYWRlciBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvQ2hhbm5lbEhlYWRlckNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY2hhbm5lbEhlYWRlckluZm9UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENoYW5uZWxIZWFkZXJJbmZvQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgZmlsZSB1cGxvYWQvYXR0YWNobWVudCBzZWxlY3RvciBpbnNpZGUgdGhlIFttZXNzYWdlIGlucHV0XSguLi9jb21wb25lbnRzL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIEZvciBjb2RlIGV4YW1wbGVzIHRvIHRoZSBkaWZmZXJlbnQgY3VzdG9taXphdGlvbnMgc2VlIG91ciBbY3VzdG9taXphdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUpLCBzcGVjaWZpY2FsbHkgdGhlIFtBcHBDb21wb25lbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9jdXN0b21pemF0aW9ucy1leGFtcGxlL3NyYy9hcHApIChzZWUgW1JFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNjdXN0b21pemF0aW9uLWV4YW1wbGVzKSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdGFydCB0aGUgYXBwbGljYXRpb24pLlxuICAgKi9cbiAgY3VzdG9tQXR0YWNobWVudFVwbG9hZFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q3VzdG9tQXR0YWNobWVudFVwbG9hZENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIHNpbmdsZSBpbWFnZSBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgaW1hZ2VBdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGEgdmlkZW8gYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIHZpZGVvQXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBpbWFnZSBnYWxsZXJ5IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgZ2FsbGVyeUF0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYSBmaWxlIGF0dGFjaG1lbnQgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBmaWxlQXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIGNhcmQgYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGNhcmRBdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGF0dGFjaG1lbnQgYWN0aW9ucyBhcmUgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBhdHRhY2htZW50QWN0aW9uc1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgW3N5c3RlbSBtZXNzYWdlc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvc2lsZW50X21lc3NhZ2VzLz9sYW5ndWFnZT1qYXZhc2NyaXB0JnE9c3lzdGVtKSBpbmRpc2UgdGhlIFttZXNzYWdlIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keClcbiAgICovXG4gIHN5c3RlbU1lc3NhZ2VUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFN5c3RlbU1lc3NhZ2VDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSBkYXRlIHNlcGFyYXRvciBpbnNpZGUgdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgZGF0ZVNlcGFyYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RGF0ZVNlcGFyYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdW5yZWFkIG1lc3NhZ2VzIGluZGljYXRvciBpbnNpZGUgdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZFxuICAgKlxuICAgKiBUaGlzIFVJIGVsZW1lbnQgaXMgdXNlZCB0byBzZXBhcmF0ZSB1bnJlYWQgbWVzc2FnZXMgZnJvbSByZWFkIG1lc3NhZ2VzXG4gICAqL1xuICBuZXdNZXNzYWdlc0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VW5yZWFkTWVzc2FnZXNJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHVucmVhZCBtZXNzYWdlcyBub3RpZmljYXRpb24gaW5zaWRlIHRoZSBbbWVzc2FnZSBsaXN0XSguLi9jb21wb25lbnRzL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keCkgd2hlbiB0aGUgY2hhbm5lbCBpcyBvcGVuZWRcbiAgICpcbiAgICogVXNlcnMgY2FuIHVzZSB0aGlzIG5vdGlmaWNhdGlvbiB0byBqdW1wIHRvIHRoZSBmaXJzdCB1bnJlYWQgbWVzc2FnZSB3aGVuIGl0J3MgY2xpY2tlZFxuICAgKi9cbiAgbmV3TWVzc2FnZXNOb3RpZmljYXRpb25UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFVucmVhZE1lc3NhZ2VzTm90aWZpY2F0aW9uQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRvIHNob3cgaWYgdGhlIG1haW4gbWVzc2FnZSBsaXN0IGlzIGVtcHR5XG4gICAqL1xuICBlbXB0eU1haW5NZXNzYWdlTGlzdFBsYWNlaG9sZGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRvIHNob3cgaWYgdGhlIHRocmVhZCBtZXNzYWdlIGxpc3QgaXMgZW1wdHlcbiAgICovXG4gIGVtcHR5VGhyZWFkTWVzc2FnZUxpc3RQbGFjZWhvbGRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPHZvaWQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIFtlZGl0IG1lc3NhZ2UgZm9ybV0oLi4vY29tcG9uZW50cy9FZGl0TWVzc2FnZUZvcm1Db21wb25lbnQubWR4KVxuICAgKi9cbiAgZWRpdE1lc3NhZ2VGb3JtVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjx2b2lkPiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSBbbWVzc2FnZSBib3VuY2UgcHJvbXB0XSguLi9jb21wb25lbnRzL01lc3NhZ2VCb3VuY2VQcm9tcHRDb21wb25lbnQubWR4KVxuICAgKi9cbiAgbWVzc2FnZUJvdW5jZVByb21wdFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=
@@ -0,0 +1,87 @@
1
+ import { Component, HostBinding, ViewChild, } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../custom-templates.service";
5
+ import * as i2 from "../message-actions.service";
6
+ import * as i3 from "../modal/modal.component";
7
+ import * as i4 from "../message-input/message-input.component";
8
+ import * as i5 from "../notification-list/notification-list.component";
9
+ import * as i6 from "@angular/common";
10
+ import * as i7 from "@ngx-translate/core";
11
+ /**
12
+ * The edit message form displays a modal that's opened when a user edits a message. The component uses the [`MessageActionsService`](../../services/MessageActionsService) to know which message is being edited.
13
+ *
14
+ * By default this is displayed within the [`stream-channel` component](../../components/ChannelComponent).
15
+ */
16
+ export class EditMessageFormComponent {
17
+ constructor(customTemplatesService, messageActionsService) {
18
+ this.customTemplatesService = customTemplatesService;
19
+ this.messageActionsService = messageActionsService;
20
+ this.class = 'str-chat-angular__edit-message-form';
21
+ this.isModalOpen = false;
22
+ this.sendMessageSubject = new Subject();
23
+ this.subscriptions = [];
24
+ this.sendMessage$ = this.sendMessageSubject.asObservable();
25
+ }
26
+ ngOnInit() {
27
+ this.messageActionsService.messageToEdit$.subscribe((message) => {
28
+ if ((message && !this.isModalOpen) || (!message && this.isModalOpen)) {
29
+ this.message = message;
30
+ this.isModalOpen = !!message;
31
+ }
32
+ });
33
+ }
34
+ ngOnDestroy() {
35
+ this.subscriptions.forEach((s) => s.unsubscribe());
36
+ }
37
+ getEditModalContext() {
38
+ return {
39
+ isOpen: this.isModalOpen,
40
+ isOpenChangeHandler: (isOpen) => {
41
+ this.isModalOpen = isOpen;
42
+ if (!this.isModalOpen) {
43
+ this.dismissed();
44
+ }
45
+ },
46
+ content: this.modalContent,
47
+ };
48
+ }
49
+ getMessageInputContext() {
50
+ return {
51
+ message: this.message,
52
+ messageUpdateHandler: () => {
53
+ this.dismissed();
54
+ },
55
+ isFileUploadEnabled: undefined,
56
+ areMentionsEnabled: undefined,
57
+ isMultipleFileUploadEnabled: undefined,
58
+ mentionScope: undefined,
59
+ mode: undefined,
60
+ sendMessage$: this.sendMessage$,
61
+ };
62
+ }
63
+ sendClicked() {
64
+ this.sendMessageSubject.next();
65
+ }
66
+ dismissed() {
67
+ this.isModalOpen = false;
68
+ this.message = undefined;
69
+ this.messageActionsService.messageToEdit$.next(undefined);
70
+ }
71
+ }
72
+ EditMessageFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: EditMessageFormComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.MessageActionsService }], target: i0.ɵɵFactoryTarget.Component });
73
+ EditMessageFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: EditMessageFormComponent, selector: "stream-edit-message-form", host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["editMessageForm"], descendants: true, static: true }], ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n [isOpen]=\"isOpen\"\n *ngIf=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #editMessageForm>\n <div class=\"str-chat__edit-message-form\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n (messageUpdate)=\"messageUpdateHandler()\"\n [sendMessage$]=\"sendMessage$Input\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageInputTemplate$ | async) || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button\n class=\"str-chat__edit-message-cancel\"\n translate\n data-testid=\"cancel-button\"\n (click)=\"dismissed()\"\n >\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n class=\"str-chat__edit-message-send\"\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i3.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { type: i4.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mode", "isMultipleFileUploadEnabled", "message", "sendMessage$", "inputMode", "autoFocus"], outputs: ["messageUpdate"] }, { type: i5.NotificationListComponent, selector: "stream-notification-list" }], directives: [{ type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "async": i6.AsyncPipe } });
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: EditMessageFormComponent, decorators: [{
75
+ type: Component,
76
+ args: [{
77
+ selector: 'stream-edit-message-form',
78
+ templateUrl: './edit-message-form.component.html',
79
+ styles: [],
80
+ }]
81
+ }], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.MessageActionsService }]; }, propDecorators: { class: [{
82
+ type: HostBinding
83
+ }], modalContent: [{
84
+ type: ViewChild,
85
+ args: ['editMessageForm', { static: true }]
86
+ }] } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1tZXNzYWdlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2VkaXQtbWVzc2FnZS1mb3JtL2VkaXQtbWVzc2FnZS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9lZGl0LW1lc3NhZ2UtZm9ybS9lZGl0LW1lc3NhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFJWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQUd6RDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUNXLHNCQUE4QyxFQUMvQyxxQkFBNEM7UUFEM0MsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUMvQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBWHZDLFVBQUssR0FBRyxxQ0FBcUMsQ0FBQztRQUU3RCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUlaLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDekMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBTXpDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDeEIsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ2xCO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUM7WUFDRCxtQkFBbUIsRUFBRSxTQUFTO1lBQzlCLGtCQUFrQixFQUFFLFNBQVM7WUFDN0IsMkJBQTJCLEVBQUUsU0FBUztZQUN0QyxZQUFZLEVBQUUsU0FBUztZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDOztxSEFsRVUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsZ1BDdkJyQyx3OURBMEVBOzJGRG5EYSx3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsV0FBVyxFQUFFLG9DQUFvQztvQkFDakQsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7aUpBRWdCLEtBQUs7c0JBQW5CLFdBQVc7Z0JBS0osWUFBWTtzQkFEbkIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2VJbnB1dENvbnRleHQsIE1vZGFsQ29udGV4dCwgU3RyZWFtTWVzc2FnZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVzc2FnZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBlZGl0IG1lc3NhZ2UgZm9ybSBkaXNwbGF5cyBhIG1vZGFsIHRoYXQncyBvcGVuZWQgd2hlbiBhIHVzZXIgZWRpdHMgYSBtZXNzYWdlLiBUaGUgY29tcG9uZW50IHVzZXMgdGhlIFtgTWVzc2FnZUFjdGlvbnNTZXJ2aWNlYF0oLi4vLi4vc2VydmljZXMvTWVzc2FnZUFjdGlvbnNTZXJ2aWNlKSB0byBrbm93IHdoaWNoIG1lc3NhZ2UgaXMgYmVpbmcgZWRpdGVkLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhpcyBpcyBkaXNwbGF5ZWQgd2l0aGluIHRoZSBbYHN0cmVhbS1jaGFubmVsYCBjb21wb25lbnRdKC4uLy4uL2NvbXBvbmVudHMvQ2hhbm5lbENvbXBvbmVudCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1lZGl0LW1lc3NhZ2UtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LW1lc3NhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRNZXNzYWdlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPSAnc3RyLWNoYXQtYW5ndWxhcl9fZWRpdC1tZXNzYWdlLWZvcm0nO1xuICBzZW5kTWVzc2FnZSQ6IE9ic2VydmFibGU8dm9pZD47XG4gIGlzTW9kYWxPcGVuID0gZmFsc2U7XG4gIG1lc3NhZ2U/OiBTdHJlYW1NZXNzYWdlO1xuICBAVmlld0NoaWxkKCdlZGl0TWVzc2FnZUZvcm0nLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIG1vZGFsQ29udGVudCE6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBwcml2YXRlIHNlbmRNZXNzYWdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZUFjdGlvbnNTZXJ2aWNlOiBNZXNzYWdlQWN0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZSQgPSB0aGlzLnNlbmRNZXNzYWdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLm1lc3NhZ2VUb0VkaXQkLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKChtZXNzYWdlICYmICF0aGlzLmlzTW9kYWxPcGVuKSB8fCAoIW1lc3NhZ2UgJiYgdGhpcy5pc01vZGFsT3BlbikpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbiA9ICEhbWVzc2FnZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgZ2V0RWRpdE1vZGFsQ29udGV4dCgpOiBNb2RhbENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBpc09wZW46IHRoaXMuaXNNb2RhbE9wZW4sXG4gICAgICBpc09wZW5DaGFuZ2VIYW5kbGVyOiAoaXNPcGVuKSA9PiB7XG4gICAgICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBpc09wZW47XG4gICAgICAgIGlmICghdGhpcy5pc01vZGFsT3Blbikge1xuICAgICAgICAgIHRoaXMuZGlzbWlzc2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLm1vZGFsQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0TWVzc2FnZUlucHV0Q29udGV4dCgpOiBNZXNzYWdlSW5wdXRDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbWVzc2FnZVVwZGF0ZUhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNtaXNzZWQoKTtcbiAgICAgIH0sXG4gICAgICBpc0ZpbGVVcGxvYWRFbmFibGVkOiB1bmRlZmluZWQsXG4gICAgICBhcmVNZW50aW9uc0VuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgbWVudGlvblNjb3BlOiB1bmRlZmluZWQsXG4gICAgICBtb2RlOiB1bmRlZmluZWQsXG4gICAgICBzZW5kTWVzc2FnZSQ6IHRoaXMuc2VuZE1lc3NhZ2UkLFxuICAgIH07XG4gIH1cblxuICBzZW5kQ2xpY2tlZCgpIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlU3ViamVjdC5uZXh0KCk7XG4gIH1cblxuICBkaXNtaXNzZWQoKSB7XG4gICAgdGhpcy5pc01vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMubWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1lc3NhZ2VBY3Rpb25zU2VydmljZS5tZXNzYWdlVG9FZGl0JC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXJcbiAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tb2RhbFRlbXBsYXRlJCB8IGFzeW5jKSB8fCBkZWZhdWx0TW9kYWw7XG4gICAgY29udGV4dDogZ2V0RWRpdE1vZGFsQ29udGV4dCgpXG4gIFwiXG4+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1vZGFsXG4gIGxldC1pc09wZW49XCJpc09wZW5cIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICpuZ0lmPVwiaXNPcGVuXCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VkaXRNZXNzYWdlRm9ybT5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2UtZm9ybVwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgI2RlZmF1bHRJbnB1dFxuICAgICAgbGV0LW1lc3NhZ2VJbnB1dD1cIm1lc3NhZ2VcIlxuICAgICAgbGV0LW1lc3NhZ2VVcGRhdGVIYW5kbGVyPVwibWVzc2FnZVVwZGF0ZUhhbmRsZXJcIlxuICAgICAgbGV0LXNlbmRNZXNzYWdlJElucHV0PVwic2VuZE1lc3NhZ2UkXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLW1lc3NhZ2UtaW5wdXRcbiAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUlucHV0XCJcbiAgICAgICAgKG1lc3NhZ2VVcGRhdGUpPVwibWVzc2FnZVVwZGF0ZUhhbmRsZXIoKVwiXG4gICAgICAgIFtzZW5kTWVzc2FnZSRdPVwic2VuZE1lc3NhZ2UkSW5wdXRcIlxuICAgICAgPjwvc3RyZWFtLW1lc3NhZ2UtaW5wdXQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlSW5wdXRUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdElucHV0O1xuICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlSW5wdXRDb250ZXh0KClcbiAgICAgIFwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHN0cmVhbS1ub3RpZmljYXRpb24tbGlzdD48L3N0cmVhbS1ub3RpZmljYXRpb24tbGlzdD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZWFtLWZvcm0tZm9vdGVyXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXRlYW0tZm9ybS1mb290ZXItYW5ndWxhclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1mb3JtLW9wdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1jYW5jZWxcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRpc21pc3NlZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHN0cmVhbUNoYXQuQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLXNlbmRcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZC1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJzZW5kQ2xpY2tlZCgpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VuZENsaWNrZWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBzdHJlYW1DaGF0LlNlbmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19