stream-chat-angular 5.4.3 → 5.6.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 (32) hide show
  1. package/assets/version.d.ts +1 -1
  2. package/esm2020/assets/version.mjs +2 -2
  3. package/esm2020/lib/attachment-list/attachment-list.component.mjs +37 -16
  4. package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +23 -10
  5. package/esm2020/lib/attachment.service.mjs +38 -10
  6. package/esm2020/lib/custom-templates.service.mjs +9 -1
  7. package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +16 -12
  8. package/esm2020/lib/message-input/message-input-config.service.mjs +1 -1
  9. package/esm2020/lib/message-input/message-input.component.mjs +16 -3
  10. package/esm2020/lib/message-input/textarea/textarea.component.mjs +13 -9
  11. package/esm2020/lib/message-input/textarea.directive.mjs +6 -2
  12. package/esm2020/lib/message-input/textarea.interface.mjs +1 -1
  13. package/esm2020/lib/message.service.mjs +18 -1
  14. package/esm2020/lib/types.mjs +1 -1
  15. package/fesm2015/stream-chat-angular.mjs +191 -80
  16. package/fesm2015/stream-chat-angular.mjs.map +1 -1
  17. package/fesm2020/stream-chat-angular.mjs +190 -80
  18. package/fesm2020/stream-chat-angular.mjs.map +1 -1
  19. package/lib/attachment-list/attachment-list.component.d.ts +11 -4
  20. package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +14 -4
  21. package/lib/attachment.service.d.ts +15 -4
  22. package/lib/custom-templates.service.d.ts +9 -1
  23. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +6 -4
  24. package/lib/message-input/message-input-config.service.d.ts +12 -0
  25. package/lib/message-input/message-input.component.d.ts +5 -3
  26. package/lib/message-input/textarea/textarea.component.d.ts +10 -4
  27. package/lib/message-input/textarea.directive.d.ts +2 -1
  28. package/lib/message-input/textarea.interface.d.ts +1 -0
  29. package/lib/message.service.d.ts +19 -3
  30. package/lib/types.d.ts +8 -2
  31. package/package.json +1 -1
  32. package/src/assets/version.ts +1 -1
@@ -1,13 +1,17 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "../icon/icon-placeholder/icon-placeholder.component";
5
- import * as i3 from "../icon/loading-indicator-placeholder/loading-indicator-placeholder.component";
3
+ import * as i1 from "../custom-templates.service";
4
+ import * as i2 from "../attachment.service";
5
+ import * as i3 from "@angular/common";
6
+ import * as i4 from "../icon/icon-placeholder/icon-placeholder.component";
7
+ import * as i5 from "../icon/loading-indicator-placeholder/loading-indicator-placeholder.component";
6
8
  /**
7
9
  * The `AttachmentPreviewList` component displays a preview of the attachments uploaded to a message. Users can delete attachments using the preview component, or retry upload if it failed previously.
8
10
  */
9
11
  export class AttachmentPreviewListComponent {
10
- constructor() {
12
+ constructor(customTemplateService, attachmentService) {
13
+ this.customTemplateService = customTemplateService;
14
+ this.attachmentService = attachmentService;
11
15
  /**
12
16
  * An output to notify the parent component if the user tries to retry a failed upload
13
17
  */
@@ -16,6 +20,15 @@ export class AttachmentPreviewListComponent {
16
20
  * An output to notify the parent component if the user wants to delete a file
17
21
  */
18
22
  this.deleteAttachment = new EventEmitter();
23
+ this.customAttachments = [];
24
+ this.subscriptions = [];
25
+ }
26
+ ngOnInit() {
27
+ this.subscriptions.push(this.customTemplateService.customAttachmentPreviewListTemplate$.subscribe((t) => (this.customAttachmentsPreview = t)));
28
+ this.subscriptions.push(this.attachmentService.customAttachments$.subscribe((a) => (this.customAttachments = a)));
29
+ }
30
+ ngOnDestroy() {
31
+ this.subscriptions.forEach((s) => s.unsubscribe());
19
32
  }
20
33
  attachmentUploadRetried(file) {
21
34
  this.retryAttachmentUpload.emit(file);
@@ -27,16 +40,16 @@ export class AttachmentPreviewListComponent {
27
40
  return item.file;
28
41
  }
29
42
  }
30
- AttachmentPreviewListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentPreviewListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31
- AttachmentPreviewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: { attachmentUploads$: "attachmentUploads$" }, outputs: { retryAttachmentUpload: "retryAttachmentUpload", deleteAttachment: "deleteAttachment" }, ngImport: i0, template: "<div\n *ngIf=\"(attachmentUploads$ | async)?.length\"\n class=\"str-chat__attachment-preview-list\"\n>\n <div class=\"str-chat__attachment-list-scroll-container\">\n <ng-container\n *ngFor=\"\n let attachmentUpload of attachmentUploads$ | async;\n trackBy: trackByFile\n \"\n >\n <div\n *ngIf=\"attachmentUpload.type === 'image'\"\n class=\"str-chat__attachment-preview-image\"\n data-testclass=\"attachment-image-preview\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <div\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n class=\"str-chat__attachment-preview-image-loading\"\n >\n <stream-loading-indicator-placeholder\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <img\n *ngIf=\"attachmentUpload.url || attachmentUpload.previewUri\"\n class=\"str-chat__attachment-preview-thumbnail\"\n data-testclass=\"attachment-image\"\n src=\"{{\n attachmentUpload.url\n ? attachmentUpload.url\n : attachmentUpload.previewUri\n }}\"\n alt=\"{{ attachmentUpload.file.name }}\"\n />\n </div>\n <div\n *ngIf=\"\n attachmentUpload.type === 'file' ||\n attachmentUpload.type === 'video' ||\n attachmentUpload.type === 'voiceRecording'\n \"\n class=\"str-chat__attachment-preview-file str-chat__attachment-preview-type-{{\n attachmentUpload.type\n }}\"\n data-testclass=\"attachment-file-preview\"\n >\n <stream-icon-placeholder\n class=\"str-chat__attachment-preview-file-icon\"\n icon=\"unspecified-filetype\"\n ></stream-icon-placeholder>\n\n <div class=\"str-chat__attachment-preview-file-end\">\n <div\n class=\"str-chat__attachment-preview-file-name\"\n title=\"{{ attachmentUpload.file.name }}\"\n >\n {{ attachmentUpload.file.name }}\n </div>\n <a\n *ngIf=\"attachmentUpload.state === 'success'\"\n class=\"str-chat__attachment-preview-file-download\"\n data-testclass=\"file-download-link\"\n download\n href=\"{{ attachmentUpload.url }}\"\n (click)=\"attachmentUpload.url ? null : $event.preventDefault()\"\n (keyup.enter)=\"\n attachmentUpload.url ? null : $event.preventDefault()\n \"\n >\n <stream-icon-placeholder icon=\"download\"></stream-icon-placeholder>\n </a>\n <stream-loading-indicator-placeholder\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<ng-template #deleteButton let-attachmentUpload=\"attachmentUpload\">\n <div\n class=\"str-chat__attachment-preview-delete\"\n data-testclass=\"file-delete\"\n role=\"button\"\n (click)=\"attachmentDeleted(attachmentUpload)\"\n (keyup.enter)=\"attachmentDeleted(attachmentUpload)\"\n >\n <stream-icon-placeholder icon=\"close\"></stream-icon-placeholder>\n </div>\n</ng-template>\n\n<ng-template #retryButton let-attachmentUpload=\"attachmentUpload\">\n <div\n *ngIf=\"attachmentUpload.state === 'error'\"\n data-testclass=\"upload-retry\"\n class=\"str-chat__attachment-preview-error str-chat__attachment-preview-error-{{\n attachmentUpload.type === 'image' ? 'image' : 'file'\n }}\"\n (click)=\"attachmentUploadRetried(attachmentUpload.file)\"\n (keyup.enter)=\"attachmentUploadRetried(attachmentUpload.file)\"\n >\n <stream-icon-placeholder icon=\"retry\"></stream-icon-placeholder>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon"] }, { kind: "component", type: i3.LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
43
+ AttachmentPreviewListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentPreviewListComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.AttachmentService }], target: i0.ɵɵFactoryTarget.Component });
44
+ AttachmentPreviewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: { attachmentUploads$: "attachmentUploads$" }, outputs: { retryAttachmentUpload: "retryAttachmentUpload", deleteAttachment: "deleteAttachment" }, ngImport: i0, template: "<div\n *ngIf=\"\n (attachmentUploads$ | async)?.length ||\n (customAttachments.length > 0 && customAttachmentsPreview)\n \"\n class=\"str-chat__attachment-preview-list\"\n>\n <div class=\"str-chat__attachment-list-scroll-container\">\n <ng-container\n *ngFor=\"\n let attachmentUpload of attachmentUploads$ | async;\n trackBy: trackByFile\n \"\n >\n <div\n *ngIf=\"attachmentUpload.type === 'image'\"\n class=\"str-chat__attachment-preview-image\"\n data-testclass=\"attachment-image-preview\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <div\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n class=\"str-chat__attachment-preview-image-loading\"\n >\n <stream-loading-indicator-placeholder\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <img\n *ngIf=\"attachmentUpload.url || attachmentUpload.previewUri\"\n class=\"str-chat__attachment-preview-thumbnail\"\n data-testclass=\"attachment-image\"\n src=\"{{\n attachmentUpload.url\n ? attachmentUpload.url\n : attachmentUpload.previewUri\n }}\"\n alt=\"{{ attachmentUpload.file.name }}\"\n />\n </div>\n <div\n *ngIf=\"\n attachmentUpload.type === 'file' ||\n attachmentUpload.type === 'video' ||\n attachmentUpload.type === 'voiceRecording'\n \"\n class=\"str-chat__attachment-preview-file str-chat__attachment-preview-type-{{\n attachmentUpload.type\n }}\"\n data-testclass=\"attachment-file-preview\"\n >\n <stream-icon-placeholder\n class=\"str-chat__attachment-preview-file-icon\"\n icon=\"unspecified-filetype\"\n ></stream-icon-placeholder>\n\n <div class=\"str-chat__attachment-preview-file-end\">\n <div\n class=\"str-chat__attachment-preview-file-name\"\n title=\"{{ attachmentUpload.file.name }}\"\n >\n {{ attachmentUpload.file.name }}\n </div>\n <a\n *ngIf=\"attachmentUpload.state === 'success'\"\n class=\"str-chat__attachment-preview-file-download\"\n data-testclass=\"file-download-link\"\n download\n href=\"{{ attachmentUpload.url }}\"\n (click)=\"attachmentUpload.url ? null : $event.preventDefault()\"\n (keyup.enter)=\"\n attachmentUpload.url ? null : $event.preventDefault()\n \"\n >\n <stream-icon-placeholder icon=\"download\"></stream-icon-placeholder>\n </a>\n <stream-loading-indicator-placeholder\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"customAttachmentsPreview\">\n <ng-template\n *ngTemplateOutlet=\"\n customAttachmentsPreview;\n context: { service: attachmentService }\n \"\n ></ng-template>\n </ng-container>\n </div>\n</div>\n\n<ng-template #deleteButton let-attachmentUpload=\"attachmentUpload\">\n <div\n class=\"str-chat__attachment-preview-delete\"\n data-testclass=\"file-delete\"\n role=\"button\"\n (click)=\"attachmentDeleted(attachmentUpload)\"\n (keyup.enter)=\"attachmentDeleted(attachmentUpload)\"\n >\n <stream-icon-placeholder icon=\"close\"></stream-icon-placeholder>\n </div>\n</ng-template>\n\n<ng-template #retryButton let-attachmentUpload=\"attachmentUpload\">\n <div\n *ngIf=\"attachmentUpload.state === 'error'\"\n data-testclass=\"upload-retry\"\n class=\"str-chat__attachment-preview-error str-chat__attachment-preview-error-{{\n attachmentUpload.type === 'image' ? 'image' : 'file'\n }}\"\n (click)=\"attachmentUploadRetried(attachmentUpload.file)\"\n (keyup.enter)=\"attachmentUploadRetried(attachmentUpload.file)\"\n >\n <stream-icon-placeholder icon=\"retry\"></stream-icon-placeholder>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon"] }, { kind: "component", type: i5.LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
32
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentPreviewListComponent, decorators: [{
33
46
  type: Component,
34
- args: [{ selector: 'stream-attachment-preview-list', template: "<div\n *ngIf=\"(attachmentUploads$ | async)?.length\"\n class=\"str-chat__attachment-preview-list\"\n>\n <div class=\"str-chat__attachment-list-scroll-container\">\n <ng-container\n *ngFor=\"\n let attachmentUpload of attachmentUploads$ | async;\n trackBy: trackByFile\n \"\n >\n <div\n *ngIf=\"attachmentUpload.type === 'image'\"\n class=\"str-chat__attachment-preview-image\"\n data-testclass=\"attachment-image-preview\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <div\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n class=\"str-chat__attachment-preview-image-loading\"\n >\n <stream-loading-indicator-placeholder\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <img\n *ngIf=\"attachmentUpload.url || attachmentUpload.previewUri\"\n class=\"str-chat__attachment-preview-thumbnail\"\n data-testclass=\"attachment-image\"\n src=\"{{\n attachmentUpload.url\n ? attachmentUpload.url\n : attachmentUpload.previewUri\n }}\"\n alt=\"{{ attachmentUpload.file.name }}\"\n />\n </div>\n <div\n *ngIf=\"\n attachmentUpload.type === 'file' ||\n attachmentUpload.type === 'video' ||\n attachmentUpload.type === 'voiceRecording'\n \"\n class=\"str-chat__attachment-preview-file str-chat__attachment-preview-type-{{\n attachmentUpload.type\n }}\"\n data-testclass=\"attachment-file-preview\"\n >\n <stream-icon-placeholder\n class=\"str-chat__attachment-preview-file-icon\"\n icon=\"unspecified-filetype\"\n ></stream-icon-placeholder>\n\n <div class=\"str-chat__attachment-preview-file-end\">\n <div\n class=\"str-chat__attachment-preview-file-name\"\n title=\"{{ attachmentUpload.file.name }}\"\n >\n {{ attachmentUpload.file.name }}\n </div>\n <a\n *ngIf=\"attachmentUpload.state === 'success'\"\n class=\"str-chat__attachment-preview-file-download\"\n data-testclass=\"file-download-link\"\n download\n href=\"{{ attachmentUpload.url }}\"\n (click)=\"attachmentUpload.url ? null : $event.preventDefault()\"\n (keyup.enter)=\"\n attachmentUpload.url ? null : $event.preventDefault()\n \"\n >\n <stream-icon-placeholder icon=\"download\"></stream-icon-placeholder>\n </a>\n <stream-loading-indicator-placeholder\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<ng-template #deleteButton let-attachmentUpload=\"attachmentUpload\">\n <div\n class=\"str-chat__attachment-preview-delete\"\n data-testclass=\"file-delete\"\n role=\"button\"\n (click)=\"attachmentDeleted(attachmentUpload)\"\n (keyup.enter)=\"attachmentDeleted(attachmentUpload)\"\n >\n <stream-icon-placeholder icon=\"close\"></stream-icon-placeholder>\n </div>\n</ng-template>\n\n<ng-template #retryButton let-attachmentUpload=\"attachmentUpload\">\n <div\n *ngIf=\"attachmentUpload.state === 'error'\"\n data-testclass=\"upload-retry\"\n class=\"str-chat__attachment-preview-error str-chat__attachment-preview-error-{{\n attachmentUpload.type === 'image' ? 'image' : 'file'\n }}\"\n (click)=\"attachmentUploadRetried(attachmentUpload.file)\"\n (keyup.enter)=\"attachmentUploadRetried(attachmentUpload.file)\"\n >\n <stream-icon-placeholder icon=\"retry\"></stream-icon-placeholder>\n </div>\n</ng-template>\n" }]
35
- }], ctorParameters: function () { return []; }, propDecorators: { attachmentUploads$: [{
47
+ args: [{ selector: 'stream-attachment-preview-list', template: "<div\n *ngIf=\"\n (attachmentUploads$ | async)?.length ||\n (customAttachments.length > 0 && customAttachmentsPreview)\n \"\n class=\"str-chat__attachment-preview-list\"\n>\n <div class=\"str-chat__attachment-list-scroll-container\">\n <ng-container\n *ngFor=\"\n let attachmentUpload of attachmentUploads$ | async;\n trackBy: trackByFile\n \"\n >\n <div\n *ngIf=\"attachmentUpload.type === 'image'\"\n class=\"str-chat__attachment-preview-image\"\n data-testclass=\"attachment-image-preview\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <div\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n class=\"str-chat__attachment-preview-image-loading\"\n >\n <stream-loading-indicator-placeholder\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <img\n *ngIf=\"attachmentUpload.url || attachmentUpload.previewUri\"\n class=\"str-chat__attachment-preview-thumbnail\"\n data-testclass=\"attachment-image\"\n src=\"{{\n attachmentUpload.url\n ? attachmentUpload.url\n : attachmentUpload.previewUri\n }}\"\n alt=\"{{ attachmentUpload.file.name }}\"\n />\n </div>\n <div\n *ngIf=\"\n attachmentUpload.type === 'file' ||\n attachmentUpload.type === 'video' ||\n attachmentUpload.type === 'voiceRecording'\n \"\n class=\"str-chat__attachment-preview-file str-chat__attachment-preview-type-{{\n attachmentUpload.type\n }}\"\n data-testclass=\"attachment-file-preview\"\n >\n <stream-icon-placeholder\n class=\"str-chat__attachment-preview-file-icon\"\n icon=\"unspecified-filetype\"\n ></stream-icon-placeholder>\n\n <div class=\"str-chat__attachment-preview-file-end\">\n <div\n class=\"str-chat__attachment-preview-file-name\"\n title=\"{{ attachmentUpload.file.name }}\"\n >\n {{ attachmentUpload.file.name }}\n </div>\n <a\n *ngIf=\"attachmentUpload.state === 'success'\"\n class=\"str-chat__attachment-preview-file-download\"\n data-testclass=\"file-download-link\"\n download\n href=\"{{ attachmentUpload.url }}\"\n (click)=\"attachmentUpload.url ? null : $event.preventDefault()\"\n (keyup.enter)=\"\n attachmentUpload.url ? null : $event.preventDefault()\n \"\n >\n <stream-icon-placeholder icon=\"download\"></stream-icon-placeholder>\n </a>\n <stream-loading-indicator-placeholder\n *ngIf=\"attachmentUpload.state === 'uploading'\"\n data-testclass=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n deleteButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n retryButton;\n context: { attachmentUpload: attachmentUpload }\n \"\n ></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"customAttachmentsPreview\">\n <ng-template\n *ngTemplateOutlet=\"\n customAttachmentsPreview;\n context: { service: attachmentService }\n \"\n ></ng-template>\n </ng-container>\n </div>\n</div>\n\n<ng-template #deleteButton let-attachmentUpload=\"attachmentUpload\">\n <div\n class=\"str-chat__attachment-preview-delete\"\n data-testclass=\"file-delete\"\n role=\"button\"\n (click)=\"attachmentDeleted(attachmentUpload)\"\n (keyup.enter)=\"attachmentDeleted(attachmentUpload)\"\n >\n <stream-icon-placeholder icon=\"close\"></stream-icon-placeholder>\n </div>\n</ng-template>\n\n<ng-template #retryButton let-attachmentUpload=\"attachmentUpload\">\n <div\n *ngIf=\"attachmentUpload.state === 'error'\"\n data-testclass=\"upload-retry\"\n class=\"str-chat__attachment-preview-error str-chat__attachment-preview-error-{{\n attachmentUpload.type === 'image' ? 'image' : 'file'\n }}\"\n (click)=\"attachmentUploadRetried(attachmentUpload.file)\"\n (keyup.enter)=\"attachmentUploadRetried(attachmentUpload.file)\"\n >\n <stream-icon-placeholder icon=\"retry\"></stream-icon-placeholder>\n </div>\n</ng-template>\n" }]
48
+ }], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.AttachmentService }]; }, propDecorators: { attachmentUploads$: [{
36
49
  type: Input
37
50
  }], retryAttachmentUpload: [{
38
51
  type: Output
39
52
  }], deleteAttachment: [{
40
53
  type: Output
41
54
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1wcmV2aWV3LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2F0dGFjaG1lbnQtcHJldmlldy1saXN0L2F0dGFjaG1lbnQtcHJldmlldy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LXByZXZpZXctbGlzdC9hdHRhY2htZW50LXByZXZpZXctbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQUl2RTs7R0FFRztBQU1ILE1BQU0sT0FBTyw4QkFBOEI7SUFjekM7UUFUQTs7V0FFRztRQUNnQiwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3BFOztXQUVHO1FBQ2dCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBRTVELENBQUM7SUFFaEIsdUJBQXVCLENBQUMsSUFBVTtRQUNoQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUF3QjtRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBUyxFQUFFLElBQXNCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDOzsySEExQlUsOEJBQThCOytHQUE5Qiw4QkFBOEIsK05DWjNDLHVnSkFtSUE7MkZEdkhhLDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDRSxnQ0FBZ0M7MEVBUWpDLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJYSxxQkFBcUI7c0JBQXZDLE1BQU07Z0JBSVksZ0JBQWdCO3NCQUFsQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF0dGFjaG1lbnRVcGxvYWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGBBdHRhY2htZW50UHJldmlld0xpc3RgIGNvbXBvbmVudCBkaXNwbGF5cyBhIHByZXZpZXcgb2YgdGhlIGF0dGFjaG1lbnRzIHVwbG9hZGVkIHRvIGEgbWVzc2FnZS4gVXNlcnMgY2FuIGRlbGV0ZSBhdHRhY2htZW50cyB1c2luZyB0aGUgcHJldmlldyBjb21wb25lbnQsIG9yIHJldHJ5IHVwbG9hZCBpZiBpdCBmYWlsZWQgcHJldmlvdXNseS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQtcHJldmlldy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQXR0YWNobWVudFByZXZpZXdMaXN0Q29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEEgc3RyZWFtIHRoYXQgZW1pdHMgdGhlIGN1cnJlbnQgZmlsZSB1cGxvYWRzIGFuZCB0aGVpciBzdGF0ZXNcbiAgICovXG4gIEBJbnB1dCgpIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQW4gb3V0cHV0IHRvIG5vdGlmeSB0aGUgcGFyZW50IGNvbXBvbmVudCBpZiB0aGUgdXNlciB0cmllcyB0byByZXRyeSBhIGZhaWxlZCB1cGxvYWRcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXRyeUF0dGFjaG1lbnRVcGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gIC8qKlxuICAgKiBBbiBvdXRwdXQgdG8gbm90aWZ5IHRoZSBwYXJlbnQgY29tcG9uZW50IGlmIHRoZSB1c2VyIHdhbnRzIHRvIGRlbGV0ZSBhIGZpbGVcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBkZWxldGVBdHRhY2htZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxBdHRhY2htZW50VXBsb2FkPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBhdHRhY2htZW50VXBsb2FkUmV0cmllZChmaWxlOiBGaWxlKSB7XG4gICAgdGhpcy5yZXRyeUF0dGFjaG1lbnRVcGxvYWQuZW1pdChmaWxlKTtcbiAgfVxuXG4gIGF0dGFjaG1lbnREZWxldGVkKHVwbG9hZDogQXR0YWNobWVudFVwbG9hZCkge1xuICAgIHRoaXMuZGVsZXRlQXR0YWNobWVudC5lbWl0KHVwbG9hZCk7XG4gIH1cblxuICB0cmFja0J5RmlsZShfOiBudW1iZXIsIGl0ZW06IEF0dGFjaG1lbnRVcGxvYWQpIHtcbiAgICByZXR1cm4gaXRlbS5maWxlO1xuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwiKGF0dGFjaG1lbnRVcGxvYWRzJCB8IGFzeW5jKT8ubGVuZ3RoXCJcbiAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWxpc3RcIlxuPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2F0dGFjaG1lbnQtbGlzdC1zY3JvbGwtY29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCBhdHRhY2htZW50VXBsb2FkIG9mIGF0dGFjaG1lbnRVcGxvYWRzJCB8IGFzeW5jO1xuICAgICAgICB0cmFja0J5OiB0cmFja0J5RmlsZVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiYXR0YWNobWVudFVwbG9hZC50eXBlID09PSAnaW1hZ2UnXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWltYWdlXCJcbiAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdHRhY2htZW50LWltYWdlLXByZXZpZXdcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgYXR0YWNobWVudFVwbG9hZDogYXR0YWNobWVudFVwbG9hZCB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJhdHRhY2htZW50VXBsb2FkLnN0YXRlID09PSAndXBsb2FkaW5nJ1wiXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWltYWdlLWxvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlclxuICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiXG4gICAgICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICByZXRyeUJ1dHRvbjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgYXR0YWNobWVudFVwbG9hZDogYXR0YWNobWVudFVwbG9hZCB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJhdHRhY2htZW50VXBsb2FkLnVybCB8fCBhdHRhY2htZW50VXBsb2FkLnByZXZpZXdVcmlcIlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2F0dGFjaG1lbnQtcHJldmlldy10aHVtYm5haWxcIlxuICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiYXR0YWNobWVudC1pbWFnZVwiXG4gICAgICAgICAgc3JjPVwie3tcbiAgICAgICAgICAgIGF0dGFjaG1lbnRVcGxvYWQudXJsXG4gICAgICAgICAgICAgID8gYXR0YWNobWVudFVwbG9hZC51cmxcbiAgICAgICAgICAgICAgOiBhdHRhY2htZW50VXBsb2FkLnByZXZpZXdVcmlcbiAgICAgICAgICB9fVwiXG4gICAgICAgICAgYWx0PVwie3sgYXR0YWNobWVudFVwbG9hZC5maWxlLm5hbWUgfX1cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgYXR0YWNobWVudFVwbG9hZC50eXBlID09PSAnZmlsZScgfHxcbiAgICAgICAgICBhdHRhY2htZW50VXBsb2FkLnR5cGUgPT09ICd2aWRlbycgfHxcbiAgICAgICAgICBhdHRhY2htZW50VXBsb2FkLnR5cGUgPT09ICd2b2ljZVJlY29yZGluZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWZpbGUgc3RyLWNoYXRfX2F0dGFjaG1lbnQtcHJldmlldy10eXBlLXt7XG4gICAgICAgICAgYXR0YWNobWVudFVwbG9hZC50eXBlXG4gICAgICAgIH19XCJcbiAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdHRhY2htZW50LWZpbGUtcHJldmlld1wiXG4gICAgICA+XG4gICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2F0dGFjaG1lbnQtcHJldmlldy1maWxlLWljb25cIlxuICAgICAgICAgIGljb249XCJ1bnNwZWNpZmllZC1maWxldHlwZVwiXG4gICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWZpbGUtZW5kXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWZpbGUtbmFtZVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7IGF0dGFjaG1lbnRVcGxvYWQuZmlsZS5uYW1lIH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBhdHRhY2htZW50VXBsb2FkLmZpbGUubmFtZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRVcGxvYWQuc3RhdGUgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctZmlsZS1kb3dubG9hZFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtZG93bmxvYWQtbGlua1wiXG4gICAgICAgICAgICBkb3dubG9hZFxuICAgICAgICAgICAgaHJlZj1cInt7IGF0dGFjaG1lbnRVcGxvYWQudXJsIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJhdHRhY2htZW50VXBsb2FkLnVybCA/IG51bGwgOiAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRVcGxvYWQudXJsID8gbnVsbCA6ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwiZG93bmxvYWRcIj48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRVcGxvYWQuc3RhdGUgPT09ICd1cGxvYWRpbmcnXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibG9hZGluZy1pbmRpY2F0b3JcIlxuICAgICAgICAgID48L3N0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgZGVsZXRlQnV0dG9uO1xuICAgICAgICAgICAgY29udGV4dDogeyBhdHRhY2htZW50VXBsb2FkOiBhdHRhY2htZW50VXBsb2FkIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgcmV0cnlCdXR0b247XG4gICAgICAgICAgICBjb250ZXh0OiB7IGF0dGFjaG1lbnRVcGxvYWQ6IGF0dGFjaG1lbnRVcGxvYWQgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlbGV0ZUJ1dHRvbiBsZXQtYXR0YWNobWVudFVwbG9hZD1cImF0dGFjaG1lbnRVcGxvYWRcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2F0dGFjaG1lbnQtcHJldmlldy1kZWxldGVcIlxuICAgIGRhdGEtdGVzdGNsYXNzPVwiZmlsZS1kZWxldGVcIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJhdHRhY2htZW50RGVsZXRlZChhdHRhY2htZW50VXBsb2FkKVwiXG4gICAgKGtleXVwLmVudGVyKT1cImF0dGFjaG1lbnREZWxldGVkKGF0dGFjaG1lbnRVcGxvYWQpXCJcbiAgPlxuICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwiY2xvc2VcIj48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmV0cnlCdXR0b24gbGV0LWF0dGFjaG1lbnRVcGxvYWQ9XCJhdHRhY2htZW50VXBsb2FkXCI+XG4gIDxkaXZcbiAgICAqbmdJZj1cImF0dGFjaG1lbnRVcGxvYWQuc3RhdGUgPT09ICdlcnJvcidcIlxuICAgIGRhdGEtdGVzdGNsYXNzPVwidXBsb2FkLXJldHJ5XCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctZXJyb3Igc3RyLWNoYXRfX2F0dGFjaG1lbnQtcHJldmlldy1lcnJvci17e1xuICAgICAgYXR0YWNobWVudFVwbG9hZC50eXBlID09PSAnaW1hZ2UnID8gJ2ltYWdlJyA6ICdmaWxlJ1xuICAgIH19XCJcbiAgICAoY2xpY2spPVwiYXR0YWNobWVudFVwbG9hZFJldHJpZWQoYXR0YWNobWVudFVwbG9hZC5maWxlKVwiXG4gICAgKGtleXVwLmVudGVyKT1cImF0dGFjaG1lbnRVcGxvYWRSZXRyaWVkKGF0dGFjaG1lbnRVcGxvYWQuZmlsZSlcIlxuICA+XG4gICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJyZXRyeVwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1wcmV2aWV3LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2F0dGFjaG1lbnQtcHJldmlldy1saXN0L2F0dGFjaG1lbnQtcHJldmlldy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LXByZXZpZXctbGlzdC9hdHRhY2htZW50LXByZXZpZXctbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBT3ZCOztHQUVHO0FBTUgsTUFBTSxPQUFPLDhCQUE4QjtJQWlCekMsWUFDVSxxQkFBNkMsRUFDckMsaUJBQW9DO1FBRDVDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUFDckMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWR0RDs7V0FFRztRQUNnQiwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3BFOztXQUVHO1FBQ2dCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQzNFLHNCQUFpQixHQUFpQixFQUFFLENBQUM7UUFFN0Isa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBS3hDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQ0FBb0MsQ0FBQyxTQUFTLENBQ3ZFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FDM0MsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQ2pELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FDcEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQVU7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBd0I7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQVMsRUFBRSxJQUFzQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQzs7MkhBakRVLDhCQUE4QjsrR0FBOUIsOEJBQThCLCtOQ3ZCM0MsNjBKQThJQTsyRkR2SGEsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLGdDQUFnQzs2SUFRakMsa0JBQWtCO3NCQUExQixLQUFLO2dCQUlhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFJWSxnQkFBZ0I7c0JBQWxDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXR0YWNobWVudFVwbG9hZCwgQ3VzdG9tQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudFNlcnZpY2UgfSBmcm9tICcuLi9hdHRhY2htZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcblxuLyoqXG4gKiBUaGUgYEF0dGFjaG1lbnRQcmV2aWV3TGlzdGAgY29tcG9uZW50IGRpc3BsYXlzIGEgcHJldmlldyBvZiB0aGUgYXR0YWNobWVudHMgdXBsb2FkZWQgdG8gYSBtZXNzYWdlLiBVc2VycyBjYW4gZGVsZXRlIGF0dGFjaG1lbnRzIHVzaW5nIHRoZSBwcmV2aWV3IGNvbXBvbmVudCwgb3IgcmV0cnkgdXBsb2FkIGlmIGl0IGZhaWxlZCBwcmV2aW91c2x5LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tYXR0YWNobWVudC1wcmV2aWV3LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXR0YWNobWVudC1wcmV2aWV3LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50UHJldmlld0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBBIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBjdXJyZW50IGZpbGUgdXBsb2FkcyBhbmQgdGhlaXIgc3RhdGVzXG4gICAqL1xuICBASW5wdXQoKSBhdHRhY2htZW50VXBsb2FkcyQ6IE9ic2VydmFibGU8QXR0YWNobWVudFVwbG9hZFtdPiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEFuIG91dHB1dCB0byBub3RpZnkgdGhlIHBhcmVudCBjb21wb25lbnQgaWYgdGhlIHVzZXIgdHJpZXMgdG8gcmV0cnkgYSBmYWlsZWQgdXBsb2FkXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmV0cnlBdHRhY2htZW50VXBsb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAvKipcbiAgICogQW4gb3V0cHV0IHRvIG5vdGlmeSB0aGUgcGFyZW50IGNvbXBvbmVudCBpZiB0aGUgdXNlciB3YW50cyB0byBkZWxldGUgYSBmaWxlXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZGVsZXRlQXR0YWNobWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8QXR0YWNobWVudFVwbG9hZD4oKTtcbiAgY3VzdG9tQXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSA9IFtdO1xuICBjdXN0b21BdHRhY2htZW50c1ByZXZpZXc/OiBUZW1wbGF0ZVJlZjxDdXN0b21BdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PjtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSBhdHRhY2htZW50U2VydmljZTogQXR0YWNobWVudFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZVNlcnZpY2UuY3VzdG9tQXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHQpID0+ICh0aGlzLmN1c3RvbUF0dGFjaG1lbnRzUHJldmlldyA9IHQpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuY3VzdG9tQXR0YWNobWVudHMkLnN1YnNjcmliZShcbiAgICAgICAgKGEpID0+ICh0aGlzLmN1c3RvbUF0dGFjaG1lbnRzID0gYSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBhdHRhY2htZW50VXBsb2FkUmV0cmllZChmaWxlOiBGaWxlKSB7XG4gICAgdGhpcy5yZXRyeUF0dGFjaG1lbnRVcGxvYWQuZW1pdChmaWxlKTtcbiAgfVxuXG4gIGF0dGFjaG1lbnREZWxldGVkKHVwbG9hZDogQXR0YWNobWVudFVwbG9hZCkge1xuICAgIHRoaXMuZGVsZXRlQXR0YWNobWVudC5lbWl0KHVwbG9hZCk7XG4gIH1cblxuICB0cmFja0J5RmlsZShfOiBudW1iZXIsIGl0ZW06IEF0dGFjaG1lbnRVcGxvYWQpIHtcbiAgICByZXR1cm4gaXRlbS5maWxlO1xuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwiXG4gICAgKGF0dGFjaG1lbnRVcGxvYWRzJCB8IGFzeW5jKT8ubGVuZ3RoIHx8XG4gICAgKGN1c3RvbUF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgY3VzdG9tQXR0YWNobWVudHNQcmV2aWV3KVxuICBcIlxuICBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctbGlzdFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1saXN0LXNjcm9sbC1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdGb3I9XCJcbiAgICAgICAgbGV0IGF0dGFjaG1lbnRVcGxvYWQgb2YgYXR0YWNobWVudFVwbG9hZHMkIHwgYXN5bmM7XG4gICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWxlXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJhdHRhY2htZW50VXBsb2FkLnR5cGUgPT09ICdpbWFnZSdcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctaW1hZ2VcIlxuICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImF0dGFjaG1lbnQtaW1hZ2UtcHJldmlld1wiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgZGVsZXRlQnV0dG9uO1xuICAgICAgICAgICAgY29udGV4dDogeyBhdHRhY2htZW50VXBsb2FkOiBhdHRhY2htZW50VXBsb2FkIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRVcGxvYWQuc3RhdGUgPT09ICd1cGxvYWRpbmcnXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctaW1hZ2UtbG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgICA+PC9zdHJlYW0tbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHJldHJ5QnV0dG9uO1xuICAgICAgICAgICAgY29udGV4dDogeyBhdHRhY2htZW50VXBsb2FkOiBhdHRhY2htZW50VXBsb2FkIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRVcGxvYWQudXJsIHx8IGF0dGFjaG1lbnRVcGxvYWQucHJldmlld1VyaVwiXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LXRodW1ibmFpbFwiXG4gICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdHRhY2htZW50LWltYWdlXCJcbiAgICAgICAgICBzcmM9XCJ7e1xuICAgICAgICAgICAgYXR0YWNobWVudFVwbG9hZC51cmxcbiAgICAgICAgICAgICAgPyBhdHRhY2htZW50VXBsb2FkLnVybFxuICAgICAgICAgICAgICA6IGF0dGFjaG1lbnRVcGxvYWQucHJldmlld1VyaVxuICAgICAgICAgIH19XCJcbiAgICAgICAgICBhbHQ9XCJ7eyBhdHRhY2htZW50VXBsb2FkLmZpbGUubmFtZSB9fVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBhdHRhY2htZW50VXBsb2FkLnR5cGUgPT09ICdmaWxlJyB8fFxuICAgICAgICAgIGF0dGFjaG1lbnRVcGxvYWQudHlwZSA9PT0gJ3ZpZGVvJyB8fFxuICAgICAgICAgIGF0dGFjaG1lbnRVcGxvYWQudHlwZSA9PT0gJ3ZvaWNlUmVjb3JkaW5nJ1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctZmlsZSBzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LXR5cGUte3tcbiAgICAgICAgICBhdHRhY2htZW50VXBsb2FkLnR5cGVcbiAgICAgICAgfX1cIlxuICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImF0dGFjaG1lbnQtZmlsZS1wcmV2aWV3XCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWZpbGUtaWNvblwiXG4gICAgICAgICAgaWNvbj1cInVuc3BlY2lmaWVkLWZpbGV0eXBlXCJcbiAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctZmlsZS1lbmRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LXByZXZpZXctZmlsZS1uYW1lXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgYXR0YWNobWVudFVwbG9hZC5maWxlLm5hbWUgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGF0dGFjaG1lbnRVcGxvYWQuZmlsZS5uYW1lIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0lmPVwiYXR0YWNobWVudFVwbG9hZC5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2F0dGFjaG1lbnQtcHJldmlldy1maWxlLWRvd25sb2FkXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZmlsZS1kb3dubG9hZC1saW5rXCJcbiAgICAgICAgICAgIGRvd25sb2FkXG4gICAgICAgICAgICBocmVmPVwie3sgYXR0YWNobWVudFVwbG9hZC51cmwgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImF0dGFjaG1lbnRVcGxvYWQudXJsID8gbnVsbCA6ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJcbiAgICAgICAgICAgICAgYXR0YWNobWVudFVwbG9hZC51cmwgPyBudWxsIDogJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJkb3dubG9hZFwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxzdHJlYW0tbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICpuZ0lmPVwiYXR0YWNobWVudFVwbG9hZC5zdGF0ZSA9PT0gJ3VwbG9hZGluZydcIlxuICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiXG4gICAgICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBkZWxldGVCdXR0b247XG4gICAgICAgICAgICBjb250ZXh0OiB7IGF0dGFjaG1lbnRVcGxvYWQ6IGF0dGFjaG1lbnRVcGxvYWQgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICByZXRyeUJ1dHRvbjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgYXR0YWNobWVudFVwbG9hZDogYXR0YWNobWVudFVwbG9hZCB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUF0dGFjaG1lbnRzUHJldmlld1wiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgY3VzdG9tQXR0YWNobWVudHNQcmV2aWV3O1xuICAgICAgICAgIGNvbnRleHQ6IHsgc2VydmljZTogYXR0YWNobWVudFNlcnZpY2UgfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVsZXRlQnV0dG9uIGxldC1hdHRhY2htZW50VXBsb2FkPVwiYXR0YWNobWVudFVwbG9hZFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWRlbGV0ZVwiXG4gICAgZGF0YS10ZXN0Y2xhc3M9XCJmaWxlLWRlbGV0ZVwiXG4gICAgcm9sZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImF0dGFjaG1lbnREZWxldGVkKGF0dGFjaG1lbnRVcGxvYWQpXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwiYXR0YWNobWVudERlbGV0ZWQoYXR0YWNobWVudFVwbG9hZClcIlxuICA+XG4gICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJjbG9zZVwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZXRyeUJ1dHRvbiBsZXQtYXR0YWNobWVudFVwbG9hZD1cImF0dGFjaG1lbnRVcGxvYWRcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiYXR0YWNobWVudFVwbG9hZC5zdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgZGF0YS10ZXN0Y2xhc3M9XCJ1cGxvYWQtcmV0cnlcIlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2F0dGFjaG1lbnQtcHJldmlldy1lcnJvciBzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWVycm9yLXt7XG4gICAgICBhdHRhY2htZW50VXBsb2FkLnR5cGUgPT09ICdpbWFnZScgPyAnaW1hZ2UnIDogJ2ZpbGUnXG4gICAgfX1cIlxuICAgIChjbGljayk9XCJhdHRhY2htZW50VXBsb2FkUmV0cmllZChhdHRhY2htZW50VXBsb2FkLmZpbGUpXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwiYXR0YWNobWVudFVwbG9hZFJldHJpZWQoYXR0YWNobWVudFVwbG9hZC5maWxlKVwiXG4gID5cbiAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXIgaWNvbj1cInJldHJ5XCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -6,20 +6,33 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "./channel.service";
7
7
  import * as i2 from "./notification.service";
8
8
  import * as i3 from "./chat-client.service";
9
+ import * as i4 from "./message.service";
9
10
  /**
10
11
  * The `AttachmentService` manages the uploads of a message input.
11
12
  *
12
13
  * You can read more about [uploads](https://getstream.io/chat/docs/javascript/file_uploads/?language=javascript&q=size) in the Stream API documentation. You can use Stream's API or the dashboard to customize the [file](https://getstream.io/chat/docs/javascript/app_setting_overview/?language=javascript&q=size#file-uploads) and [image upload](https://getstream.io/chat/docs/javascript/app_setting_overview/?language=javascript&q=size#image-uploads) configuration.
13
14
  */
14
15
  export class AttachmentService {
15
- constructor(channelService, notificationService, chatClientService) {
16
+ constructor(channelService, notificationService, chatClientService, messageService) {
16
17
  this.channelService = channelService;
17
18
  this.notificationService = notificationService;
18
19
  this.chatClientService = chatClientService;
19
- this.attachmentUploadInProgressCounterSubject = new BehaviorSubject(0);
20
+ this.messageService = messageService;
21
+ /**
22
+ * Emits the number of uploads in progress.
23
+ *
24
+ * You can increment and decrement this counter if you're using custom attachments and want to disable message sending until all attachments are uploaded.
25
+ *
26
+ * The SDK will handle updating this counter for built-in attachments, but for custom attachments you should take care of this.
27
+ */
28
+ this.attachmentUploadInProgressCounter$ = new BehaviorSubject(0);
29
+ /**
30
+ * You can get and set the list if uploaded custom attachments
31
+ *
32
+ * By default the SDK components won't display these, but you can provide your own `customAttachmentPreviewListTemplate$` and `customAttachmentListTemplate$` for the [`CustomTemplatesService`](../../services/CustomTemplatesService).
33
+ */
34
+ this.customAttachments$ = new BehaviorSubject([]);
20
35
  this.attachmentUploadsSubject = new BehaviorSubject([]);
21
- this.attachmentUploadInProgressCounter$ =
22
- this.attachmentUploadInProgressCounterSubject.asObservable();
23
36
  this.attachmentUploads$ = this.attachmentUploadsSubject.asObservable();
24
37
  this.chatClientService.appSettings$.subscribe((appSettings) => (this.appSettings = appSettings));
25
38
  }
@@ -28,6 +41,7 @@ export class AttachmentService {
28
41
  */
29
42
  resetAttachmentUploads() {
30
43
  this.attachmentUploadsSubject.next([]);
44
+ this.customAttachments$.next([]);
31
45
  }
32
46
  /**
33
47
  * Upload a voice recording
@@ -171,7 +185,7 @@ export class AttachmentService {
171
185
  */
172
186
  mapToAttachments() {
173
187
  const attachmentUploads = this.attachmentUploadsSubject.getValue();
174
- return attachmentUploads
188
+ const builtInAttachments = attachmentUploads
175
189
  .filter((r) => r.state === 'success')
176
190
  .map((r) => {
177
191
  let attachment = {
@@ -198,6 +212,7 @@ export class AttachmentService {
198
212
  }
199
213
  return attachment;
200
214
  });
215
+ return [...builtInAttachments, ...this.customAttachments$.value];
201
216
  }
202
217
  /**
203
218
  * Maps attachments received from the Stream API to uploads. This is useful when editing a message.
@@ -205,7 +220,17 @@ export class AttachmentService {
205
220
  */
206
221
  createFromAttachments(attachments) {
207
222
  const attachmentUploads = [];
223
+ const builtInAttachments = [];
224
+ const customAttachments = [];
208
225
  attachments.forEach((attachment) => {
226
+ if (this.messageService.isCustomAttachment(attachment)) {
227
+ customAttachments.push(attachment);
228
+ }
229
+ else {
230
+ builtInAttachments.push(attachment);
231
+ }
232
+ });
233
+ builtInAttachments.forEach((attachment) => {
209
234
  if (isImageAttachment(attachment)) {
210
235
  attachmentUploads.push({
211
236
  url: (attachment.img_url ||
@@ -257,6 +282,9 @@ export class AttachmentService {
257
282
  ...attachmentUploads,
258
283
  ]);
259
284
  }
285
+ if (customAttachments.length > 0) {
286
+ this.customAttachments$.next(customAttachments);
287
+ }
260
288
  }
261
289
  async createPreview(file) {
262
290
  try {
@@ -274,7 +302,7 @@ export class AttachmentService {
274
302
  }
275
303
  }
276
304
  async uploadAttachments(uploads) {
277
- this.attachmentUploadInProgressCounterSubject.next(this.attachmentUploadInProgressCounterSubject.getValue() + 1);
305
+ this.attachmentUploadInProgressCounter$.next(this.attachmentUploadInProgressCounter$.value + 1);
278
306
  const result = await this.channelService.uploadAttachments(uploads);
279
307
  const attachmentUploads = this.attachmentUploadsSubject.getValue();
280
308
  result.forEach((r) => {
@@ -310,7 +338,7 @@ export class AttachmentService {
310
338
  this.notificationService.addTemporaryNotification(errorKey, 'error', undefined, translateParams);
311
339
  }
312
340
  });
313
- this.attachmentUploadInProgressCounterSubject.next(this.attachmentUploadInProgressCounterSubject.getValue() - 1);
341
+ this.attachmentUploadInProgressCounter$.next(this.attachmentUploadInProgressCounter$.value - 1);
314
342
  this.attachmentUploadsSubject.next([...attachmentUploads]);
315
343
  }
316
344
  async areAttachmentsHaveValidExtension(files) {
@@ -397,12 +425,12 @@ export class AttachmentService {
397
425
  return isValid;
398
426
  }
399
427
  }
400
- AttachmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentService, deps: [{ token: i1.ChannelService }, { token: i2.NotificationService }, { token: i3.ChatClientService }], target: i0.ɵɵFactoryTarget.Injectable });
428
+ AttachmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentService, deps: [{ token: i1.ChannelService }, { token: i2.NotificationService }, { token: i3.ChatClientService }, { token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
401
429
  AttachmentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentService, providedIn: 'root' });
402
430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentService, decorators: [{
403
431
  type: Injectable,
404
432
  args: [{
405
433
  providedIn: 'root',
406
434
  }]
407
- }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.NotificationService }, { type: i3.ChatClientService }]; } });
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2F0dGFjaG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUduRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFTMUQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFrQjVCLFlBQ1UsY0FBOEIsRUFDOUIsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUZwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBVnRDLDZDQUF3QyxHQUM5QyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6Qiw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FDcEQsRUFBRSxDQUNILENBQUM7UUFRQSxJQUFJLENBQUMsa0NBQWtDO1lBQ3JDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUMzQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUNsRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JB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LENBQUMsRUFBRSxFQUFFO1lBQ2xCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxxQkFBcUIsR0FBRyxDQUFDLEVBQUU7Z0JBQy9DLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO2dCQUM3QyxLQUFLLEdBQUcsbUJBQW1CLENBQUM7YUFDN0I7aUJBQU0sSUFBSSxvQkFBb0IsR0FBRyxDQUFDLEVBQUU7Z0JBQ25DLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO2dCQUM1QyxLQUFLLEdBQUcscUJBQXFCLENBQUM7YUFDL0I7WUFDRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLDZEQUE2RCxFQUM3RCxTQUFTLEVBQ1QsU0FBUyxFQUNULEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUMvQixDQUFDO2dCQUNGLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDakI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OzhHQXpjVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVVcmlGcm9tQmxvYiwgaXNJbWFnZUZpbGUgfSBmcm9tICcuL2ZpbGUtdXRpbHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBTZXR0aW5ncywgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNJbWFnZUF0dGFjaG1lbnQgfSBmcm9tICcuL2lzLWltYWdlLWF0dGFjaG1lbnQnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudFVwbG9hZCxcbiAgQXVkaW9SZWNvcmRpbmcsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgQXR0YWNobWVudFNlcnZpY2VgIG1hbmFnZXMgdGhlIHVwbG9hZHMgb2YgYSBtZXNzYWdlIGlucHV0LlxuICpcbiAqIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IFt1cGxvYWRzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9maWxlX3VwbG9hZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplKSBpbiB0aGUgU3RyZWFtIEFQSSBkb2N1bWVudGF0aW9uLiBZb3UgY2FuIHVzZSBTdHJlYW0ncyBBUEkgb3IgdGhlIGRhc2hib2FyZCB0byBjdXN0b21pemUgdGhlIFtmaWxlXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9hcHBfc2V0dGluZ19vdmVydmlldy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCZxPXNpemUjZmlsZS11cGxvYWRzKSBhbmQgW2ltYWdlIHVwbG9hZF0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvYXBwX3NldHRpbmdfb3ZlcnZpZXcvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplI2ltYWdlLXVwbG9hZHMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50U2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBwcm9ncmVzcy5cbiAgICovXG4gIGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgdXBsb2FkcyAoW2BBdHRhY2htZW50VXBsb2FkW11gXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3R5cGVzLnRzKSksIGl0IGFkZHMgYSBzdGF0ZSAoYHN1Y2Nlc3NgLCBgZXJyb3JgIG9yIGB1cGxvYWRpbmdgKSB0byBlYWNoIGZpbGUgdGhlIHVzZXIgc2VsZWN0cyBmb3IgdXBsb2FkLiBJdCBpcyB1c2VkIGJ5IHRoZSBbYEF0dGFjaG1lbnRQcmV2aWV3TGlzdGBdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudFByZXZpZXdMaXN0Q29tcG9uZW50Lm1keCkgdG8gZGlzcGxheSB0aGUgYXR0YWNobWVudCBwcmV2aWV3cy5cbiAgICovXG4gIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+O1xuICBwcml2YXRlIGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QgPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBhdHRhY2htZW50VXBsb2Fkc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0dGFjaG1lbnRVcGxvYWRbXT4oXG4gICAgW11cbiAgKTtcbiAgcHJpdmF0ZSBhcHBTZXR0aW5nczogQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJCA9XG4gICAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2FkcyQgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmFwcFNldHRpbmdzJC5zdWJzY3JpYmUoXG4gICAgICAoYXBwU2V0dGluZ3MpID0+ICh0aGlzLmFwcFNldHRpbmdzID0gYXBwU2V0dGluZ3MpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGF0dGFjaG1lbnRzIHVwbG9hZHMgKGZvciBleGFtcGxlIGFmdGVyIHRoZSBtZXNzYWdlIHdpdGggdGhlIGF0dGFjaG1lbnRzIHNlbnQgc3VjY2Vzc2Z1bGx5KVxuICAgKi9cbiAgcmVzZXRBdHRhY2htZW50VXBsb2FkcygpIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgYSB2b2ljZSByZWNvcmRpbmdcbiAgICogQHBhcmFtIGF1ZGlvUmVjb3JkaW5nXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIHRydWUgb3IgZmFsc2UuIElmIGZhbHNlIGlzIHJldHVybmVkIHRoZSB1cGxvYWQgd2FzIGNhbmNlbGVkIGJlY2F1c2Ugb2YgYSBjbGllbnQgc2lkZSBlcnJvci4gVGhlIGVycm9yIGlzIGVtaXR0ZWQgdmlhIHRoZSBgTm90aWZpY2F0aW9uU2VydmljZWAuXG4gICAqL1xuICBhc3luYyB1cGxvYWRWb2ljZVJlY29yZGluZyhhdWRpb1JlY29yZGluZzogQXVkaW9SZWNvcmRpbmcpIHtcbiAgICBpZiAoXG4gICAgICAhKGF3YWl0IHRoaXMuYXJlQXR0YWNobWVudHNIYXZlVmFsaWRFeHRlbnNpb24oW2F1ZGlvUmVjb3JkaW5nLnJlY29yZGluZ10pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCB0aGlzLmFyZUF0dGFjaG1lbnRzSGF2ZVZhbGlkU2l6ZShbYXVkaW9SZWNvcmRpbmcucmVjb3JkaW5nXSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkID0ge1xuICAgICAgZmlsZTogYXVkaW9SZWNvcmRpbmcucmVjb3JkaW5nLFxuICAgICAgcHJldmlld1VyaTogYXVkaW9SZWNvcmRpbmcuYXNzZXRfdXJsLFxuICAgICAgZXh0cmFEYXRhOiB7XG4gICAgICAgIGR1cmF0aW9uOiBhdWRpb1JlY29yZGluZy5kdXJhdGlvbixcbiAgICAgICAgd2F2ZWZvcm1fZGF0YTogYXVkaW9SZWNvcmRpbmcud2F2ZWZvcm1fZGF0YSxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICB0eXBlOiAndm9pY2VSZWNvcmRpbmcnIGFzIGNvbnN0LFxuICAgIH07XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbXG4gICAgICAuLi50aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgdXBsb2FkLFxuICAgIF0pO1xuICAgIGF3YWl0IHRoaXMudXBsb2FkQXR0YWNobWVudHMoW3VwbG9hZF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgdGhlIHNlbGVjdGVkIGZpbGVzLCBhbmQgY3JlYXRlcyBwcmV2aWV3IGZvciBpbWFnZSBmaWxlcy4gVGhlIHJlc3VsdCBpcyBwcm9wYWdhdGVkIHRocm91Z2h0IHRoZSBgYXR0YWNobWVudFVwbG9hZHMkYCBzdHJlYW0uXG4gICAqIEBwYXJhbSBmaWxlTGlzdCBUaGUgZmlsZXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIsIGlmIHlvdSBoYXZlIEJsb2JzIGluc3RlYWQgb2YgRmlsZXMsIHlvdSBjYW4gY29udmVydCB0aGVtIHdpdGggdGhpcyBtZXRob2Q6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlL0ZpbGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggdHJ1ZSBvciBmYWxzZS4gSWYgZmFsc2UgaXMgcmV0dXJuZWQgdGhlIHVwbG9hZCB3YXMgY2FuY2VsZWQgYmVjYXVzZSBvZiBhIGNsaWVudCBzaWRlIGVycm9yLiBUaGUgZXJyb3IgaXMgZW1pdHRlZCB2aWEgdGhlIGBOb3RpZmljYXRpb25TZXJ2aWNlYC5cbiAgICovXG4gIGFzeW5jIGZpbGVzU2VsZWN0ZWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgRmlsZVtdIHwgbnVsbCkge1xuICAgIGlmICghZmlsZUxpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZmlsZUxpc3QpO1xuXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hcmVBdHRhY2htZW50c0hhdmVWYWxpZEV4dGVuc2lvbihmaWxlcykpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IHRoaXMuYXJlQXR0YWNobWVudHNIYXZlVmFsaWRTaXplKGZpbGVzKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaW1hZ2VGaWxlczogRmlsZVtdID0gW107XG4gICAgY29uc3QgZGF0YUZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICBjb25zdCB2aWRlb0ZpbGVzOiBGaWxlW10gPSBbXTtcblxuICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmaWxlKSkge1xuICAgICAgICBpbWFnZUZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKCd2aWRlby8nKSkge1xuICAgICAgICB2aWRlb0ZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhRmlsZXMucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbWFnZUZpbGVzLmZvckVhY2goKGYpID0+IHZvaWQgdGhpcy5jcmVhdGVQcmV2aWV3KGYpKTtcbiAgICBjb25zdCBuZXdVcGxvYWRzID0gW1xuICAgICAgLi4uaW1hZ2VGaWxlcy5tYXAoKGZpbGUpID0+ICh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHN0YXRlOiAndXBsb2FkaW5nJyBhcyBjb25zdCxcbiAgICAgICAgdHlwZTogJ2ltYWdlJyBhcyBjb25zdCxcbiAgICAgIH0pKSxcbiAgICAgIC4uLnZpZGVvRmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICd2aWRlbycgYXMgY29uc3QsXG4gICAgICB9KSksXG4gICAgICAuLi5kYXRhRmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICdmaWxlJyBhcyBjb25zdCxcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoW1xuICAgICAgLi4udGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKSxcbiAgICAgIC4uLm5ld1VwbG9hZHMsXG4gICAgXSk7XG4gICAgYXdhaXQgdGhpcy51cGxvYWRBdHRhY2htZW50cyhuZXdVcGxvYWRzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGFkZCBjdXN0b20gYGltYWdlYCwgYHZpZGVvYCBhbmQgYGZpbGVgIGF0dGFjaG1lbnRzIHVzaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBOb3RlOiBJZiB5b3UganVzdCB3YW50IHRvIHVzZSB5b3VyIG93biBDRE4gZm9yIGZpbGUgdXBsb2FkcywgeW91IGRvbid0IG5lY2Vzc2FyeSBuZWVkIHRoaXMgbWV0aG9kLCB5b3UgY2FuIGp1c3Qgc3BlY2lmeSB5b3Ugb3duIHVwbG9hZCBmdW5jdGlvbiBpbiB0aGUgW2BDaGFubmVsU2VydmljZWBdKC4vQ2hhbm5lbFNlcnZpY2UubWR4KVxuICAgKiBAcGFyYW0gYXR0YWNobWVudFxuICAgKi9cbiAgYWRkQXR0YWNobWVudChhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+KSB7XG4gICAgYXR0YWNobWVudC5pc0N1c3RvbUF0dGFjaG1lbnQgPSB0cnVlO1xuICAgIHRoaXMuY3JlYXRlRnJvbUF0dGFjaG1lbnRzKFthdHRhY2htZW50XSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmllcyB0byB1cGxvYWQgYW4gYXR0YWNobWVudC5cbiAgICogQHBhcmFtIGZpbGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggdGhlIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgcmV0cnlBdHRhY2htZW50VXBsb2FkKGZpbGU6IEZpbGUpIHtcbiAgICBjb25zdCBhdHRhY2htZW50VXBsb2FkcyA9IHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodSkgPT4gdS5maWxlID09PSBmaWxlKTtcbiAgICBpZiAoIXVwbG9hZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGxvYWQuc3RhdGUgPSAndXBsb2FkaW5nJztcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5hdHRhY2htZW50VXBsb2Fkc10pO1xuICAgIGF3YWl0IHRoaXMudXBsb2FkQXR0YWNobWVudHMoW3VwbG9hZF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXR0YWNobWVudCwgdGhlIGF0dGFjaG1lbnQgY2FuIGhhdmUgYW55IHN0YXRlIChgZXJyb3JgLCBgdXBsb2FkaW5nYCBvciBgc3VjY2Vzc2ApLlxuICAgKiBAcGFyYW0gdXBsb2FkXG4gICAqL1xuICBhc3luYyBkZWxldGVBdHRhY2htZW50KHVwbG9hZDogQXR0YWNobWVudFVwbG9hZCkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICBsZXQgcmVzdWx0ITogQXR0YWNobWVudFVwbG9hZFtdO1xuICAgIGlmIChcbiAgICAgIHVwbG9hZC5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnICYmXG4gICAgICAhdXBsb2FkLmZyb21BdHRhY2htZW50Py5pc0N1c3RvbUF0dGFjaG1lbnRcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hhbm5lbFNlcnZpY2UuZGVsZXRlQXR0YWNobWVudCh1cGxvYWQpO1xuICAgICAgICByZXN1bHQgPSBbLi4uYXR0YWNobWVudFVwbG9hZHNdO1xuICAgICAgICBjb25zdCBpbmRleCA9IGF0dGFjaG1lbnRVcGxvYWRzLmluZGV4T2YodXBsb2FkKTtcbiAgICAgICAgcmVzdWx0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXN1bHQgPSBhdHRhY2htZW50VXBsb2FkcztcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBkZWxldGluZyBhdHRhY2htZW50J1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBbLi4uYXR0YWNobWVudFVwbG9hZHNdO1xuICAgICAgY29uc3QgaW5kZXggPSBhdHRhY2htZW50VXBsb2Fkcy5pbmRleE9mKHVwbG9hZCk7XG4gICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbLi4ucmVzdWx0XSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyB0aGUgY3VycmVudCB1cGxvYWRzIHRvIGEgZm9ybWF0IHRoYXQgY2FuIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgbWVzc2FnZSB0byB0aGUgU3RyZWFtIEFQSS5cbiAgICogQHJldHVybnMgdGhlIGF0dGFjaG1lbnRzXG4gICAqL1xuICBtYXBUb0F0dGFjaG1lbnRzKCkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gYXR0YWNobWVudFVwbG9hZHNcbiAgICAgIC5maWx0ZXIoKHIpID0+IHIuc3RhdGUgPT09ICdzdWNjZXNzJylcbiAgICAgIC5tYXAoKHIpID0+IHtcbiAgICAgICAgbGV0IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSB7XG4gICAgICAgICAgdHlwZTogci50eXBlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoci5mcm9tQXR0YWNobWVudCkge1xuICAgICAgICAgIHJldHVybiByLmZyb21BdHRhY2htZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF0dGFjaG1lbnQubWltZV90eXBlID0gci5maWxlPy50eXBlO1xuICAgICAgICAgIGlmIChyLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuZmFsbGJhY2sgPSByLmZpbGU/Lm5hbWU7XG4gICAgICAgICAgICBhdHRhY2htZW50LmltYWdlX3VybCA9IHIudXJsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRhY2htZW50LmFzc2V0X3VybCA9IHIudXJsO1xuICAgICAgICAgICAgYXR0YWNobWVudC50aXRsZSA9IHIuZmlsZT8ubmFtZTtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuZmlsZV9zaXplID0gci5maWxlPy5zaXplO1xuICAgICAgICAgICAgYXR0YWNobWVudC50aHVtYl91cmwgPSByLnRodW1iX3VybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHIuZXh0cmFEYXRhKSB7XG4gICAgICAgICAgICBhdHRhY2htZW50ID0geyAuLi5hdHRhY2htZW50LCAuLi5yLmV4dHJhRGF0YSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdHRhY2htZW50O1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBhdHRhY2htZW50cyByZWNlaXZlZCBmcm9tIHRoZSBTdHJlYW0gQVBJIHRvIHVwbG9hZHMuIFRoaXMgaXMgdXNlZnVsIHdoZW4gZWRpdGluZyBhIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBhdHRhY2htZW50cyBBdHRhY2hlbW50cyByZWNlaXZlZCB3aXRoIHRoZSBtZXNzYWdlXG4gICAqL1xuICBjcmVhdGVGcm9tQXR0YWNobWVudHMoYXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8VD5bXSkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzOiBBdHRhY2htZW50VXBsb2FkW10gPSBbXTtcbiAgICBhdHRhY2htZW50cy5mb3JFYWNoKChhdHRhY2htZW50KSA9PiB7XG4gICAgICBpZiAoaXNJbWFnZUF0dGFjaG1lbnQoYXR0YWNobWVudCkpIHtcbiAgICAgICAgYXR0YWNobWVudFVwbG9hZHMucHVzaCh7XG4gICAgICAgICAgdXJsOiAoYXR0YWNobWVudC5pbWdfdXJsIHx8XG4gICAgICAgICAgICBhdHRhY2htZW50LnRodW1iX3VybCB8fFxuICAgICAgICAgICAgYXR0YWNobWVudC5pbWFnZV91cmwpIGFzIHN0cmluZyxcbiAgICAgICAgICBzdGF0ZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgbmFtZTogYXR0YWNobWVudC5mYWxsYmFjayxcbiAgICAgICAgICAgIHR5cGU6IGF0dGFjaG1lbnQubWltZV90eXBlLFxuICAgICAgICAgIH0gYXMgRmlsZSxcbiAgICAgICAgICBmcm9tQXR0YWNobWVudDogYXR0YWNobWVudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQudHlwZSA9PT0gJ2ZpbGUnIHx8IGF0dGFjaG1lbnQudHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICBhdHRhY2htZW50VXBsb2Fkcy5wdXNoKHtcbiAgICAgICAgICB1cmw6IGF0dGFjaG1lbnQuYXNzZXRfdXJsLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgbmFtZTogYXR0YWNobWVudC50aXRsZSxcbiAgICAgICAgICAgIHNpemU6IGF0dGFjaG1lbnQuZmlsZV9zaXplLFxuICAgICAgICAgICAgdHlwZTogYXR0YWNobWVudC5taW1lX3R5cGUsXG4gICAgICAgICAgfSBhcyBGaWxlLFxuICAgICAgICAgIHR5cGU6IGF0dGFjaG1lbnQudHlwZSxcbiAgICAgICAgICB0aHVtYl91cmw6IGF0dGFjaG1lbnQudGh1bWJfdXJsLFxuICAgICAgICAgIGZyb21BdHRhY2htZW50OiBhdHRhY2htZW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC50eXBlID09PSAndm9pY2VSZWNvcmRpbmcnKSB7XG4gICAgICAgIGF0dGFjaG1lbnRVcGxvYWRzLnB1c2goe1xuICAgICAgICAgIHVybDogYXR0YWNobWVudC5hc3NldF91cmwsXG4gICAgICAgICAgc3RhdGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBuYW1lOiBhdHRhY2htZW50LnRpdGxlLFxuICAgICAgICAgICAgc2l6ZTogYXR0YWNobWVudC5maWxlX3NpemUsXG4gICAgICAgICAgICB0eXBlOiBhdHRhY2htZW50Lm1pbWVfdHlwZSxcbiAgICAgICAgICB9IGFzIEZpbGUsXG4gICAgICAgICAgdHlwZTogJ3ZvaWNlUmVjb3JkaW5nJyxcbiAgICAgICAgICBleHRyYURhdGE6IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBhdHRhY2htZW50LmR1cmF0aW9uLFxuICAgICAgICAgICAgd2F2ZWZvcm1fZGF0YTogYXR0YWNobWVudC53YXZlZm9ybV9kYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGF0dGFjaG1lbnRVcGxvYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoW1xuICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgICAuLi5hdHRhY2htZW50VXBsb2FkcyxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlUHJldmlldyhmaWxlOiBGaWxlIHwgQmxvYikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmkgPSBhd2FpdCBjcmVhdGVVcmlGcm9tQmxvYihmaWxlKTtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IHVwbG9hZCA9IGF0dGFjaG1lbnRVcGxvYWRzLmZpbmQoKHVwbG9hZCkgPT4gdXBsb2FkLmZpbGUgPT09IGZpbGUpO1xuICAgICAgaWYgKCF1cGxvYWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdXBsb2FkLnByZXZpZXdVcmkgPSB1cmk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5hdHRhY2htZW50VXBsb2Fkc10pO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMuY2hhdENsaWVudFNlcnZpY2U/LmNoYXRDbGllbnQ/LmxvZ2dlcihcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogYENhbid0IGNyZWF0ZSBpbWFnZSBwcmV2aWV3YCxcbiAgICAgICAgeyBlcnJvcjogZSwgdGFnOiBbJ0F0dGFjaG1lbnRTZXJ2aWNlJ10gfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEF0dGFjaG1lbnRzKHVwbG9hZHM6IEF0dGFjaG1lbnRVcGxvYWRbXSkge1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyU3ViamVjdC5uZXh0KFxuICAgICAgdGhpcy5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXJTdWJqZWN0LmdldFZhbHVlKCkgKyAxXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVwbG9hZEF0dGFjaG1lbnRzKHVwbG9hZHMpO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICByZXN1bHQuZm9yRWFjaCgocikgPT4ge1xuICAgICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodXBsb2FkKSA9PiB1cGxvYWQuZmlsZSA9PT0gci5maWxlKTtcbiAgICAgIGlmICghdXBsb2FkKSB7XG4gICAgICAgIGlmIChyLnVybCkge1xuICAgICAgICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVBdHRhY2htZW50KHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVwbG9hZC5zdGF0ZSA9IHIuc3RhdGU7XG4gICAgICB1cGxvYWQudXJsID0gci51cmw7XG4gICAgICB1cGxvYWQudGh1bWJfdXJsID0gci50aHVtYl91cmw7XG4gICAgICBpZiAodXBsb2FkLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHVwbG9hZC5lcnJvclJlYXNvbiA9IHIuZXJyb3JSZWFzb247XG4gICAgICAgIHVwbG9hZC5lcnJvckV4dHJhSW5mbyA9IHIuZXJyb3JFeHRyYUluZm87XG4gICAgICAgIGxldCBlcnJvcktleTtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlUGFyYW1zOiB7IG5hbWU6IHN0cmluZzsgZXh0Pzogc3RyaW5nOyBsaW1pdD86IHN0cmluZyB9ID1cbiAgICAgICAgICB7IG5hbWU6IHVwbG9hZC5maWxlLm5hbWUgfTtcbiAgICAgICAgc3dpdGNoICh1cGxvYWQuZXJyb3JSZWFzb24pIHtcbiAgICAgICAgICBjYXNlICdmaWxlLWV4dGVuc2lvbic6XG4gICAgICAgICAgICBlcnJvcktleSA9XG4gICAgICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlLCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCc7XG4gICAgICAgICAgICB0cmFuc2xhdGVQYXJhbXMuZXh0ID0gdXBsb2FkLmVycm9yRXh0cmFJbmZvPy5bMF0/LnBhcmFtO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZmlsZS1zaXplJzpcbiAgICAgICAgICAgIGVycm9yS2V5ID1cbiAgICAgICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgdXBsb2FkaW5nIGZpbGUsIG1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkJztcbiAgICAgICAgICAgIHRyYW5zbGF0ZVBhcmFtcy5saW1pdCA9IHVwbG9hZC5lcnJvckV4dHJhSW5mbz8uWzBdPy5wYXJhbTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcktleSA9ICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yS2V5LFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRyYW5zbGF0ZVBhcmFtc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyU3ViamVjdC5uZXh0KFxuICAgICAgdGhpcy5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXJTdWJqZWN0LmdldFZhbHVlKCkgLSAxXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5hdHRhY2htZW50VXBsb2Fkc10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2htZW50c0hhdmVWYWxpZEV4dGVuc2lvbihmaWxlczogRmlsZVtdKSB7XG4gICAgaWYgKCF0aGlzLmFwcFNldHRpbmdzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmdldEFwcFNldHRpbmdzKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIGZpbGVzLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBoYXNCbG9ja2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc0Jsb2NrZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmKSkge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciB1cGxvYWRpbmcgZmlsZSwgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBuYW1lOiBmLm5hbWUsIGV4dDogZi50eXBlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2htZW50c0hhdmVWYWxpZFNpemUoZmlsZXM6IEZpbGVbXSkge1xuICAgIGlmICghdGhpcy5hcHBTZXR0aW5ncykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5nZXRBcHBTZXR0aW5ncygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGltYWdlU2l6ZUxpbWl0SW5CeXRlcyA9XG4gICAgICB0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5zaXplX2xpbWl0IHx8IDA7XG4gICAgY29uc3QgaW1hZ2VTaXplTGltaVN0cmluZyA9IGAke2ltYWdlU2l6ZUxpbWl0SW5CeXRlcyAvICgxMDI0ICogMTAyNCl9TUJgO1xuICAgIGNvbnN0IGZpbGVTaXplTGltaXRJbkJ5dGVzID1cbiAgICAgIHRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uc2l6ZV9saW1pdCB8fCAwO1xuICAgIGNvbnN0IGZpbGVTaXplTGltaXRJblN0cmluZyA9IGAke2ZpbGVTaXplTGltaXRJbkJ5dGVzIC8gKDEwMjQgKiAxMDI0KX1NQmA7XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIGZpbGVzLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBpc092ZXJTaXplZCA9IGZhbHNlO1xuICAgICAgbGV0IGxpbWl0ID0gJyc7XG4gICAgICBpZiAoaXNJbWFnZUZpbGUoZikgJiYgaW1hZ2VTaXplTGltaXRJbkJ5dGVzID4gMCkge1xuICAgICAgICBpc092ZXJTaXplZCA9IGYuc2l6ZSA+IGltYWdlU2l6ZUxpbWl0SW5CeXRlcztcbiAgICAgICAgbGltaXQgPSBpbWFnZVNpemVMaW1pU3RyaW5nO1xuICAgICAgfSBlbHNlIGlmIChmaWxlU2l6ZUxpbWl0SW5CeXRlcyA+IDApIHtcbiAgICAgICAgaXNPdmVyU2l6ZWQgPSBmLnNpemUgPiBmaWxlU2l6ZUxpbWl0SW5CeXRlcztcbiAgICAgICAgbGltaXQgPSBmaWxlU2l6ZUxpbWl0SW5TdHJpbmc7XG4gICAgICB9XG4gICAgICBpZiAoaXNPdmVyU2l6ZWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciB1cGxvYWRpbmcgZmlsZSwgbWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBuYW1lOiBmLm5hbWUsIGxpbWl0OiBsaW1pdCB9XG4gICAgICAgICk7XG4gICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxufVxuIl19
435
+ }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.NotificationService }, { type: i3.ChatClientService }, { type: i4.MessageService }]; } });
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2F0dGFjaG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUduRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBVTFEOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBMEI1QixZQUNVLGNBQThCLEVBQzlCLG1CQUF3QyxFQUN4QyxpQkFBb0MsRUFDcEMsY0FBOEI7UUFIOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUEzQnhDOzs7Ozs7V0FNRztRQUNILHVDQUFrQyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBS3BFOzs7O1dBSUc7UUFDSCx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBa0IsRUFBRSxDQUFDLENBQUM7UUFDdEQsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQ3BELEVBQUUsQ0FDSCxDQUFDO1FBU0EsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FDbEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsY0FBOEI7UUFDdkQsSUFDRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUMxRTtZQUNBLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sTUFBTSxHQUFHO1lBQ2IsSUFBSSxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQzlCLFVBQVUsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNwQyxTQUFTLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO2dCQUNqQyxhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWE7YUFDNUM7WUFDRCxLQUFLLEVBQUUsV0FBb0I7WUFDM0IsSUFBSSxFQUFFLGdCQUF5QjtTQUNoQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztZQUNqQyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUU7WUFDM0MsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFrQztRQUNwRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3pELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLFVBQVUsR0FBVyxFQUFFLENBQUM7UUFDOUIsTUFBTSxTQUFTLEdBQVcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sVUFBVSxHQUFXLEVBQUUsQ0FBQztRQUU5QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNCLElBQUk7Z0JBQ0osS0FBSyxFQUFFLFdBQW9CO2dCQUMzQixJQUFJLEVBQUUsT0FBZ0I7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixJQUFJO2dCQUNKLEtBQUssRUFBRSxXQUFvQjtnQkFDM0IsSUFBSSxFQUFFLE9BQWdCO2FBQ3ZCLENBQUMsQ0FBQztZQUNILEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUIsSUFBSTtnQkFDSixLQUFLLEVBQUUsV0FBb0I7Z0JBQzNCLElBQUksRUFBRSxNQUFlO2FBQ3RCLENBQUMsQ0FBQztTQUNKLENBQUM7UUFDRixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO1lBQ2pDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtZQUMzQyxHQUFHLFVBQVU7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxVQUF5QjtRQUNyQyxVQUFVLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBVTtRQUNwQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUNELE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1FBQzNCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUF3QjtRQUM3QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxJQUFJLE1BQTJCLENBQUM7UUFDaEMsSUFDRSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDMUIsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLGtCQUFrQixFQUMxQztZQUNBLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxNQUFNLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msc0NBQXNDLENBQ3ZDLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxNQUFNLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCO1FBQ2QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUI7YUFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQzthQUNwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNULElBQUksVUFBVSxHQUFlO2dCQUMzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7YUFDYixDQUFDO1lBQ0YsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFO2dCQUNwQixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDcEMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtvQkFDdEIsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztvQkFDbkMsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDTCxVQUFVLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQzdCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7b0JBQ2hDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7b0JBQ3BDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztpQkFDcEM7Z0JBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO29CQUNmLFVBQVUsR0FBRyxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2lCQUNoRDthQUNGO1lBRUQsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxPQUFPLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gscUJBQXFCLENBQUMsV0FBNEI7UUFDaEQsTUFBTSxpQkFBaUIsR0FBdUIsRUFBRSxDQUFDO1FBQ2pELE1BQU0sa0JBQWtCLEdBQW9CLEVBQUUsQ0FBQztRQUMvQyxNQUFNLGlCQUFpQixHQUFvQixFQUFFLENBQUM7UUFDOUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDdEQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNMLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDakMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO29CQUNyQixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTzt3QkFDdEIsVUFBVSxDQUFDLFNBQVM7d0JBQ3BCLFVBQVUsQ0FBQyxTQUFTLENBQVc7b0JBQ2pDLEtBQUssRUFBRSxTQUFTO29CQUNoQixJQUFJLEVBQUUsT0FBTztvQkFDYixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRO3dCQUN6QixJQUFJLEVBQUUsVUFBVSxDQUFDLFNBQVM7cUJBQ25CO29CQUNULGNBQWMsRUFBRSxVQUFVO2lCQUMzQixDQUFDLENBQUM7YUFDSjtpQkFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUNwRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLEdBQUcsRUFBRSxVQUFVLENBQUMsU0FBUztvQkFDekIsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUs7d0JBQ3RCLElBQUksRUFBRSxVQUFVLENBQUMsU0FBUzt3QkFDMUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTO3FCQUNuQjtvQkFDVCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7b0JBQ3JCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztvQkFDL0IsY0FBYyxFQUFFLFVBQVU7aUJBQzNCLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtnQkFDL0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDO29CQUNyQixHQUFHLEVBQUUsVUFBVSxDQUFDLFNBQVM7b0JBQ3pCLEtBQUssRUFBRSxTQUFTO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLO3dCQUN0QixJQUFJLEVBQUUsVUFBVSxDQUFDLFNBQVM7d0JBQzFCLElBQUksRUFBRSxVQUFVLENBQUMsU0FBUztxQkFDbkI7b0JBQ1QsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsU0FBUyxFQUFFO3dCQUNULFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTt3QkFDN0IsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhO3FCQUN4QztpQkFDRixDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtnQkFDM0MsR0FBRyxpQkFBaUI7YUFDckIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBaUI7UUFDM0MsSUFBSTtZQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkUsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsT0FBTzthQUNSO1lBQ0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1NBQzVEO1FBQUMsT0FBTyxDQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLENBQ3hDLE9BQU8sRUFDUCxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsRUFDN0QsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FDekMsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUEyQjtRQUN6RCxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUMxQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FDbEQsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtvQkFDVCxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlDO2dCQUNELE9BQU87YUFDUjtZQUNELE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDbkIsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9CLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUN6QyxJQUFJLFFBQVEsQ0FBQztnQkFDYixNQUFNLGVBQWUsR0FDbkIsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsUUFBUSxNQUFNLENBQUMsV0FBVyxFQUFFO29CQUMxQixLQUFLLGdCQUFnQjt3QkFDbkIsUUFBUTs0QkFDTiwwREFBMEQsQ0FBQzt3QkFDN0QsZUFBZSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO3dCQUN4RCxNQUFNO29CQUNSLEtBQUssV0FBVzt3QkFDZCxRQUFROzRCQUNOLDZEQUE2RCxDQUFDO3dCQUNoRSxlQUFlLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7d0JBQzFELE1BQU07b0JBQ1I7d0JBQ0UsUUFBUSxHQUFHLGlDQUFpQyxDQUFDO2lCQUNoRDtnQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLFFBQVEsRUFDUixPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsQ0FDaEIsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUMxQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FDbEQsQ0FBQztRQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdDQUFnQyxDQUFDLEtBQWE7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUMvQztZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxtQkFBNEIsQ0FBQztZQUNqQyxJQUFJLGtCQUEyQixDQUFDO1lBQ2hDLElBQUksc0JBQStCLENBQUM7WUFDcEMsSUFBSSxxQkFBOEIsQ0FBQztZQUNuQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEIsbUJBQW1CO29CQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLENBQ3BFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDOUIsQ0FBQztnQkFDSixrQkFBa0I7b0JBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FDL0QsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUMxQixDQUFDO2dCQUNKLHNCQUFzQjtvQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCO3dCQUM5RCxFQUFFLE1BQU07d0JBQ1YsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FDbkUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUM5QixDQUFDO2dCQUNKLHFCQUFxQjtvQkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTTt3QkFDbkUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FDOUQsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUMxQixDQUFDO2FBQ0w7aUJBQU07Z0JBQ0wsbUJBQW1CO29CQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLENBQ25FLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDOUIsQ0FBQztnQkFDSixrQkFBa0I7b0JBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FDOUQsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUMxQixDQUFDO2dCQUNKLHNCQUFzQjtvQkFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCO3dCQUM3RCxFQUFFLE1BQU07d0JBQ1YsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FDbEUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUM5QixDQUFDO2dCQUNKLHFCQUFxQjtvQkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTTt3QkFDbEUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FDN0QsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUMxQixDQUFDO2FBQ0w7WUFDRCxJQUNFLG1CQUFtQjtnQkFDbkIsa0JBQWtCO2dCQUNsQixzQkFBc0I7Z0JBQ3RCLHFCQUFxQixFQUNyQjtnQkFDQSxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLDBEQUEwRCxFQUMxRCxTQUFTLEVBQ1QsU0FBUyxFQUNULEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDOUIsQ0FBQztnQkFDRixPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQWE7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUMvQztZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE1BQU0scUJBQXFCLEdBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUN6RCxNQUFNLG1CQUFtQixHQUFHLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN6RSxNQUFNLG9CQUFvQixHQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDeEQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLG9CQUFvQixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDMUUsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztnQkFDN0MsS0FBSyxHQUFHLG1CQUFtQixDQUFDO2FBQzdCO2lCQUFNLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztnQkFDNUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDO2FBQy9CO1lBQ0QsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUMvQyw2REFBNkQsRUFDN0QsU0FBUyxFQUNULFNBQVMsRUFDVCxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FDL0IsQ0FBQztnQkFDRixPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs4R0EvZFUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlVXJpRnJvbUJsb2IsIGlzSW1hZ2VGaWxlIH0gZnJvbSAnLi9maWxlLXV0aWxzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwU2V0dGluZ3MsIEF0dGFjaG1lbnQgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IGlzSW1hZ2VBdHRhY2htZW50IH0gZnJvbSAnLi9pcy1pbWFnZS1hdHRhY2htZW50JztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRVcGxvYWQsXG4gIEF1ZGlvUmVjb3JkaW5nLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9tZXNzYWdlLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgQXR0YWNobWVudFNlcnZpY2VgIG1hbmFnZXMgdGhlIHVwbG9hZHMgb2YgYSBtZXNzYWdlIGlucHV0LlxuICpcbiAqIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IFt1cGxvYWRzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9maWxlX3VwbG9hZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplKSBpbiB0aGUgU3RyZWFtIEFQSSBkb2N1bWVudGF0aW9uLiBZb3UgY2FuIHVzZSBTdHJlYW0ncyBBUEkgb3IgdGhlIGRhc2hib2FyZCB0byBjdXN0b21pemUgdGhlIFtmaWxlXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9hcHBfc2V0dGluZ19vdmVydmlldy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCZxPXNpemUjZmlsZS11cGxvYWRzKSBhbmQgW2ltYWdlIHVwbG9hZF0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvYXBwX3NldHRpbmdfb3ZlcnZpZXcvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplI2ltYWdlLXVwbG9hZHMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50U2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogWW91IGNhbiBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIgaWYgeW91J3JlIHVzaW5nIGN1c3RvbSBhdHRhY2htZW50cyBhbmQgd2FudCB0byBkaXNhYmxlIG1lc3NhZ2Ugc2VuZGluZyB1bnRpbCBhbGwgYXR0YWNobWVudHMgYXJlIHVwbG9hZGVkLlxuICAgKlxuICAgKiBUaGUgU0RLIHdpbGwgaGFuZGxlIHVwZGF0aW5nIHRoaXMgY291bnRlciBmb3IgYnVpbHQtaW4gYXR0YWNobWVudHMsIGJ1dCBmb3IgY3VzdG9tIGF0dGFjaG1lbnRzIHlvdSBzaG91bGQgdGFrZSBjYXJlIG9mIHRoaXMuXG4gICAqL1xuICBhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAvKipcbiAgICogRW1pdHMgdGhlIHN0YXRlIG9mIHRoZSB1cGxvYWRzIChbYEF0dGFjaG1lbnRVcGxvYWRbXWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci9ibG9iL21hc3Rlci9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvdHlwZXMudHMpKSwgaXQgYWRkcyBhIHN0YXRlIChgc3VjY2Vzc2AsIGBlcnJvcmAgb3IgYHVwbG9hZGluZ2ApIHRvIGVhY2ggZmlsZSB0aGUgdXNlciBzZWxlY3RzIGZvciB1cGxvYWQuIEl0IGlzIHVzZWQgYnkgdGhlIFtgQXR0YWNobWVudFByZXZpZXdMaXN0YF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50UHJldmlld0xpc3RDb21wb25lbnQubWR4KSB0byBkaXNwbGF5IHRoZSBhdHRhY2htZW50IHByZXZpZXdzLlxuICAgKi9cbiAgYXR0YWNobWVudFVwbG9hZHMkOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnRVcGxvYWRbXT47XG4gIC8qKlxuICAgKiBZb3UgY2FuIGdldCBhbmQgc2V0IHRoZSBsaXN0IGlmIHVwbG9hZGVkIGN1c3RvbSBhdHRhY2htZW50c1xuICAgKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBTREsgY29tcG9uZW50cyB3b24ndCBkaXNwbGF5IHRoZXNlLCBidXQgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGBjdXN0b21BdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZSRgIGFuZCBgY3VzdG9tQXR0YWNobWVudExpc3RUZW1wbGF0ZSRgIGZvciB0aGUgW2BDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlYF0oLi4vLi4vc2VydmljZXMvQ3VzdG9tVGVtcGxhdGVzU2VydmljZSkuXG4gICAqL1xuICBjdXN0b21BdHRhY2htZW50cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0dGFjaG1lbnQ8VD5bXT4oW10pO1xuICBwcml2YXRlIGF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXR0YWNobWVudFVwbG9hZFtdPihcbiAgICBbXVxuICApO1xuICBwcml2YXRlIGFwcFNldHRpbmdzOiBBcHBTZXR0aW5ncyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2FkcyQgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmFwcFNldHRpbmdzJC5zdWJzY3JpYmUoXG4gICAgICAoYXBwU2V0dGluZ3MpID0+ICh0aGlzLmFwcFNldHRpbmdzID0gYXBwU2V0dGluZ3MpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGF0dGFjaG1lbnRzIHVwbG9hZHMgKGZvciBleGFtcGxlIGFmdGVyIHRoZSBtZXNzYWdlIHdpdGggdGhlIGF0dGFjaG1lbnRzIHNlbnQgc3VjY2Vzc2Z1bGx5KVxuICAgKi9cbiAgcmVzZXRBdHRhY2htZW50VXBsb2FkcygpIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFtdKTtcbiAgICB0aGlzLmN1c3RvbUF0dGFjaG1lbnRzJC5uZXh0KFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgYSB2b2ljZSByZWNvcmRpbmdcbiAgICogQHBhcmFtIGF1ZGlvUmVjb3JkaW5nXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIHRydWUgb3IgZmFsc2UuIElmIGZhbHNlIGlzIHJldHVybmVkIHRoZSB1cGxvYWQgd2FzIGNhbmNlbGVkIGJlY2F1c2Ugb2YgYSBjbGllbnQgc2lkZSBlcnJvci4gVGhlIGVycm9yIGlzIGVtaXR0ZWQgdmlhIHRoZSBgTm90aWZpY2F0aW9uU2VydmljZWAuXG4gICAqL1xuICBhc3luYyB1cGxvYWRWb2ljZVJlY29yZGluZyhhdWRpb1JlY29yZGluZzogQXVkaW9SZWNvcmRpbmcpIHtcbiAgICBpZiAoXG4gICAgICAhKGF3YWl0IHRoaXMuYXJlQXR0YWNobWVudHNIYXZlVmFsaWRFeHRlbnNpb24oW2F1ZGlvUmVjb3JkaW5nLnJlY29yZGluZ10pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCB0aGlzLmFyZUF0dGFjaG1lbnRzSGF2ZVZhbGlkU2l6ZShbYXVkaW9SZWNvcmRpbmcucmVjb3JkaW5nXSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkID0ge1xuICAgICAgZmlsZTogYXVkaW9SZWNvcmRpbmcucmVjb3JkaW5nLFxuICAgICAgcHJldmlld1VyaTogYXVkaW9SZWNvcmRpbmcuYXNzZXRfdXJsLFxuICAgICAgZXh0cmFEYXRhOiB7XG4gICAgICAgIGR1cmF0aW9uOiBhdWRpb1JlY29yZGluZy5kdXJhdGlvbixcbiAgICAgICAgd2F2ZWZvcm1fZGF0YTogYXVkaW9SZWNvcmRpbmcud2F2ZWZvcm1fZGF0YSxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICB0eXBlOiAndm9pY2VSZWNvcmRpbmcnIGFzIGNvbnN0LFxuICAgIH07XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbXG4gICAgICAuLi50aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgdXBsb2FkLFxuICAgIF0pO1xuICAgIGF3YWl0IHRoaXMudXBsb2FkQXR0YWNobWVudHMoW3VwbG9hZF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgdGhlIHNlbGVjdGVkIGZpbGVzLCBhbmQgY3JlYXRlcyBwcmV2aWV3IGZvciBpbWFnZSBmaWxlcy4gVGhlIHJlc3VsdCBpcyBwcm9wYWdhdGVkIHRocm91Z2h0IHRoZSBgYXR0YWNobWVudFVwbG9hZHMkYCBzdHJlYW0uXG4gICAqIEBwYXJhbSBmaWxlTGlzdCBUaGUgZmlsZXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIsIGlmIHlvdSBoYXZlIEJsb2JzIGluc3RlYWQgb2YgRmlsZXMsIHlvdSBjYW4gY29udmVydCB0aGVtIHdpdGggdGhpcyBtZXRob2Q6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlL0ZpbGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggdHJ1ZSBvciBmYWxzZS4gSWYgZmFsc2UgaXMgcmV0dXJuZWQgdGhlIHVwbG9hZCB3YXMgY2FuY2VsZWQgYmVjYXVzZSBvZiBhIGNsaWVudCBzaWRlIGVycm9yLiBUaGUgZXJyb3IgaXMgZW1pdHRlZCB2aWEgdGhlIGBOb3RpZmljYXRpb25TZXJ2aWNlYC5cbiAgICovXG4gIGFzeW5jIGZpbGVzU2VsZWN0ZWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgRmlsZVtdIHwgbnVsbCkge1xuICAgIGlmICghZmlsZUxpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZmlsZUxpc3QpO1xuXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hcmVBdHRhY2htZW50c0hhdmVWYWxpZEV4dGVuc2lvbihmaWxlcykpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IHRoaXMuYXJlQXR0YWNobWVudHNIYXZlVmFsaWRTaXplKGZpbGVzKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaW1hZ2VGaWxlczogRmlsZVtdID0gW107XG4gICAgY29uc3QgZGF0YUZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICBjb25zdCB2aWRlb0ZpbGVzOiBGaWxlW10gPSBbXTtcblxuICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmaWxlKSkge1xuICAgICAgICBpbWFnZUZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKCd2aWRlby8nKSkge1xuICAgICAgICB2aWRlb0ZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhRmlsZXMucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbWFnZUZpbGVzLmZvckVhY2goKGYpID0+IHZvaWQgdGhpcy5jcmVhdGVQcmV2aWV3KGYpKTtcbiAgICBjb25zdCBuZXdVcGxvYWRzID0gW1xuICAgICAgLi4uaW1hZ2VGaWxlcy5tYXAoKGZpbGUpID0+ICh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHN0YXRlOiAndXBsb2FkaW5nJyBhcyBjb25zdCxcbiAgICAgICAgdHlwZTogJ2ltYWdlJyBhcyBjb25zdCxcbiAgICAgIH0pKSxcbiAgICAgIC4uLnZpZGVvRmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICd2aWRlbycgYXMgY29uc3QsXG4gICAgICB9KSksXG4gICAgICAuLi5kYXRhRmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICdmaWxlJyBhcyBjb25zdCxcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoW1xuICAgICAgLi4udGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKSxcbiAgICAgIC4uLm5ld1VwbG9hZHMsXG4gICAgXSk7XG4gICAgYXdhaXQgdGhpcy51cGxvYWRBdHRhY2htZW50cyhuZXdVcGxvYWRzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGFkZCBjdXN0b20gYGltYWdlYCwgYHZpZGVvYCBhbmQgYGZpbGVgIGF0dGFjaG1lbnRzIHVzaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBOb3RlOiBJZiB5b3UganVzdCB3YW50IHRvIHVzZSB5b3VyIG93biBDRE4gZm9yIGZpbGUgdXBsb2FkcywgeW91IGRvbid0IG5lY2Vzc2FyeSBuZWVkIHRoaXMgbWV0aG9kLCB5b3UgY2FuIGp1c3Qgc3BlY2lmeSB5b3Ugb3duIHVwbG9hZCBmdW5jdGlvbiBpbiB0aGUgW2BDaGFubmVsU2VydmljZWBdKC4vQ2hhbm5lbFNlcnZpY2UubWR4KVxuICAgKiBAcGFyYW0gYXR0YWNobWVudFxuICAgKi9cbiAgYWRkQXR0YWNobWVudChhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+KSB7XG4gICAgYXR0YWNobWVudC5pc0N1c3RvbUF0dGFjaG1lbnQgPSB0cnVlO1xuICAgIHRoaXMuY3JlYXRlRnJvbUF0dGFjaG1lbnRzKFthdHRhY2htZW50XSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmllcyB0byB1cGxvYWQgYW4gYXR0YWNobWVudC5cbiAgICogQHBhcmFtIGZpbGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggdGhlIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgcmV0cnlBdHRhY2htZW50VXBsb2FkKGZpbGU6IEZpbGUpIHtcbiAgICBjb25zdCBhdHRhY2htZW50VXBsb2FkcyA9IHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodSkgPT4gdS5maWxlID09PSBmaWxlKTtcbiAgICBpZiAoIXVwbG9hZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGxvYWQuc3RhdGUgPSAndXBsb2FkaW5nJztcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5hdHRhY2htZW50VXBsb2Fkc10pO1xuICAgIGF3YWl0IHRoaXMudXBsb2FkQXR0YWNobWVudHMoW3VwbG9hZF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXR0YWNobWVudCwgdGhlIGF0dGFjaG1lbnQgY2FuIGhhdmUgYW55IHN0YXRlIChgZXJyb3JgLCBgdXBsb2FkaW5nYCBvciBgc3VjY2Vzc2ApLlxuICAgKiBAcGFyYW0gdXBsb2FkXG4gICAqL1xuICBhc3luYyBkZWxldGVBdHRhY2htZW50KHVwbG9hZDogQXR0YWNobWVudFVwbG9hZCkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICBsZXQgcmVzdWx0ITogQXR0YWNobWVudFVwbG9hZFtdO1xuICAgIGlmIChcbiAgICAgIHVwbG9hZC5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnICYmXG4gICAgICAhdXBsb2FkLmZyb21BdHRhY2htZW50Py5pc0N1c3RvbUF0dGFjaG1lbnRcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hhbm5lbFNlcnZpY2UuZGVsZXRlQXR0YWNobWVudCh1cGxvYWQpO1xuICAgICAgICByZXN1bHQgPSBbLi4uYXR0YWNobWVudFVwbG9hZHNdO1xuICAgICAgICBjb25zdCBpbmRleCA9IGF0dGFjaG1lbnRVcGxvYWRzLmluZGV4T2YodXBsb2FkKTtcbiAgICAgICAgcmVzdWx0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXN1bHQgPSBhdHRhY2htZW50VXBsb2FkcztcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBkZWxldGluZyBhdHRhY2htZW50J1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBbLi4uYXR0YWNobWVudFVwbG9hZHNdO1xuICAgICAgY29uc3QgaW5kZXggPSBhdHRhY2htZW50VXBsb2Fkcy5pbmRleE9mKHVwbG9hZCk7XG4gICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbLi4ucmVzdWx0XSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyB0aGUgY3VycmVudCB1cGxvYWRzIHRvIGEgZm9ybWF0IHRoYXQgY2FuIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgbWVzc2FnZSB0byB0aGUgU3RyZWFtIEFQSS5cbiAgICogQHJldHVybnMgdGhlIGF0dGFjaG1lbnRzXG4gICAqL1xuICBtYXBUb0F0dGFjaG1lbnRzKCkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBidWlsdEluQXR0YWNobWVudHMgPSBhdHRhY2htZW50VXBsb2Fkc1xuICAgICAgLmZpbHRlcigocikgPT4gci5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnKVxuICAgICAgLm1hcCgocikgPT4ge1xuICAgICAgICBsZXQgYXR0YWNobWVudDogQXR0YWNobWVudCA9IHtcbiAgICAgICAgICB0eXBlOiByLnR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChyLmZyb21BdHRhY2htZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHIuZnJvbUF0dGFjaG1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXR0YWNobWVudC5taW1lX3R5cGUgPSByLmZpbGU/LnR5cGU7XG4gICAgICAgICAgaWYgKHIudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgYXR0YWNobWVudC5mYWxsYmFjayA9IHIuZmlsZT8ubmFtZTtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuaW1hZ2VfdXJsID0gci51cmw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuYXNzZXRfdXJsID0gci51cmw7XG4gICAgICAgICAgICBhdHRhY2htZW50LnRpdGxlID0gci5maWxlPy5uYW1lO1xuICAgICAgICAgICAgYXR0YWNobWVudC5maWxlX3NpemUgPSByLmZpbGU/LnNpemU7XG4gICAgICAgICAgICBhdHRhY2htZW50LnRodW1iX3VybCA9IHIudGh1bWJfdXJsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoci5leHRyYURhdGEpIHtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQgPSB7IC4uLmF0dGFjaG1lbnQsIC4uLnIuZXh0cmFEYXRhIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnQ7XG4gICAgICB9KTtcbiAgICByZXR1cm4gWy4uLmJ1aWx0SW5BdHRhY2htZW50cywgLi4udGhpcy5jdXN0b21BdHRhY2htZW50cyQudmFsdWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYXR0YWNobWVudHMgcmVjZWl2ZWQgZnJvbSB0aGUgU3RyZWFtIEFQSSB0byB1cGxvYWRzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGVkaXRpbmcgYSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gYXR0YWNobWVudHMgQXR0YWNoZW1udHMgcmVjZWl2ZWQgd2l0aCB0aGUgbWVzc2FnZVxuICAgKi9cbiAgY3JlYXRlRnJvbUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiBBdHRhY2htZW50PFQ+W10pIHtcbiAgICBjb25zdCBhdHRhY2htZW50VXBsb2FkczogQXR0YWNobWVudFVwbG9hZFtdID0gW107XG4gICAgY29uc3QgYnVpbHRJbkF0dGFjaG1lbnRzOiBBdHRhY2htZW50PFQ+W10gPSBbXTtcbiAgICBjb25zdCBjdXN0b21BdHRhY2htZW50czogQXR0YWNobWVudDxUPltdID0gW107XG4gICAgYXR0YWNobWVudHMuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMubWVzc2FnZVNlcnZpY2UuaXNDdXN0b21BdHRhY2htZW50KGF0dGFjaG1lbnQpKSB7XG4gICAgICAgIGN1c3RvbUF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsdEluQXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBidWlsdEluQXR0YWNobWVudHMuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xuICAgICAgaWYgKGlzSW1hZ2VBdHRhY2htZW50KGF0dGFjaG1lbnQpKSB7XG4gICAgICAgIGF0dGFjaG1lbnRVcGxvYWRzLnB1c2goe1xuICAgICAgICAgIHVybDogKGF0dGFjaG1lbnQuaW1nX3VybCB8fFxuICAgICAgICAgICAgYXR0YWNobWVudC50aHVtYl91cmwgfHxcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuaW1hZ2VfdXJsKSBhcyBzdHJpbmcsXG4gICAgICAgICAgc3RhdGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIG5hbWU6IGF0dGFjaG1lbnQuZmFsbGJhY2ssXG4gICAgICAgICAgICB0eXBlOiBhdHRhY2htZW50Lm1pbWVfdHlwZSxcbiAgICAgICAgICB9IGFzIEZpbGUsXG4gICAgICAgICAgZnJvbUF0dGFjaG1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LnR5cGUgPT09ICdmaWxlJyB8fCBhdHRhY2htZW50LnR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgYXR0YWNobWVudFVwbG9hZHMucHVzaCh7XG4gICAgICAgICAgdXJsOiBhdHRhY2htZW50LmFzc2V0X3VybCxcbiAgICAgICAgICBzdGF0ZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIG5hbWU6IGF0dGFjaG1lbnQudGl0bGUsXG4gICAgICAgICAgICBzaXplOiBhdHRhY2htZW50LmZpbGVfc2l6ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dGFjaG1lbnQubWltZV90eXBlLFxuICAgICAgICAgIH0gYXMgRmlsZSxcbiAgICAgICAgICB0eXBlOiBhdHRhY2htZW50LnR5cGUsXG4gICAgICAgICAgdGh1bWJfdXJsOiBhdHRhY2htZW50LnRodW1iX3VybCxcbiAgICAgICAgICBmcm9tQXR0YWNobWVudDogYXR0YWNobWVudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQudHlwZSA9PT0gJ3ZvaWNlUmVjb3JkaW5nJykge1xuICAgICAgICBhdHRhY2htZW50VXBsb2Fkcy5wdXNoKHtcbiAgICAgICAgICB1cmw6IGF0dGFjaG1lbnQuYXNzZXRfdXJsLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgbmFtZTogYXR0YWNobWVudC50aXRsZSxcbiAgICAgICAgICAgIHNpemU6IGF0dGFjaG1lbnQuZmlsZV9zaXplLFxuICAgICAgICAgICAgdHlwZTogYXR0YWNobWVudC5taW1lX3R5cGUsXG4gICAgICAgICAgfSBhcyBGaWxlLFxuICAgICAgICAgIHR5cGU6ICd2b2ljZVJlY29yZGluZycsXG4gICAgICAgICAgZXh0cmFEYXRhOiB7XG4gICAgICAgICAgICBkdXJhdGlvbjogYXR0YWNobWVudC5kdXJhdGlvbixcbiAgICAgICAgICAgIHdhdmVmb3JtX2RhdGE6IGF0dGFjaG1lbnQud2F2ZWZvcm1fZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhdHRhY2htZW50VXBsb2Fkcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFtcbiAgICAgICAgLi4udGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKSxcbiAgICAgICAgLi4uYXR0YWNobWVudFVwbG9hZHMsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tQXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jdXN0b21BdHRhY2htZW50cyQubmV4dChjdXN0b21BdHRhY2htZW50cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQcmV2aWV3KGZpbGU6IEZpbGUgfCBCbG9iKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVyaSA9IGF3YWl0IGNyZWF0ZVVyaUZyb21CbG9iKGZpbGUpO1xuICAgICAgY29uc3QgYXR0YWNobWVudFVwbG9hZHMgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodXBsb2FkKSA9PiB1cGxvYWQuZmlsZSA9PT0gZmlsZSk7XG4gICAgICBpZiAoIXVwbG9hZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1cGxvYWQucHJldmlld1VyaSA9IHVyaTtcbiAgICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoWy4uLmF0dGFjaG1lbnRVcGxvYWRzXSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZT8uY2hhdENsaWVudD8ubG9nZ2VyKFxuICAgICAgICAnZXJyb3InLFxuICAgICAgICBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBgQ2FuJ3QgY3JlYXRlIGltYWdlIHByZXZpZXdgLFxuICAgICAgICB7IGVycm9yOiBlLCB0YWc6IFsnQXR0YWNobWVudFNlcnZpY2UnXSB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkQXR0YWNobWVudHModXBsb2FkczogQXR0YWNobWVudFVwbG9hZFtdKSB7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIkLm5leHQoXG4gICAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciQudmFsdWUgKyAxXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVwbG9hZEF0dGFjaG1lbnRzKHVwbG9hZHMpO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICByZXN1bHQuZm9yRWFjaCgocikgPT4ge1xuICAgICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodXBsb2FkKSA9PiB1cGxvYWQuZmlsZSA9PT0gci5maWxlKTtcbiAgICAgIGlmICghdXBsb2FkKSB7XG4gICAgICAgIGlmIChyLnVybCkge1xuICAgICAgICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVBdHRhY2htZW50KHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVwbG9hZC5zdGF0ZSA9IHIuc3RhdGU7XG4gICAgICB1cGxvYWQudXJsID0gci51cmw7XG4gICAgICB1cGxvYWQudGh1bWJfdXJsID0gci50aHVtYl91cmw7XG4gICAgICBpZiAodXBsb2FkLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHVwbG9hZC5lcnJvclJlYXNvbiA9IHIuZXJyb3JSZWFzb247XG4gICAgICAgIHVwbG9hZC5lcnJvckV4dHJhSW5mbyA9IHIuZXJyb3JFeHRyYUluZm87XG4gICAgICAgIGxldCBlcnJvcktleTtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlUGFyYW1zOiB7IG5hbWU6IHN0cmluZzsgZXh0Pzogc3RyaW5nOyBsaW1pdD86IHN0cmluZyB9ID1cbiAgICAgICAgICB7IG5hbWU6IHVwbG9hZC5maWxlLm5hbWUgfTtcbiAgICAgICAgc3dpdGNoICh1cGxvYWQuZXJyb3JSZWFzb24pIHtcbiAgICAgICAgICBjYXNlICdmaWxlLWV4dGVuc2lvbic6XG4gICAgICAgICAgICBlcnJvcktleSA9XG4gICAgICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlLCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCc7XG4gICAgICAgICAgICB0cmFuc2xhdGVQYXJhbXMuZXh0ID0gdXBsb2FkLmVycm9yRXh0cmFJbmZvPy5bMF0/LnBhcmFtO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZmlsZS1zaXplJzpcbiAgICAgICAgICAgIGVycm9yS2V5ID1cbiAgICAgICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgdXBsb2FkaW5nIGZpbGUsIG1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkJztcbiAgICAgICAgICAgIHRyYW5zbGF0ZVBhcmFtcy5saW1pdCA9IHVwbG9hZC5lcnJvckV4dHJhSW5mbz8uWzBdPy5wYXJhbTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcktleSA9ICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yS2V5LFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRyYW5zbGF0ZVBhcmFtc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJC5uZXh0KFxuICAgICAgdGhpcy5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIkLnZhbHVlIC0gMVxuICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbLi4uYXR0YWNobWVudFVwbG9hZHNdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXJlQXR0YWNobWVudHNIYXZlVmFsaWRFeHRlbnNpb24oZmlsZXM6IEZpbGVbXSkge1xuICAgIGlmICghdGhpcy5hcHBTZXR0aW5ncykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5nZXRBcHBTZXR0aW5ncygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBmaWxlcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBsZXQgaGFzQmxvY2tlZEV4dGVuc2lvbjogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNCbG9ja2VkTWltZVR5cGU6IGJvb2xlYW47XG4gICAgICBsZXQgaGFzTm90QWxsb3dlZEV4dGVuc2lvbjogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkTWltZVR5cGU6IGJvb2xlYW47XG4gICAgICBpZiAoaXNJbWFnZUZpbGUoZikpIHtcbiAgICAgICAgaGFzQmxvY2tlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zXG4gICAgICAgICAgICA/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzQmxvY2tlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zXG4gICAgICAgICAgICA/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uIHx8XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSB8fFxuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgdXBsb2FkaW5nIGZpbGUsIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgbmFtZTogZi5uYW1lLCBleHQ6IGYudHlwZSB9XG4gICAgICAgICk7XG4gICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXJlQXR0YWNobWVudHNIYXZlVmFsaWRTaXplKGZpbGVzOiBGaWxlW10pIHtcbiAgICBpZiAoIXRoaXMuYXBwU2V0dGluZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuZ2V0QXBwU2V0dGluZ3MoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbWFnZVNpemVMaW1pdEluQnl0ZXMgPVxuICAgICAgdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uc2l6ZV9saW1pdCB8fCAwO1xuICAgIGNvbnN0IGltYWdlU2l6ZUxpbWlTdHJpbmcgPSBgJHtpbWFnZVNpemVMaW1pdEluQnl0ZXMgLyAoMTAyNCAqIDEwMjQpfU1CYDtcbiAgICBjb25zdCBmaWxlU2l6ZUxpbWl0SW5CeXRlcyA9XG4gICAgICB0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LnNpemVfbGltaXQgfHwgMDtcbiAgICBjb25zdCBmaWxlU2l6ZUxpbWl0SW5TdHJpbmcgPSBgJHtmaWxlU2l6ZUxpbWl0SW5CeXRlcyAvICgxMDI0ICogMTAyNCl9TUJgO1xuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBmaWxlcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBsZXQgaXNPdmVyU2l6ZWQgPSBmYWxzZTtcbiAgICAgIGxldCBsaW1pdCA9ICcnO1xuICAgICAgaWYgKGlzSW1hZ2VGaWxlKGYpICYmIGltYWdlU2l6ZUxpbWl0SW5CeXRlcyA+IDApIHtcbiAgICAgICAgaXNPdmVyU2l6ZWQgPSBmLnNpemUgPiBpbWFnZVNpemVMaW1pdEluQnl0ZXM7XG4gICAgICAgIGxpbWl0ID0gaW1hZ2VTaXplTGltaVN0cmluZztcbiAgICAgIH0gZWxzZSBpZiAoZmlsZVNpemVMaW1pdEluQnl0ZXMgPiAwKSB7XG4gICAgICAgIGlzT3ZlclNpemVkID0gZi5zaXplID4gZmlsZVNpemVMaW1pdEluQnl0ZXM7XG4gICAgICAgIGxpbWl0ID0gZmlsZVNpemVMaW1pdEluU3RyaW5nO1xuICAgICAgfVxuICAgICAgaWYgKGlzT3ZlclNpemVkKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgdXBsb2FkaW5nIGZpbGUsIG1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgbmFtZTogZi5uYW1lLCBsaW1pdDogbGltaXQgfVxuICAgICAgICApO1xuICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cbn1cbiJdfQ==
@@ -209,6 +209,14 @@ export class CustomTemplatesService {
209
209
  *
210
210
  */
211
211
  this.channelPreviewInfoTemplate$ = new BehaviorSubject(undefined);
212
+ /**
213
+ * The template used to display custom attachment previews in the [message input component](../../components/MessageInputComponent.mdx)
214
+ */
215
+ this.customAttachmentPreviewListTemplate$ = new BehaviorSubject(undefined);
216
+ /**
217
+ * The template used to display custom attachments in the [message component](../../components/MessageComponent.mdx)
218
+ */
219
+ this.customAttachmentListTemplate$ = new BehaviorSubject(undefined);
212
220
  }
213
221
  }
214
222
  CustomTemplatesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CustomTemplatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -219,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
219
227
  providedIn: 'root',
220
228
  }]
221
229
  }], ctorParameters: function () { return []; } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBb0N2Qzs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBNFJqQztRQXpSQTs7V0FFRztRQUNILHFDQUFnQyxHQUFHLElBQUksZUFBZSxDQUVwRCxTQUFTLENBQUMsQ0FBQztRQUNiOztXQUVHO1FBQ0gscUNBQWdDLEdBQUcsSUFBSSxlQUFlLENBRXBELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBRTNDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBRXhDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBRTVDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBRTNDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBRTNDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsbUNBQThCLEdBQUcsSUFBSSxlQUFlLENBRWxELFNBQVMsQ0FB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UUFDYjs7O1dBR0c7UUFDSCxnQ0FBMkIsR0FBRyxJQUFJLGVBQWUsQ0FFL0MsU0FBUyxDQUFDLENBQUM7SUFDRSxDQUFDOzttSEE1Ukwsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudENvbnRleHQsXG4gIEF0dGFjaG1lbnRMaXN0Q29udGV4dCxcbiAgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCxcbiAgQXZhdGFyQ29udGV4dCxcbiAgQ2hhbm5lbEFjdGlvbnNDb250ZXh0LFxuICBDaGFubmVsSGVhZGVySW5mb0NvbnRleHQsXG4gIENoYW5uZWxQcmV2aWV3Q29udGV4dCxcbiAgQ2hhbm5lbFByZXZpZXdJbmZvQ29udGV4dCxcbiAgQ29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgQ3VzdG9tQXR0YWNobWVudFVwbG9hZENvbnRleHQsXG4gIEN1c3RvbU1ldGFkYXRhQ29udGV4dCxcbiAgRGF0ZVNlcGFyYXRvckNvbnRleHQsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIERlbGl2ZXJlZFN0YXR1c0NvbnRleHQsXG4gIEVtb2ppUGlja2VyQ29udGV4dCxcbiAgSWNvbkNvbnRleHQsXG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgTWVudGlvblRlbXBsYXRlQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0LFxuICBNZXNzYWdlQWN0aW9uc0JveENvbnRleHQsXG4gIE1lc3NhZ2VDb250ZXh0LFxuICBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCxcbiAgTWVzc2FnZVJlYWN0aW9uc1NlbGVjdG9yQ29udGV4dCxcbiAgTW9kYWxDb250ZXh0LFxuICBOb3RpZmljYXRpb25Db250ZXh0LFxuICBSZWFkU3RhdHVzQ29udGV4dCxcbiAgU2VuZGluZ1N0YXR1c0NvbnRleHQsXG4gIFN5c3RlbU1lc3NhZ2VDb250ZXh0LFxuICBUaHJlYWRIZWFkZXJDb250ZXh0LFxuICBUeXBpbmdJbmRpY2F0b3JDb250ZXh0LFxuICBVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQsXG4gIFVucmVhZE1lc3NhZ2VzTm90aWZpY2F0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQSBjZW50cmFsIGxvY2F0aW9uIGZvciByZWdpc3RlcmluZyB5b3VyIGN1c3RvbSB0ZW1wbGF0ZXMgdG8gb3ZlcnJpZGUgcGFydHMgb2YgdGhlIGNoYXQgYXBwbGljYXRpb24uXG4gKlxuICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gKlxuICogWW91IGNhbiBmaW5kIHRoZSB0eXBlIGRlZmluaXRpb25zIG9mIHRoZSBjb250ZXh0IHRoYXQgaXMgcHJvdmlkZWQgZm9yIGVhY2ggdGVtcGxhdGUgW29uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3UpXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlPFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4ge1xuICAvKipcbiAgICogVGhlIGF1dG9jb21wbGV0ZSBsaXN0IGl0ZW0gdGVtcGxhdGUgZm9yIG1lbnRpb25pbmcgdXNlcnMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqL1xuICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGxpc3QgaXRlbSB0ZW1wbGF0ZSBmb3IgY29tbWFuZHMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqL1xuICBjb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGFuIGl0ZW0gaW4gdGhlIFtjaGFubmVsIGxpc3RdKC4uL2NvbXBvbmVudHMvQ2hhbm5lbExpc3RDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBbY2hhbm5hbCBsaXN0IGl0ZW1dKC4uL2NvbXBvbmVudHMvQ2hhbm5lbFByZXZpZXdDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICovXG4gIGNoYW5uZWxQcmV2aWV3VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDaGFubmVsUHJldmlld0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIGEgW21lbnRpb24gaW5zaWRlIGEgbWVzc2FnZV0oLi4vY29kZS1leGFtcGxlcy9tZW50aW9uLWFjdGlvbnMubWR4KVxuICAgKlxuICAgKi9cbiAgbWVudGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvblRlbXBsYXRlQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZvciBbZW1vamkgcGlja2VyXSguLi9jb2RlLWV4YW1wbGVzL2Vtb2ppLXBpY2tlci5tZHgpXG4gICAqXG4gICAqL1xuICBlbW9qaVBpY2tlclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RW1vamlQaWNrZXJDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdHlwaW5nIGluZGljYXRvciB0ZW1wbGF0ZSB1c2VkIGluIHRoZSBbbWVzc2FnZSBsaXN0XSguLi9jb21wb25lbnRzL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICovXG4gIHR5cGluZ0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VHlwaW5nSW5kaWNhdG9yQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhIG1lc3NhZ2UgaW4gdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgbWVzc2FnZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgY2hhbm5lbCBhY3Rpb25zIGRpc3BsYXllZCBpbiB0aGUgW2NoYW5uZWwgaGVhZGVyXSguLi9jb21wb25lbnRzL0NoYW5uZWxIZWFkZXJDb21wb25lbnQubWR4KSAoYnkgZGVmYXVsdCBubyBjaGFubmVsIGFjdGlvbiBpcyBkaXNwbGF5ZWQpXG4gICAqXG4gICAqL1xuICBjaGFubmVsQWN0aW9uc1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbEFjdGlvbnNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF0dGFjaG1lbnRzIG9mIGEgW21lc3NhZ2VdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBhdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICovXG4gIGF0dGFjaG1lbnRMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50TGlzdENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYXR0YWNobWVudHMgaW4gdGhlIFttZXNzYWdlIGlucHV0XSguLi9jb21wb25lbnRzL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudCAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXR0YWNobWVudCBwcmV2aWV3XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRQcmV2aWV3TGlzdENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF2YXRhcnMgZm9yIGNoYW5uZWxzIGFuZCB1c2VycyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXZhdGFyXSguLi9jb21wb25lbnRzL0F2YXRhckNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgYXZhdGFyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxBdmF0YXJDb250ZXh0PiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSBmb3IgZGlzcGxheWluZyBpY29ucyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgaWNvbiBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvSWNvbkNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgaWNvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8SWNvbkNvbnRleHQ+IHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBsb2FkaW5nIGluZGljYXRvciAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbG9hZGluZyBpbmRpY2F0b3JdKC4uL2NvbXBvbmVudHMvTG9hZGluZ0luZGljYXRvckNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgbG9hZGluZ0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgdGhlIG1lc3NhZ2UgYWN0aW9ucyBib3ggKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgYWN0aW9ucyBib3hdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICovXG4gIG1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZXNzYWdlQWN0aW9uc0JveENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIGFuIGl0ZW0gaW4gdGhlIFttZXNzYWdlIGFjdGlvbnMgYm94XSguLi9jb21wb25lbnRzL01lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICovXG4gIG1lc3NhZ2VBY3Rpb25zQm94SXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSByZWFjdGlvbnMgb2YgYSBbbWVzc2FnZV0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keCksIGFuZCB0aGUgc2VsZWN0b3IgdG8gYWRkIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIHJlYWN0aW9ucyBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZVJlYWN0aW9uc0NvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgbWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZVJlYWN0aW9uc0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHJlYWN0aW9ucyBvZiBhIFttZXNzYWdlXSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KSwgYW5kIHRoZSBzZWxlY3RvciB0byBhZGQgYSByZWFjdGlvbiB0byBhIG1lc3NhZ2UgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgcmVhY3Rpb25zIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlUmVhY3Rpb25zQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqL1xuICBtZXNzYWdlUmVhY3Rpb25zU2VsZWN0b3JUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VSZWFjdGlvbnNTZWxlY3RvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYSBtb2RhbCB3aW5kb3cgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1vZGFsXSguLi9jb21wb25lbnRzL01vZGFsQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqL1xuICBtb2RhbFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8TW9kYWxDb250ZXh0PiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBvdmVycmlkZSB0aGUgW2RlZmF1bHQgbm90aWZpY2F0aW9uIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9Ob3RpZmljYXRpb25Db21wb25lbnQubWR4KVxuICAgKlxuICAgKi9cbiAgbm90aWZpY2F0aW9uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxOb3RpZmljYXRpb25Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgaGVhZGVyIG9mIGEgW3RocmVhZF0oLi4vY29tcG9uZW50cy9UaHJlYWRDb21wb25lbnQubWR4KVxuICAgKlxuICAgKi9cbiAgdGhyZWFkSGVhZGVyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxUaHJlYWRIZWFkZXJDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyB0aGUgZGVsaXZlcmVkIHN0YXRlIG9mIHRoZSBtZXNzYWdlIGluc2lkZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBEaXNwbGF5ZWQgZm9yIHRoZSBsYXN0IG1lc3NhZ2Ugc2VudCBieSB0aGUgY3VycmVudCB1c2VyLCBpZiB0aGUgbWVzc2FnZSBpc24ndCB5ZXQgcmVhZCBieSBhbnlvbmVcbiAgICpcbiAgICovXG4gIGRlbGl2ZXJlZFN0YXR1c1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RGVsaXZlcmVkU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbmRpbmcgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIERpc3BsYXllZCBmb3IgdGhlIGxhc3QgbWVzc2FnZSBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBtZXNzYWdlIGlzIGN1cnJlbnRseSBiZWluZyBzZW50XG4gICAqXG4gICAqL1xuICBzZW5kaW5nU3RhdHVzVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxTZW5kaW5nU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbnQgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIERpc3BsYXllZCBmb3IgdGhlIGxhc3QgbWVzc2FnZSBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBtZXNzYWdlIGlzIHJlYWQgYXQgbGVhc3QgYnkgb25lIHVzZXJcbiAgICpcbiAgICovXG4gIHJlYWRTdGF0dXNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFJlYWRTdGF0dXNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSB0byBkaXNwbGF5IGN1c3RvbSBtZXRhZGF0YSBpbnNpZGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKi9cbiAgY3VzdG9tTWVzc2FnZU1ldGFkYXRhVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDdXN0b21NZXRhZGF0YUNvbnRleHQ8VD4+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGNoYW5uZWwgdW5kZXIgdGhlIGNoYW5uZWwgbmFtZSBpbnNpZGUgdGhlIFtjaGFubmVsIGhlYWRlciBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvQ2hhbm5lbEhlYWRlckNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqL1xuICBjaGFubmVsSGVhZGVySW5mb1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbEhlYWRlckluZm9Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyBmaWxlIHVwbG9hZC9hdHRhY2htZW50IHNlbGVjdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgaW5wdXRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICovXG4gIGN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEN1c3RvbUF0dGFjaG1lbnRVcGxvYWRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYSBzaW5nbGUgaW1hZ2UgYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGltYWdlQXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIHZvaWNlIHJlY29yZGluZyBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KSwgYnkgZGVmYXVsdCB0aGUgW3ZvaWNlIHJlY29yZGluZyBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvVm9pY2VSZWNvcmRpbmdDb21wb25lbnQubWR4KSBpcyB1c2VkXG4gICAqL1xuICB2b2ljZVJlY29yZGluZ0F0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYSB2aWRlbyBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgdmlkZW9BdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGltYWdlIGdhbGxlcnkgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBnYWxsZXJ5QXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIGZpbGUgYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGZpbGVBdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGEgY2FyZCBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYXR0YWNobWVudCBhY3Rpb25zIGFyZSBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGF0dGFjaG1lbnRBY3Rpb25zVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBbc3lzdGVtIG1lc3NhZ2VzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9zaWxlbnRfbWVzc2FnZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zeXN0ZW0pIGluZGlzZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKi9cbiAgc3lzdGVtTWVzc2FnZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8U3lzdGVtTWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGRhdGUgc2VwYXJhdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBkYXRlU2VwYXJhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxEYXRlU2VwYXJhdG9yQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB1bnJlYWQgbWVzc2FnZXMgaW5kaWNhdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpIHdoZW4gdGhlIGNoYW5uZWwgaXMgb3BlbmVkXG4gICAqXG4gICAqIFRoaXMgVUkgZWxlbWVudCBpcyB1c2VkIHRvIHNlcGFyYXRlIHVucmVhZCBtZXNzYWdlcyBmcm9tIHJlYWQgbWVzc2FnZXNcbiAgICovXG4gIG5ld01lc3NhZ2VzSW5kaWNhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdW5yZWFkIG1lc3NhZ2VzIG5vdGlmaWNhdGlvbiBpbnNpZGUgdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZFxuICAgKlxuICAgKiBVc2VycyBjYW4gdXNlIHRoaXMgbm90aWZpY2F0aW9uIHRvIGp1bXAgdG8gdGhlIGZpcnN0IHVucmVhZCBtZXNzYWdlIHdoZW4gaXQncyBjbGlja2VkXG4gICAqL1xuICBuZXdNZXNzYWdlc05vdGlmaWNhdGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VW5yZWFkTWVzc2FnZXNOb3RpZmljYXRpb25Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gc2hvdyBpZiB0aGUgbWFpbiBtZXNzYWdlIGxpc3QgaXMgZW1wdHlcbiAgICovXG4gIGVtcHR5TWFpbk1lc3NhZ2VMaXN0UGxhY2Vob2xkZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjx2b2lkPiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gc2hvdyBpZiB0aGUgdGhyZWFkIG1lc3NhZ2UgbGlzdCBpcyBlbXB0eVxuICAgKi9cbiAgZW1wdHlUaHJlYWRNZXNzYWdlTGlzdFBsYWNlaG9sZGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgW21lc3NhZ2UgYm91bmNlIHByb21wdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQm91bmNlUHJvbXB0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIG1lc3NhZ2VCb3VuY2VQcm9tcHRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPHZvaWQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgY2hhbm5lbCBpbmZvcm1hdGlvbiBpbnNpZGUgdGhlIFtjaGFubmVsIGxpc3QgaXRlbV0oLi4vY29tcG9uZW50cy9DaGFubmVsUHJldmlld0NvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqL1xuICBjaGFubmVsUHJldmlld0luZm9UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENoYW5uZWxQcmV2aWV3SW5mb0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgY29uc3RydWN0b3IoKSB7fVxufVxuIl19
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBc0N2Qzs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBeVNqQztRQXRTQTs7V0FFRztRQUNILHFDQUFnQyxHQUFHLElBQUksZUFBZSxDQUVwRCxTQUFTLENBQUMsQ0FBQztRQUNiOztXQUVHO1FBQ0gscUNBQWdDLEdBQUcsSUFBSSxlQUFlLENBRXBELFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBRTNDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBRXhDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBRTVDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBRXBDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBRTNDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsNEJBQXVCLEdBQUcsSUFBSSxlQUFlLENBRTNDLFNBQVMsQ0FBQyxDQUFDO1FBQ2I7OztXQUdHO1FBQ0gsbUNBQThCLEdBQUcsSUFBSSxlQUFlLENBRWxELFNBQVMsQ0FB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UUFDYjs7O1dBR0c7UUFDSCxnQ0FBMkIsR0FBRyxJQUFJLGVBQWUsQ0FFL0MsU0FBUyxDQUFDLENBQUM7UUFDYjs7V0FFRztRQUNILHlDQUFvQyxHQUFHLElBQUksZUFBZSxDQUV4RCxTQUFTLENBQUMsQ0FBQztRQUNiOztXQUVHO1FBQ0gsa0NBQTZCLEdBQUcsSUFBSSxlQUFlLENBRWpELFNBQVMsQ0FBQyxDQUFDO0lBRUUsQ0FBQzs7bUhBelNMLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRDb250ZXh0LFxuICBBdHRhY2htZW50TGlzdENvbnRleHQsXG4gIEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQsXG4gIEF2YXRhckNvbnRleHQsXG4gIENoYW5uZWxBY3Rpb25zQ29udGV4dCxcbiAgQ2hhbm5lbEhlYWRlckluZm9Db250ZXh0LFxuICBDaGFubmVsUHJldmlld0NvbnRleHQsXG4gIENoYW5uZWxQcmV2aWV3SW5mb0NvbnRleHQsXG4gIENvbW1hbmRBdXRvY29tcGxldGVMaXN0SXRlbUNvbnRleHQsXG4gIEN1c3RvbUF0dGFjaG1lbnRMaXN0Q29udGV4dCxcbiAgQ3VzdG9tQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCxcbiAgQ3VzdG9tQXR0YWNobWVudFVwbG9hZENvbnRleHQsXG4gIEN1c3RvbU1ldGFkYXRhQ29udGV4dCxcbiAgRGF0ZVNlcGFyYXRvckNvbnRleHQsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIERlbGl2ZXJlZFN0YXR1c0NvbnRleHQsXG4gIEVtb2ppUGlja2VyQ29udGV4dCxcbiAgSWNvbkNvbnRleHQsXG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgTWVudGlvblRlbXBsYXRlQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0LFxuICBNZXNzYWdlQWN0aW9uc0JveENvbnRleHQsXG4gIE1lc3NhZ2VDb250ZXh0LFxuICBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCxcbiAgTWVzc2FnZVJlYWN0aW9uc1NlbGVjdG9yQ29udGV4dCxcbiAgTW9kYWxDb250ZXh0LFxuICBOb3RpZmljYXRpb25Db250ZXh0LFxuICBSZWFkU3RhdHVzQ29udGV4dCxcbiAgU2VuZGluZ1N0YXR1c0NvbnRleHQsXG4gIFN5c3RlbU1lc3NhZ2VDb250ZXh0LFxuICBUaHJlYWRIZWFkZXJDb250ZXh0LFxuICBUeXBpbmdJbmRpY2F0b3JDb250ZXh0LFxuICBVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQsXG4gIFVucmVhZE1lc3NhZ2VzTm90aWZpY2F0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQSBjZW50cmFsIGxvY2F0aW9uIGZvciByZWdpc3RlcmluZyB5b3VyIGN1c3RvbSB0ZW1wbGF0ZXMgdG8gb3ZlcnJpZGUgcGFydHMgb2YgdGhlIGNoYXQgYXBwbGljYXRpb24uXG4gKlxuICogRm9yIGNvZGUgZXhhbXBsZXMgdG8gdGhlIGRpZmZlcmVudCBjdXN0b21pemF0aW9ucyBzZWUgb3VyIFtjdXN0b21pemF0aW9ucyBleGFtcGxlIGFwcGxpY2F0aW9uXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvdHJlZS9tYXN0ZXIvcHJvamVjdHMvY3VzdG9taXphdGlvbnMtZXhhbXBsZSksIHNwZWNpZmljYWxseSB0aGUgW0FwcENvbXBvbmVudF0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL2N1c3RvbWl6YXRpb25zLWV4YW1wbGUvc3JjL2FwcCkgKHNlZSBbUkVBRE1FXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2N1c3RvbWl6YXRpb24tZXhhbXBsZXMpIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbikuXG4gKlxuICogWW91IGNhbiBmaW5kIHRoZSB0eXBlIGRlZmluaXRpb25zIG9mIHRoZSBjb250ZXh0IHRoYXQgaXMgcHJvdmlkZWQgZm9yIGVhY2ggdGVtcGxhdGUgW29uIEdpdEh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2Jsb2IvbWFzdGVyL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3UpXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlPFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4ge1xuICAvKipcbiAgICogVGhlIGF1dG9jb21wbGV0ZSBsaXN0IGl0ZW0gdGVtcGxhdGUgZm9yIG1lbnRpb25pbmcgdXNlcnMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqL1xuICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGxpc3QgaXRlbSB0ZW1wbGF0ZSBmb3IgY29tbWFuZHMgKHVzZWQgaW4gdGhlIFtgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRgXSguLi9jb21wb25lbnRzL0F1dG9jb21wbGV0ZVRleHRhcmVhQ29tcG9uZW50Lm1keCkpXG4gICAqL1xuICBjb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGFuIGl0ZW0gaW4gdGhlIFtjaGFubmVsIGxpc3RdKC4uL2NvbXBvbmVudHMvQ2hhbm5lbExpc3RDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBbY2hhbm5hbCBsaXN0IGl0ZW1dKC4uL2NvbXBvbmVudHMvQ2hhbm5lbFByZXZpZXdDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICovXG4gIGNoYW5uZWxQcmV2aWV3VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDaGFubmVsUHJldmlld0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIGEgW21lbnRpb24gaW5zaWRlIGEgbWVzc2FnZV0oLi4vY29kZS1leGFtcGxlcy9tZW50aW9uLWFjdGlvbnMubWR4KVxuICAgKlxuICAgKi9cbiAgbWVudGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVudGlvblRlbXBsYXRlQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZvciBbZW1vamkgcGlja2VyXSguLi9jb2RlLWV4YW1wbGVzL2Vtb2ppLXBpY2tlci5tZHgpXG4gICAqXG4gICAqL1xuICBlbW9qaVBpY2tlclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RW1vamlQaWNrZXJDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdHlwaW5nIGluZGljYXRvciB0ZW1wbGF0ZSB1c2VkIGluIHRoZSBbbWVzc2FnZSBsaXN0XSguLi9jb21wb25lbnRzL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICovXG4gIHR5cGluZ0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VHlwaW5nSW5kaWNhdG9yQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBhIG1lc3NhZ2UgaW4gdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgbWVzc2FnZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgY2hhbm5lbCBhY3Rpb25zIGRpc3BsYXllZCBpbiB0aGUgW2NoYW5uZWwgaGVhZGVyXSguLi9jb21wb25lbnRzL0NoYW5uZWxIZWFkZXJDb21wb25lbnQubWR4KSAoYnkgZGVmYXVsdCBubyBjaGFubmVsIGFjdGlvbiBpcyBkaXNwbGF5ZWQpXG4gICAqXG4gICAqL1xuICBjaGFubmVsQWN0aW9uc1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbEFjdGlvbnNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF0dGFjaG1lbnRzIG9mIGEgW21lc3NhZ2VdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBhdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICovXG4gIGF0dGFjaG1lbnRMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50TGlzdENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYXR0YWNobWVudHMgaW4gdGhlIFttZXNzYWdlIGlucHV0XSguLi9jb21wb25lbnRzL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudCAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXR0YWNobWVudCBwcmV2aWV3XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRQcmV2aWV3TGlzdENvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGF2YXRhcnMgZm9yIGNoYW5uZWxzIGFuZCB1c2VycyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgYXZhdGFyXSguLi9jb21wb25lbnRzL0F2YXRhckNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgYXZhdGFyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxBdmF0YXJDb250ZXh0PiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSBmb3IgZGlzcGxheWluZyBpY29ucyAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgaWNvbiBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvSWNvbkNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgaWNvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8SWNvbkNvbnRleHQ+IHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBsb2FkaW5nIGluZGljYXRvciAoaW5zdGVhZCBvZiB0aGUgW2RlZmF1bHQgbG9hZGluZyBpbmRpY2F0b3JdKC4uL2NvbXBvbmVudHMvTG9hZGluZ0luZGljYXRvckNvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgbG9hZGluZ0luZGljYXRvclRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgdGhlIG1lc3NhZ2UgYWN0aW9ucyBib3ggKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgYWN0aW9ucyBib3hdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQubWR4KSlcbiAgICpcbiAgICovXG4gIG1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxNZXNzYWdlQWN0aW9uc0JveENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIGZvciBkaXNwbGF5aW5nIGFuIGl0ZW0gaW4gdGhlIFttZXNzYWdlIGFjdGlvbnMgYm94XSguLi9jb21wb25lbnRzL01lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICovXG4gIG1lc3NhZ2VBY3Rpb25zQm94SXRlbVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSByZWFjdGlvbnMgb2YgYSBbbWVzc2FnZV0oLi4vY29tcG9uZW50cy9NZXNzYWdlQ29tcG9uZW50Lm1keCksIGFuZCB0aGUgc2VsZWN0b3IgdG8gYWRkIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlIChpbnN0ZWFkIG9mIHRoZSBbZGVmYXVsdCBtZXNzYWdlIHJlYWN0aW9ucyBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZVJlYWN0aW9uc0NvbXBvbmVudC5tZHgpKVxuICAgKlxuICAgKi9cbiAgbWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8TWVzc2FnZVJlYWN0aW9uc0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHJlYWN0aW9ucyBvZiBhIFttZXNzYWdlXSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KSwgYW5kIHRoZSBzZWxlY3RvciB0byBhZGQgYSByZWFjdGlvbiB0byBhIG1lc3NhZ2UgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1lc3NhZ2UgcmVhY3Rpb25zIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9NZXNzYWdlUmVhY3Rpb25zQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqL1xuICBtZXNzYWdlUmVhY3Rpb25zU2VsZWN0b3JUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPE1lc3NhZ2VSZWFjdGlvbnNTZWxlY3RvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYSBtb2RhbCB3aW5kb3cgKGluc3RlYWQgb2YgdGhlIFtkZWZhdWx0IG1vZGFsXSguLi9jb21wb25lbnRzL01vZGFsQ29tcG9uZW50Lm1keCkpXG4gICAqXG4gICAqL1xuICBtb2RhbFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8TW9kYWxDb250ZXh0PiB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBvdmVycmlkZSB0aGUgW2RlZmF1bHQgbm90aWZpY2F0aW9uIGNvbXBvbmVudF0oLi4vY29tcG9uZW50cy9Ob3RpZmljYXRpb25Db21wb25lbnQubWR4KVxuICAgKlxuICAgKi9cbiAgbm90aWZpY2F0aW9uVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxOb3RpZmljYXRpb25Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgaGVhZGVyIG9mIGEgW3RocmVhZF0oLi4vY29tcG9uZW50cy9UaHJlYWRDb21wb25lbnQubWR4KVxuICAgKlxuICAgKi9cbiAgdGhyZWFkSGVhZGVyVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxUaHJlYWRIZWFkZXJDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyB0aGUgZGVsaXZlcmVkIHN0YXRlIG9mIHRoZSBtZXNzYWdlIGluc2lkZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKiBEaXNwbGF5ZWQgZm9yIHRoZSBsYXN0IG1lc3NhZ2Ugc2VudCBieSB0aGUgY3VycmVudCB1c2VyLCBpZiB0aGUgbWVzc2FnZSBpc24ndCB5ZXQgcmVhZCBieSBhbnlvbmVcbiAgICpcbiAgICovXG4gIGRlbGl2ZXJlZFN0YXR1c1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8RGVsaXZlcmVkU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbmRpbmcgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIERpc3BsYXllZCBmb3IgdGhlIGxhc3QgbWVzc2FnZSBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBtZXNzYWdlIGlzIGN1cnJlbnRseSBiZWluZyBzZW50XG4gICAqXG4gICAqL1xuICBzZW5kaW5nU3RhdHVzVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxTZW5kaW5nU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbnQgc3RhdGUgb2YgdGhlIG1lc3NhZ2UgaW5zaWRlIHRoZSBbbWVzc2FnZSBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqIERpc3BsYXllZCBmb3IgdGhlIGxhc3QgbWVzc2FnZSBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBtZXNzYWdlIGlzIHJlYWQgYXQgbGVhc3QgYnkgb25lIHVzZXJcbiAgICpcbiAgICovXG4gIHJlYWRTdGF0dXNUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPFJlYWRTdGF0dXNDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUZW1wbGF0ZSB0byBkaXNwbGF5IGN1c3RvbSBtZXRhZGF0YSBpbnNpZGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKlxuICAgKi9cbiAgY3VzdG9tTWVzc2FnZU1ldGFkYXRhVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDdXN0b21NZXRhZGF0YUNvbnRleHQ8VD4+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGNoYW5uZWwgdW5kZXIgdGhlIGNoYW5uZWwgbmFtZSBpbnNpZGUgdGhlIFtjaGFubmVsIGhlYWRlciBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvQ2hhbm5lbEhlYWRlckNvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqL1xuICBjaGFubmVsSGVhZGVySW5mb1RlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8Q2hhbm5lbEhlYWRlckluZm9Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyBmaWxlIHVwbG9hZC9hdHRhY2htZW50IHNlbGVjdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgaW5wdXRdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keClcbiAgICpcbiAgICovXG4gIGN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEN1c3RvbUF0dGFjaG1lbnRVcGxvYWRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYSBzaW5nbGUgaW1hZ2UgYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGltYWdlQXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIHZvaWNlIHJlY29yZGluZyBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KSwgYnkgZGVmYXVsdCB0aGUgW3ZvaWNlIHJlY29yZGluZyBjb21wb25lbnRdKC4uL2NvbXBvbmVudHMvVm9pY2VSZWNvcmRpbmdDb21wb25lbnQubWR4KSBpcyB1c2VkXG4gICAqL1xuICB2b2ljZVJlY29yZGluZ0F0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYSB2aWRlbyBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgdmlkZW9BdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGltYWdlIGdhbGxlcnkgaXMgZGlzcGxheWVkIGluc2lkZSB0aGUgW2F0dGFjaG1lbnQgbGlzdF0oLi4vY29tcG9uZW50cy9BdHRhY2htZW50TGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBnYWxsZXJ5QXR0YWNobWVudFRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8QXR0YWNobWVudENvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGhvdyBhIGZpbGUgYXR0YWNobWVudCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGZpbGVBdHRhY2htZW50VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaG93IGEgY2FyZCBhdHRhY2htZW50IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIFthdHRhY2htZW50IGxpc3RdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQubWR4KVxuICAgKi9cbiAgY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBob3cgYXR0YWNobWVudCBhY3Rpb25zIGFyZSBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBbYXR0YWNobWVudCBsaXN0XSguLi9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIGF0dGFjaG1lbnRBY3Rpb25zVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxBdHRhY2htZW50Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSBbc3lzdGVtIG1lc3NhZ2VzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9zaWxlbnRfbWVzc2FnZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zeXN0ZW0pIGluZGlzZSB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKi9cbiAgc3lzdGVtTWVzc2FnZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8U3lzdGVtTWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGRhdGUgc2VwYXJhdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpXG4gICAqL1xuICBkYXRlU2VwYXJhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxEYXRlU2VwYXJhdG9yQ29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB1bnJlYWQgbWVzc2FnZXMgaW5kaWNhdG9yIGluc2lkZSB0aGUgW21lc3NhZ2UgbGlzdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlTGlzdENvbXBvbmVudC5tZHgpIHdoZW4gdGhlIGNoYW5uZWwgaXMgb3BlbmVkXG4gICAqXG4gICAqIFRoaXMgVUkgZWxlbWVudCBpcyB1c2VkIHRvIHNlcGFyYXRlIHVucmVhZCBtZXNzYWdlcyBmcm9tIHJlYWQgbWVzc2FnZXNcbiAgICovXG4gIG5ld01lc3NhZ2VzSW5kaWNhdG9yVGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxVbnJlYWRNZXNzYWdlc0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdW5yZWFkIG1lc3NhZ2VzIG5vdGlmaWNhdGlvbiBpbnNpZGUgdGhlIFttZXNzYWdlIGxpc3RdKC4uL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZFxuICAgKlxuICAgKiBVc2VycyBjYW4gdXNlIHRoaXMgbm90aWZpY2F0aW9uIHRvIGp1bXAgdG8gdGhlIGZpcnN0IHVucmVhZCBtZXNzYWdlIHdoZW4gaXQncyBjbGlja2VkXG4gICAqL1xuICBuZXdNZXNzYWdlc05vdGlmaWNhdGlvblRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8VW5yZWFkTWVzc2FnZXNOb3RpZmljYXRpb25Db250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gc2hvdyBpZiB0aGUgbWFpbiBtZXNzYWdlIGxpc3QgaXMgZW1wdHlcbiAgICovXG4gIGVtcHR5TWFpbk1lc3NhZ2VMaXN0UGxhY2Vob2xkZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjx2b2lkPiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdG8gc2hvdyBpZiB0aGUgdGhyZWFkIG1lc3NhZ2UgbGlzdCBpcyBlbXB0eVxuICAgKi9cbiAgZW1wdHlUaHJlYWRNZXNzYWdlTGlzdFBsYWNlaG9sZGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgW21lc3NhZ2UgYm91bmNlIHByb21wdF0oLi4vY29tcG9uZW50cy9NZXNzYWdlQm91bmNlUHJvbXB0Q29tcG9uZW50Lm1keClcbiAgICovXG4gIG1lc3NhZ2VCb3VuY2VQcm9tcHRUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPHZvaWQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgY2hhbm5lbCBpbmZvcm1hdGlvbiBpbnNpZGUgdGhlIFtjaGFubmVsIGxpc3QgaXRlbV0oLi4vY29tcG9uZW50cy9DaGFubmVsUHJldmlld0NvbXBvbmVudC5tZHgpXG4gICAqXG4gICAqL1xuICBjaGFubmVsUHJldmlld0luZm9UZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPENoYW5uZWxQcmV2aWV3SW5mb0NvbnRleHQ+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgY3VzdG9tIGF0dGFjaG1lbnQgcHJldmlld3MgaW4gdGhlIFttZXNzYWdlIGlucHV0IGNvbXBvbmVudF0oLi4vLi4vY29tcG9uZW50cy9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4KVxuICAgKi9cbiAgY3VzdG9tQXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBUZW1wbGF0ZVJlZjxDdXN0b21BdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IGN1c3RvbSBhdHRhY2htZW50cyBpbiB0aGUgW21lc3NhZ2UgY29tcG9uZW50XSguLi8uLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQubWR4KVxuICAgKi9cbiAgY3VzdG9tQXR0YWNobWVudExpc3RUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFRlbXBsYXRlUmVmPEN1c3RvbUF0dGFjaG1lbnRMaXN0Q29udGV4dD4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiJdfQ==