stream-chat-angular 3.0.0-beta.2 → 3.0.0-beta.3

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 (51) hide show
  1. package/assets/version.d.ts +1 -1
  2. package/bundles/stream-chat-angular.umd.js +499 -275
  3. package/bundles/stream-chat-angular.umd.js.map +1 -1
  4. package/esm2015/assets/version.js +2 -2
  5. package/esm2015/lib/attachment-list/attachment-list.component.js +27 -15
  6. package/esm2015/lib/attachment-preview-list/attachment-preview-list.component.js +28 -22
  7. package/esm2015/lib/avatar-placeholder/avatar-placeholder.component.js +41 -0
  8. package/esm2015/lib/channel-header/channel-header.component.js +4 -4
  9. package/esm2015/lib/channel-list/channel-list.component.js +4 -4
  10. package/esm2015/lib/channel-preview/channel-preview.component.js +3 -3
  11. package/esm2015/lib/channel.service.js +1 -1
  12. package/esm2015/lib/custom-templates.service.js +45 -1
  13. package/esm2015/lib/icon-placeholder/icon-placeholder.component.js +34 -0
  14. package/esm2015/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.js +42 -0
  15. package/esm2015/lib/message/message.component.js +49 -8
  16. package/esm2015/lib/message-actions-box/message-actions-box.component.js +98 -86
  17. package/esm2015/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.js +3 -3
  18. package/esm2015/lib/message-input/message-input.component.js +21 -4
  19. package/esm2015/lib/message-list/message-list.component.js +3 -3
  20. package/esm2015/lib/message-reactions/message-reactions.component.js +3 -3
  21. package/esm2015/lib/modal/modal.component.js +9 -6
  22. package/esm2015/lib/notification/notification.component.js +5 -2
  23. package/esm2015/lib/notification-list/notification-list.component.js +12 -10
  24. package/esm2015/lib/stream-avatar.module.js +5 -4
  25. package/esm2015/lib/stream-chat.module.js +13 -3
  26. package/esm2015/lib/thread/thread.component.js +19 -11
  27. package/esm2015/lib/types.js +1 -1
  28. package/esm2015/public-api.js +4 -1
  29. package/fesm2015/stream-chat-angular.js +453 -199
  30. package/fesm2015/stream-chat-angular.js.map +1 -1
  31. package/lib/attachment-list/attachment-list.component.d.ts +7 -3
  32. package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +17 -7
  33. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +25 -0
  34. package/lib/channel.service.d.ts +1 -2
  35. package/lib/custom-templates.service.d.ts +45 -1
  36. package/lib/icon-placeholder/icon-placeholder.component.d.ts +22 -0
  37. package/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +21 -0
  38. package/lib/message/message.component.d.ts +12 -4
  39. package/lib/message-actions-box/message-actions-box.component.d.ts +9 -13
  40. package/lib/message-input/message-input.component.d.ts +5 -1
  41. package/lib/message-reactions/message-reactions.component.d.ts +1 -2
  42. package/lib/modal/modal.component.d.ts +7 -3
  43. package/lib/notification/notification.component.d.ts +6 -1
  44. package/lib/notification-list/notification-list.component.d.ts +4 -2
  45. package/lib/stream-avatar.module.d.ts +4 -3
  46. package/lib/stream-chat.module.d.ts +6 -4
  47. package/lib/thread/thread.component.d.ts +6 -3
  48. package/lib/types.d.ts +67 -1
  49. package/package.json +1 -1
  50. package/public-api.d.ts +3 -0
  51. package/src/assets/version.ts +1 -1
@@ -15,8 +15,8 @@ import * as i4 from "./message-input-config.service";
15
15
  import * as i5 from "../chat-client.service";
16
16
  import * as i6 from "./emoji-input.service";
17
17
  import * as i7 from "../custom-templates.service";
18
- import * as i8 from "../icon/icon.component";
19
- import * as i9 from "../avatar/avatar.component";
18
+ import * as i8 from "../icon-placeholder/icon-placeholder.component";
19
+ import * as i9 from "../avatar-placeholder/avatar-placeholder.component";
20
20
  import * as i10 from "../attachment-list/attachment-list.component";
21
21
  import * as i11 from "../attachment-preview-list/attachment-preview-list.component";
22
22
  import * as i12 from "@angular/common";
@@ -112,6 +112,10 @@ export class MessageInputComponent {
112
112
  this.emojiPickerTemplate = template;
113
113
  this.cdRef.detectChanges();
114
114
  }));
115
+ this.subscriptions.push(this.customTemplatesService.attachmentPreviewListTemplate$.subscribe((template) => {
116
+ this.attachmentPreviewListTemplate = template;
117
+ this.cdRef.detectChanges();
118
+ }));
115
119
  }
116
120
  ngAfterViewInit() {
117
121
  this.isViewInited = true;
@@ -229,6 +233,19 @@ export class MessageInputComponent {
229
233
  emojiInput$: this.emojiInputService.emojiInput$,
230
234
  };
231
235
  }
236
+ getAttachmentPreviewListContext() {
237
+ return {
238
+ attachmentUploads$: this.attachmentService.attachmentUploads$,
239
+ deleteUploadHandler: this.deleteUpload.bind(this),
240
+ retryUploadHandler: this.retryUpload.bind(this),
241
+ };
242
+ }
243
+ deleteUpload(upload) {
244
+ void this.attachmentService.deleteAttachment(upload);
245
+ }
246
+ retryUpload(file) {
247
+ void this.attachmentService.retryAttachmentUpload(file);
248
+ }
232
249
  clearFileInput() {
233
250
  this.fileInput.nativeElement.value = '';
234
251
  }
@@ -336,7 +353,7 @@ export class MessageInputComponent {
336
353
  }
337
354
  }
338
355
  MessageInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, deps: [{ token: i1.ChannelService }, { token: i2.NotificationService }, { token: i3.AttachmentService }, { token: i4.MessageInputConfigService }, { token: textareaInjectionToken }, { token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i5.ChatClientService }, { token: i6.EmojiInputService }, { token: i7.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
339
- MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n ></stream-avatar>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <stream-attachment-preview-list\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon icon=\"file-upload\"></stream-icon>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon icon=\"send\"></stream-icon>\n </button>\n </div>\n</div>\n", components: [{ type: i8.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i9.AvatarComponent, selector: "stream-avatar", inputs: ["name", "imageUrl", "size"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: i11.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list" }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i12.AsyncPipe, "translate": i14.TranslatePipe } });
356
+ MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n </div>\n</div>\n", components: [{ type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: i11.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i12.AsyncPipe, "translate": i14.TranslatePipe } });
340
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, decorators: [{
341
358
  type: Component,
342
359
  args: [{
@@ -369,4 +386,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
369
386
  type: ViewChild,
370
387
  args: [TextareaDirective, { static: false }]
371
388
  }] } });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1pbnB1dC9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxTQUFTLEVBSVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUlOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUk3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHMUQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8scUJBQXFCO0lBbURoQyxZQUNVLGNBQThCLEVBQzlCLG1CQUF3QyxFQUN4QyxpQkFBb0MsRUFDcEMsYUFBd0MsRUFFeEMsWUFBcUMsRUFDckMsd0JBQWtELEVBQ2xELEtBQXdCLEVBQ3hCLFVBQTZCLEVBQzdC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ICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpcnN0LCBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcFNldHRpbmdzLCBDaGFubmVsLCBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4uL2F0dGFjaG1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyB0ZXh0YXJlYUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2Vucyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudFVwbG9hZCwgRW1vamlQaWNrZXJDb250ZXh0LCBTdHJlYW1NZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZSB9IGZyb20gJy4vbWVzc2FnZS1pbnB1dC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0YXJlYURpcmVjdGl2ZSB9IGZyb20gJy4vdGV4dGFyZWEuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRhcmVhSW50ZXJmYWNlIH0gZnJvbSAnLi90ZXh0YXJlYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGUgfSBmcm9tICcuLi9pcy1pbWFnZS1maWxlJztcbmltcG9ydCB7IEVtb2ppSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi9lbW9qaS1pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgTWVzc2FnZUlucHV0YCBjb21wb25lbnQgZGlzcGxheXMgYW4gaW5wdXQgd2hlcmUgdXNlcnMgY2FuIHR5cGUgdGhlaXIgbWVzc2FnZXMgYW5kIHVwbG9hZCBmaWxlcywgYW5kIHNlbmRzIHRoZSBtZXNzYWdlIHRvIHRoZSBhY3RpdmUgY2hhbm5lbC4gVGhlIGNvbXBvbmVudCBjYW4gYmUgdXNlZCB0byBjb21wb3NlIG5ldyBtZXNzYWdlcyBvciB1cGRhdGUgZXhpc3Rpbmcgb25lcy4gVG8gc2VuZCBtZXNzYWdlcywgdGhlIGNoYXQgdXNlciBuZWVkcyB0byBoYXZlIHRoZSBuZWNlc3NhcnkgW2NoYW5uZWwgY2FwYWJpbGl0eV0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbiAgcHJvdmlkZXJzOiBbQXR0YWNobWVudFNlcnZpY2UsIEVtb2ppSW5wdXRTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUlucHV0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogSWYgZmlsZSB1cGxvYWQgaXMgZW5hYmxlZCwgdGhlIHVzZXIgY2FuIG9wZW4gYSBmaWxlIHNlbGVjdG9yIGZyb20gdGhlIGlucHV0LiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSB1c2VyIGFsc28gbmVlZHMgdG8gaGF2ZSB0aGUgbmVjZXNzYXJ5IFtjaGFubmVsIGNhcGFiaWxpdHldKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KS4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBpc0ZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdXNlcnMgY2FuIG1lbnRpb24gb3RoZXIgdXNlcnMgaW4gbWVzc2FnZXMuIFlvdSBhbHNvIFtuZWVkIHRvIHVzZSB0aGUgYEF1dG9jb21wbGV0ZVRleHRhcmVhYF0oLi4vY29uY2VwdHMvb3B0LWluLWFyY2hpdGVjdHVyZS5tZHgpIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yay4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBhcmVNZW50aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgZm9yIHVzZXIgbWVudGlvbnMsIGVpdGhlciBtZW1iZXJzIG9mIHRoZSBjdXJyZW50IGNoYW5uZWwgb2YgbWVtYmVycyBvZiB0aGUgYXBwbGljYXRpb24uIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgbWVudGlvblNjb3BlOiAnY2hhbm5lbCcgfCAnYXBwbGljYXRpb24nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbWVzc2FnZSBpcyBiZWluZyBkaXNwYWx5ZWQgaW4gYSBjaGFubmVsIG9yIGluIGEgW3RocmVhZF0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvdGhyZWFkcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlOiAndGhyZWFkJyB8ICdtYWluJyA9ICdtYWluJztcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBzZWxlY3QgbXVsdGlwbGUgZmlsZXMgdG8gdXBsb2FkLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIGVkaXRcbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGEgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bHkgc2VudCBvciB1cGRhdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbWVzc2FnZVVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgaXNGaWxlVXBsb2FkQXV0aG9yaXplZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2FuU2VuZExpbmtzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjYW5TZW5kTWVzc2FnZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+O1xuICB0ZXh0YXJlYVZhbHVlID0gJyc7XG4gIHRleHRhcmVhUmVmOiBDb21wb25lbnRSZWY8VGV4dGFyZWFJbnRlcmZhY2U+IHwgdW5kZWZpbmVkO1xuICBtZW50aW9uZWRVc2VyczogVXNlclJlc3BvbnNlW10gPSBbXTtcbiAgcXVvdGVkTWVzc2FnZTogdW5kZWZpbmVkIHwgU3RyZWFtTWVzc2FnZTtcbiAgdHlwaW5nU3RhcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29vbGRvd24kOiBPYnNlcnZhYmxlPG51bWJlcj4gfCB1bmRlZmluZWQ7XG4gIGlzQ29vbGRvd25JblByb2dyZXNzID0gZmFsc2U7XG4gIGVtb2ppUGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVtb2ppUGlja2VyQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIHByaXZhdGUgZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChUZXh0YXJlYURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGV4dGFyZWFBbmNob3IhOiBUZXh0YXJlYURpcmVjdGl2ZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGhpZGVOb3RpZmljYXRpb246IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGFwcFNldHRpbmdzOiBBcHBTZXR0aW5ncyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBjaGFubmVsOiBDaGFubmVsIHwgdW5kZWZpbmVkO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdHRhY2htZW50U2VydmljZTogQXR0YWNobWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLFxuICAgIEBJbmplY3QodGV4dGFyZWFJbmplY3Rpb25Ub2tlbilcbiAgICBwcml2YXRlIHRleHRhcmVhVHlwZTogVHlwZTxUZXh0YXJlYUludGVyZmFjZT4sXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNoYXRDbGllbnQ6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1vamlJbnB1dFNlcnZpY2U6IEVtb2ppSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZVxuICApIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJC5zdWJzY3JpYmUoXG4gICAgICAgIChjb3VudGVyKSA9PiB7XG4gICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDAgJiYgdGhpcy5oaWRlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGNoYW5uZWwpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0YXJlYVZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmVzZXRBdHRhY2htZW50VXBsb2FkcygpO1xuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSBjaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAoY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgdGhpcy5pc0ZpbGVVcGxvYWRBdXRob3JpemVkID1cbiAgICAgICAgICAgIGNhcGFiaWxpdGllcy5pbmRleE9mKCd1cGxvYWQtZmlsZScpICE9PSAtMTtcbiAgICAgICAgICB0aGlzLmNhblNlbmRMaW5rcyA9IGNhcGFiaWxpdGllcy5pbmRleE9mKCdzZW5kLWxpbmtzJykgIT09IC0xO1xuICAgICAgICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG4gICAgICAgICAgdGhpcy5zZXRDYW5TZW5kTWVzc2FnZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGF0Q2xpZW50LmFwcFNldHRpbmdzJC5zdWJzY3JpYmUoXG4gICAgICAgIChhcHBTZXR0aW5ncykgPT4gKHRoaXMuYXBwU2V0dGluZ3MgPSBhcHBTZXR0aW5ncylcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5tZXNzYWdlVG9RdW90ZSQuc3Vic2NyaWJlKChtKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVGhyZWFkUmVwbHkgPSBtICYmIG0ucGFyZW50X2lkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRoaXMubW9kZSA9PT0gJ3RocmVhZCcgJiYgaXNUaHJlYWRSZXBseSkgfHxcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiB0aGlzLnF1b3RlZE1lc3NhZ2UgJiYgIW0pIHx8XG4gICAgICAgICAgKHRoaXMubW9kZSA9PT0gJ21haW4nICYmICFpc1RocmVhZFJlcGx5KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnF1b3RlZE1lc3NhZ2UgPSBtO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2FkcyQgPSB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmF0dGFjaG1lbnRVcGxvYWRzJDtcbiAgICB0aGlzLmlzRmlsZVVwbG9hZEVuYWJsZWQgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuaXNGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB0aGlzLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZCA9XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkO1xuICAgIHRoaXMuYXJlTWVudGlvbnNFbmFibGVkID0gdGhpcy5jb25maWdTZXJ2aWNlLmFyZU1lbnRpb25zRW5hYmxlZDtcbiAgICB0aGlzLm1lbnRpb25TY29wZSA9IHRoaXMuY29uZmlnU2VydmljZS5tZW50aW9uU2NvcGU7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudHlwaW5nU3RhcnQkLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnR5cGluZ1N0YXJ0ZWQodGhpcy5wYXJlbnRNZXNzYWdlSWQpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UubGF0ZXN0TWVzc2FnZURhdGVCeVVzZXJCeUNoYW5uZWxzJCxcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJCxcbiAgICAgIF0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChcbiAgICAgICAgICAgIChbbGF0ZXN0TWVzc2FnZXMsIGNoYW5uZWxdKTogW1xuICAgICAgICAgICAgICBEYXRlIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBDaGFubmVsIHwgdW5kZWZpbmVkXG4gICAgICAgICAgICBdID0+IFtsYXRlc3RNZXNzYWdlc1tjaGFubmVsPy5jaWQgfHwgJyddLCBjaGFubmVsIV1cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoW2xhdGVzdE1lc3NhZ2VEYXRlLCBjaGFubmVsXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvb2xkb3duID1cbiAgICAgICAgICAgIChjaGFubmVsPy5kYXRhPy5jb29sZG93biBhcyBudW1iZXIpICYmXG4gICAgICAgICAgICBsYXRlc3RNZXNzYWdlRGF0ZSAmJlxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/LmNvb2xkb3duIGFzIG51bWJlcikgLVxuICAgICAgICAgICAgICAgIChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGxhdGVzdE1lc3NhZ2VEYXRlLmdldFRpbWUoKSkgLyAxMDAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvb2xkb3duICYmXG4gICAgICAgICAgICBjb29sZG93biA+IDAgJiZcbiAgICAgICAgICAgIChjaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcygnc2xvdy1tb2RlJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb29sZG93bihjb29sZG93bik7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ29vbGRvd25JblByb2dyZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BDb29sZG93bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuZW1vamlQaWNrZXJUZW1wbGF0ZSQuc3Vic2NyaWJlKCh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLmVtb2ppUGlja2VyVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5pdFRleHRhcmVhKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMubWVzc2FnZSkge1xuICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXNldEF0dGFjaG1lbnRVcGxvYWRzKCk7XG4gICAgICBpZiAodGhpcy5pc1VwZGF0ZSkge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmNyZWF0ZUZyb21BdHRhY2htZW50cyhcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UhLmF0dGFjaG1lbnRzIHx8IFtdXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudGV4dGFyZWFWYWx1ZSA9IHRoaXMubWVzc2FnZSEudGV4dCB8fCAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaXNGaWxlVXBsb2FkRW5hYmxlZCkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlzRmlsZVVwbG9hZEVuYWJsZWQgPSB0aGlzLmlzRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZCkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZCA9XG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5hcmVNZW50aW9uc0VuYWJsZWQgPSB0aGlzLmFyZU1lbnRpb25zRW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMubWVudGlvblNjb3BlKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudGlvblNjb3BlID0gdGhpcy5tZW50aW9uU2NvcGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1vZGUpIHtcbiAgICAgIHRoaXMuc2V0Q2FuU2VuZE1lc3NhZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBhc3luYyBtZXNzYWdlU2VudCgpIHtcbiAgICBsZXQgYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyITogbnVtYmVyO1xuICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJFxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvdW50ZXIpID0+IChhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIgPSBjb3VudGVyKSk7XG4gICAgaWYgKGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciA+IDApIHtcbiAgICAgIGlmICghdGhpcy5oaWRlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbiA9XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFBlcm1hbmVudE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICdzdHJlYW1DaGF0LldhaXQgdW50aWwgYWxsIGF0dGFjaG1lbnRzIGhhdmUgdXBsb2FkZWQnXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLm1hcFRvQXR0YWNobWVudHMoKTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0YXJlYVZhbHVlO1xuICAgIGlmICghdGV4dCAmJiAoIWF0dGFjaG1lbnRzIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGFpbnNMaW5rcyAmJiAhdGhpcy5jYW5TZW5kTGlua3MpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LlNlbmRpbmcgbGlua3MgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb252ZXJzYXRpb24nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNVcGRhdGUpIHtcbiAgICAgIHRoaXMudGV4dGFyZWFWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgKHRoaXMuaXNVcGRhdGVcbiAgICAgICAgPyB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVwZGF0ZU1lc3NhZ2Uoe1xuICAgICAgICAgICAgLi4udGhpcy5tZXNzYWdlISxcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgdGhpcy5tZW50aW9uZWRVc2VycyxcbiAgICAgICAgICAgIHRoaXMucGFyZW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgdGhpcy5xdW90ZWRNZXNzYWdlPy5pZFxuICAgICAgICAgICkpO1xuICAgICAgdGhpcy5tZXNzYWdlVXBkYXRlLmVtaXQoKTtcbiAgICAgIGlmICghdGhpcy5pc1VwZGF0ZSkge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLnJlc2V0QXR0YWNobWVudFVwbG9hZHMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FZGl0IG1lc3NhZ2UgcmVxdWVzdCBmYWlsZWQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS50eXBpbmdTdG9wcGVkKHRoaXMucGFyZW50TWVzc2FnZUlkKTtcbiAgICBpZiAodGhpcy5xdW90ZWRNZXNzYWdlKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29udGFpbnNMaW5rcygpIHtcbiAgICByZXR1cm4gLyg/Oig/Omh0dHBzP3xmdHApOlxcL1xcLyk/W1xcdy9cXC0/PSUuXStcXC5bXFx3L1xcLSY/PSUuXSsvLnRlc3QoXG4gICAgICB0aGlzLnRleHRhcmVhVmFsdWVcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1b3RlZE1lc3NhZ2VBdHRhY2htZW50cygpIHtcbiAgICBjb25zdCBvcmlnaW5hbEF0dGFjaG1lbnRzID0gdGhpcy5xdW90ZWRNZXNzYWdlPy5hdHRhY2htZW50cztcbiAgICByZXR1cm4gb3JpZ2luYWxBdHRhY2htZW50cyAmJiBvcmlnaW5hbEF0dGFjaG1lbnRzLmxlbmd0aFxuICAgICAgPyBbb3JpZ2luYWxBdHRhY2htZW50c1swXV1cbiAgICAgIDogW107XG4gIH1cblxuICBnZXQgZGlzYWJsZWRUZXh0YXJlYVRleHQoKSB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmRNZXNzYWdlcykge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgICAgPyBcInN0cmVhbUNoYXQuWW91IGNhbid0IHNlbmQgdGhyZWFkIHJlcGxpZXMgaW4gdGhpcyBjaGFubmVsXCJcbiAgICAgICAgOiBcInN0cmVhbUNoYXQuWW91IGNhbid0IHNlbmQgbWVzc2FnZXMgaW4gdGhpcyBjaGFubmVsXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvb2xkb3duJCkge1xuICAgICAgcmV0dXJuICdzdHJlYW1DaGF0LlNsb3cgTW9kZSBPTic7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFzeW5jIGZpbGVzU2VsZWN0ZWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghKGF3YWl0IHRoaXMuYXJlQXR0YWNoZW1udHNWYWxpZChmaWxlTGlzdCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuZmlsZXNTZWxlY3RlZChmaWxlTGlzdCk7XG4gICAgdGhpcy5jbGVhckZpbGVJbnB1dCgpO1xuICB9XG5cbiAgZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpIHtcbiAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbGVjdE1lc3NhZ2VUb1F1b3RlKHVuZGVmaW5lZCk7XG4gIH1cblxuICBnZXRFbW9qaVBpY2tlckNvbnRleHQoKTogRW1vamlQaWNrZXJDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW1vamlJbnB1dCQ6IHRoaXMuZW1vamlJbnB1dFNlcnZpY2UuZW1vamlJbnB1dCQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGaWxlSW5wdXQoKSB7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNVcGRhdGUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5tZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGV4dGFyZWEoKSB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmRNZXNzYWdlcyB8fCB0aGlzLnRleHRhcmVhUmVmIHx8ICF0aGlzLnRleHRhcmVhQW5jaG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPVxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy50ZXh0YXJlYVR5cGUpO1xuICAgIHRoaXMudGV4dGFyZWFSZWYgPVxuICAgICAgdGhpcy50ZXh0YXJlYUFuY2hvci52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxhbnk+KFxuICAgICAgICBjb21wb25lbnRGYWN0b3J5XG4gICAgICApO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2hlbW50c1ZhbGlkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpIHtcbiAgICBpZiAoIWZpbGVMaXN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFwcFNldHRpbmdzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnQuZ2V0QXBwU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIEFycmF5LmZyb20oZmlsZUxpc3QpLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBoYXNCbG9ja2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc0Jsb2NrZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmKSkge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5VbnN1cHBvcnRlZCBmaWxlIHR5cGU6IHt7dHlwZX19JyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgdHlwZTogZi50eXBlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYW5TZW5kTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5jaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9XG4gICAgICAgIGNhcGFiaWxpdGllcy5pbmRleE9mKFxuICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nID8gJ3NlbmQtbWVzc2FnZScgOiAnc2VuZC1yZXBseSdcbiAgICAgICAgKSAhPT0gLTE7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmluaXRUZXh0YXJlYSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBhcmVudE1lc3NhZ2VJZCgpIHtcbiAgICBsZXQgcGFyZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3RocmVhZCcpIHtcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlUGFyZW50TWVzc2FnZUlkJFxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChpZCkgPT4gKHBhcmVudE1lc3NhZ2VJZCA9IGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudE1lc3NhZ2VJZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDb29sZG93bihjb29sZG93bjogbnVtYmVyKSB7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5jb29sZG93biQgPSB0aW1lcigwLCAxMDAwKS5waXBlKFxuICAgICAgdGFrZShjb29sZG93biArIDEpLFxuICAgICAgbWFwKCh2KSA9PiBjb29sZG93biAtIHYpLFxuICAgICAgdGFwKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQ29vbGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ29vbGRvd24oKSB7XG4gICAgdGhpcy5jb29sZG93biQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIC8vIHRoZSBhbmNob3IgZGlyZWN0aXZlIHdpbGwgYmUgcmVjcmVhdGVkIGJlY2F1c2Ugb2YgKm5nSWYsIHNvIHdlIHdpbGwgaGF2ZSB0byByZWluaXQgdGhlIHRleHRhcmVhIGFzIHdlbGxcbiAgICB0aGlzLnRleHRhcmVhUmVmID0gdW5kZWZpbmVkO1xuICAgIC8vIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGUgdGV4dGFyZWEgYWZ0ZXIgdGhlIGFuY2hvciB3YXMgcmVjcmVhdGVkLCBzbyB3ZSB3aWxsIGhhdmUgdG8gd2FpdCBhIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2l0aCBzZXRUaW1lb3V0XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRUZXh0YXJlYSgpKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInt7XG4gICAgbW9kZSA9PT0gJ21haW4nID8gJ3N0ci1jaGF0X19pbnB1dC1mbGF0JyA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dCdcbiAgfX1cIlxuICBbY2xhc3Muc3RyLWNoYXRfX2lucHV0LWZsYXQtaGFzLWF0dGFjaG1lbnRzXT1cIlxuICAgIChhdHRhY2htZW50VXBsb2FkcyQgfCBhc3luYykhLmxlbmd0aCA+IDBcbiAgXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19pbnB1dC1mbGF0LXF1b3RlZF09XCIhIXF1b3RlZE1lc3NhZ2VcIlxuPlxuICA8ZGl2XG4gICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS1jb250YWluZXJcIlxuICAgIGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlld1wiXG4gICAgKm5nSWY9XCJxdW90ZWRNZXNzYWdlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWhlYWRlclwiPlxuICAgICAgPGRpdj57eyBcInN0cmVhbUNoYXQuUmVwbHkgdG8gTWVzc2FnZVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NxdWFyZS1idXR0b25cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInJlbW92ZS1xdW90ZVwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdE1lc3NhZ2VUb1F1b3RlKClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uXG4gICAgICAgICAgaWNvbj1cImNsb3NlLW5vLW91dGxpbmVcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogMTBweFwiXG4gICAgICAgID48L3N0cmVhbS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInF1b3RlZC1tZXNzYWdlLXByZXZpZXctY29udGVudFwiPlxuICAgICAgPHN0cmVhbS1hdmF0YXJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJxb3V0ZWQtbWVzc2FnZS1hdmF0YXJcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgW2ltYWdlVXJsXT1cInF1b3RlZE1lc3NhZ2U/LnVzZXI/LmltYWdlXCJcbiAgICAgICAgW25hbWVdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8ubmFtZSB8fCBxdW90ZWRNZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgID48L3N0cmVhbS1hdmF0YXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1jb250ZW50LWlubmVyXCI+XG4gICAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRhY2htZW50c109XCJxdW90ZWRNZXNzYWdlQXR0YWNobWVudHNcIlxuICAgICAgICAgIFttZXNzYWdlSWRdPVwicXVvdGVkTWVzc2FnZT8uaWRcIlxuICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS10ZXh0XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cInF1b3RlZE1lc3NhZ2U/Lmh0bWwgfHwgcXVvdGVkTWVzc2FnZT8udGV4dFwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19pbnB1dC1mbGF0LXdyYXBwZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ7e1xuICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICA/ICdzdHItY2hhdF9faW5wdXQtZmxhdC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgICAgICA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgIH19XCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0XG4gICAgICAgIGNsYXNzPVwicmZ1LWltYWdlLXByZXZpZXdlci1hbmd1bGFyLWhvc3RcIlxuICAgICAgPjwvc3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0PlxuICAgICAgPGRpdiBjbGFzcz1cInJ0YSBzdHItY2hhdF9fdGV4dGFyZWEgc3RyLWNoYXQtYW5ndWxhcl9fdGV4dGFyZWFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiZW1vamlQaWNrZXJUZW1wbGF0ZSAmJiAhaXNDb29sZG93bkluUHJvZ3Jlc3NcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZW1vamktcGlja2VyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19pbnB1dC1mbGF0LWVtb2ppc2VsZWN0XG4gICAgICAgICAgICAgIHN0ci1jaGF0LWFuZ3VsYXJfX2Vtb2ppc2VsZWN0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBlbW9qaVBpY2tlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGdldEVtb2ppUGlja2VyQ29udGV4dCgpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9faW5wdXQtZmxhdC1jb29sZG93biBzdHItY2hhdC1hbmd1bGFyX19jb29sZG93blwiXG4gICAgICAgICAgKm5nSWY9XCJpc0Nvb2xkb3duSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjb29sZG93bi10aW1lclwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb29sZG93biQgfCBhc3luYyB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgKm5nSWY9XCJjYW5TZW5kTWVzc2FnZXMgJiYgIWlzQ29vbGRvd25JblByb2dyZXNzOyBlbHNlIG5vdEFsbG93ZWRcIlxuICAgICAgICAgIHN0cmVhbVRleHRhcmVhXG4gICAgICAgICAgWyh2YWx1ZSldPVwidGV4dGFyZWFWYWx1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInR5cGluZ1N0YXJ0JC5uZXh0KClcIlxuICAgICAgICAgIChzZW5kKT1cIm1lc3NhZ2VTZW50KClcIlxuICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGFyZWFSZWZcIlxuICAgICAgICAgICh1c2VyTWVudGlvbnMpPVwibWVudGlvbmVkVXNlcnMgPSAkZXZlbnRcIlxuICAgICAgICAgIFthcmVNZW50aW9uc0VuYWJsZWRdPVwiYXJlTWVudGlvbnNFbmFibGVkXCJcbiAgICAgICAgICBbbWVudGlvblNjb3BlXT1cIm1lbnRpb25TY29wZVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdEFsbG93ZWQ+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgcm93cz1cIjFcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImRpc2FibGVkVGV4dGFyZWFUZXh0IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwicnRhX190ZXh0YXJlYSBzdHItY2hhdF9fdGV4dGFyZWFfX3RleHRhcmVhXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGlzYWJsZWQtdGV4dGFyZWFcIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNGaWxlVXBsb2FkRW5hYmxlZCAmJlxuICAgICAgICAgIGlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgJiZcbiAgICAgICAgICBjYW5TZW5kTWVzc2FnZXMgJiZcbiAgICAgICAgICAhaXNDb29sZG93bkluUHJvZ3Jlc3NcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZmlsZXVwbG9hZC13cmFwcGVyXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJmaWxlLXVwbG9hZC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3Rvb2x0aXBcIj5cbiAgICAgICAgICB7eyBcInN0cmVhbUNoYXQuQXR0YWNoIGZpbGVzXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZnUtZmlsZS11cGxvYWQtYnV0dG9uXCI+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInJmdS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgICAgICAgW211bHRpcGxlXT1cImlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZXNTZWxlY3RlZChmaWxlSW5wdXQuZmlsZXMpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X19pbnB1dC1mbGF0LWZpbGV1cGxvYWRcIj5cbiAgICAgICAgICAgICAgPHN0cmVhbS1pY29uIGljb249XCJmaWxlLXVwbG9hZFwiPjwvc3RyZWFtLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImNhblNlbmRNZXNzYWdlc1wiXG4gICAgICBkYXRhLXRlc3RpZD1cInNlbmQtYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NlbmQtYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJtZXNzYWdlU2VudCgpXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWljb24gaWNvbj1cInNlbmRcIj48L3N0cmVhbS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1pbnB1dC9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxTQUFTLEVBSVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUlOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHMUQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8scUJBQXFCO0lBc0RoQyxZQUNVLGNBQThCLEVBQzlCLG1CQUF3QyxFQUN4QyxpQkFBb0MsRUFDcEMsYUFBd0MsRUFFeEMsWUFBcUMsRUFDckMsd0JBQWtELEVBQ2xELEtBQXdCLEVBQ3hCLFVBQTZCLEVBQzdC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Qiw2SkEyRHRCLHNCQUFzQjtzR0EzRHJCLHFCQUFxQiwwVEFGckIsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxtS0FpRHRDLGlCQUFpQixxRUNoRzlCLHdzTEF3S0E7MkZEdkhhLHFCQUFxQjtrQkFOakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxNQUFNLEVBQUUsRUFBRTtvQkFDVixTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQztpQkFDbEQ7OzBCQTRESSxNQUFNOzJCQUFDLHNCQUFzQjt3TkFyRHZCLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJYSxhQUFhO3NCQUEvQixNQUFNO2dCQWdCeUIsU0FBUztzQkFBeEMsU0FBUzt1QkFBQyxXQUFXO2dCQUVkLGNBQWM7c0JBRHJCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBTZXR0aW5ncywgQ2hhbm5lbCwgVXNlclJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQXR0YWNobWVudFNlcnZpY2UgfSBmcm9tICcuLi9hdHRhY2htZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGV4dGFyZWFJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbnMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQsXG4gIEF0dGFjaG1lbnRVcGxvYWQsXG4gIEVtb2ppUGlja2VyQ29udGV4dCxcbiAgU3RyZWFtTWVzc2FnZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZSB9IGZyb20gJy4vbWVzc2FnZS1pbnB1dC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0YXJlYURpcmVjdGl2ZSB9IGZyb20gJy4vdGV4dGFyZWEuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRhcmVhSW50ZXJmYWNlIH0gZnJvbSAnLi90ZXh0YXJlYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGUgfSBmcm9tICcuLi9pcy1pbWFnZS1maWxlJztcbmltcG9ydCB7IEVtb2ppSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi9lbW9qaS1pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgTWVzc2FnZUlucHV0YCBjb21wb25lbnQgZGlzcGxheXMgYW4gaW5wdXQgd2hlcmUgdXNlcnMgY2FuIHR5cGUgdGhlaXIgbWVzc2FnZXMgYW5kIHVwbG9hZCBmaWxlcywgYW5kIHNlbmRzIHRoZSBtZXNzYWdlIHRvIHRoZSBhY3RpdmUgY2hhbm5lbC4gVGhlIGNvbXBvbmVudCBjYW4gYmUgdXNlZCB0byBjb21wb3NlIG5ldyBtZXNzYWdlcyBvciB1cGRhdGUgZXhpc3Rpbmcgb25lcy4gVG8gc2VuZCBtZXNzYWdlcywgdGhlIGNoYXQgdXNlciBuZWVkcyB0byBoYXZlIHRoZSBuZWNlc3NhcnkgW2NoYW5uZWwgY2FwYWJpbGl0eV0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbiAgcHJvdmlkZXJzOiBbQXR0YWNobWVudFNlcnZpY2UsIEVtb2ppSW5wdXRTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUlucHV0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogSWYgZmlsZSB1cGxvYWQgaXMgZW5hYmxlZCwgdGhlIHVzZXIgY2FuIG9wZW4gYSBmaWxlIHNlbGVjdG9yIGZyb20gdGhlIGlucHV0LiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSB1c2VyIGFsc28gbmVlZHMgdG8gaGF2ZSB0aGUgbmVjZXNzYXJ5IFtjaGFubmVsIGNhcGFiaWxpdHldKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KS4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBpc0ZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdXNlcnMgY2FuIG1lbnRpb24gb3RoZXIgdXNlcnMgaW4gbWVzc2FnZXMuIFlvdSBhbHNvIFtuZWVkIHRvIHVzZSB0aGUgYEF1dG9jb21wbGV0ZVRleHRhcmVhYF0oLi4vY29uY2VwdHMvb3B0LWluLWFyY2hpdGVjdHVyZS5tZHgpIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yay4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBhcmVNZW50aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgZm9yIHVzZXIgbWVudGlvbnMsIGVpdGhlciBtZW1iZXJzIG9mIHRoZSBjdXJyZW50IGNoYW5uZWwgb2YgbWVtYmVycyBvZiB0aGUgYXBwbGljYXRpb24uIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgbWVudGlvblNjb3BlOiAnY2hhbm5lbCcgfCAnYXBwbGljYXRpb24nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbWVzc2FnZSBpcyBiZWluZyBkaXNwYWx5ZWQgaW4gYSBjaGFubmVsIG9yIGluIGEgW3RocmVhZF0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvdGhyZWFkcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlOiAndGhyZWFkJyB8ICdtYWluJyA9ICdtYWluJztcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBzZWxlY3QgbXVsdGlwbGUgZmlsZXMgdG8gdXBsb2FkLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIGVkaXRcbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGEgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bHkgc2VudCBvciB1cGRhdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbWVzc2FnZVVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgaXNGaWxlVXBsb2FkQXV0aG9yaXplZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2FuU2VuZExpbmtzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjYW5TZW5kTWVzc2FnZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+O1xuICB0ZXh0YXJlYVZhbHVlID0gJyc7XG4gIHRleHRhcmVhUmVmOiBDb21wb25lbnRSZWY8VGV4dGFyZWFJbnRlcmZhY2U+IHwgdW5kZWZpbmVkO1xuICBtZW50aW9uZWRVc2VyczogVXNlclJlc3BvbnNlW10gPSBbXTtcbiAgcXVvdGVkTWVzc2FnZTogdW5kZWZpbmVkIHwgU3RyZWFtTWVzc2FnZTtcbiAgdHlwaW5nU3RhcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29vbGRvd24kOiBPYnNlcnZhYmxlPG51bWJlcj4gfCB1bmRlZmluZWQ7XG4gIGlzQ29vbGRvd25JblByb2dyZXNzID0gZmFsc2U7XG4gIGVtb2ppUGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVtb2ppUGlja2VyQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGF0dGFjaG1lbnRQcmV2aWV3TGlzdFRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8QXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgcHJpdmF0ZSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFRleHRhcmVhRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJpdmF0ZSB0ZXh0YXJlYUFuY2hvciE6IFRleHRhcmVhRGlyZWN0aXZlO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgaGlkZU5vdGlmaWNhdGlvbjogRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgYXBwU2V0dGluZ3M6IEFwcFNldHRpbmdzIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNoYW5uZWw6IENoYW5uZWwgfCB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGF0dGFjaG1lbnRTZXJ2aWNlOiBBdHRhY2htZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UsXG4gICAgQEluamVjdCh0ZXh0YXJlYUluamVjdGlvblRva2VuKVxuICAgIHByaXZhdGUgdGV4dGFyZWFUeXBlOiBUeXBlPFRleHRhcmVhSW50ZXJmYWNlPixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY2hhdENsaWVudDogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbW9qaUlucHV0U2VydmljZTogRW1vamlJbnB1dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIkLnN1YnNjcmliZShcbiAgICAgICAgKGNvdW50ZXIpID0+IHtcbiAgICAgICAgICBpZiAoY291bnRlciA9PT0gMCAmJiB0aGlzLmhpZGVOb3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5oaWRlTm90aWZpY2F0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXNldEF0dGFjaG1lbnRVcGxvYWRzKCk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICB0aGlzLmlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgPVxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3VwbG9hZC1maWxlJykgIT09IC0xO1xuICAgICAgICAgIHRoaXMuY2FuU2VuZExpbmtzID0gY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3NlbmQtbGlua3MnKSAhPT0gLTE7XG4gICAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnQuYXBwU2V0dGluZ3MkLnN1YnNjcmliZShcbiAgICAgICAgKGFwcFNldHRpbmdzKSA9PiAodGhpcy5hcHBTZXR0aW5ncyA9IGFwcFNldHRpbmdzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLm1lc3NhZ2VUb1F1b3RlJC5zdWJzY3JpYmUoKG0pID0+IHtcbiAgICAgICAgY29uc3QgaXNUaHJlYWRSZXBseSA9IG0gJiYgbS5wYXJlbnRfaWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiBpc1RocmVhZFJlcGx5KSB8fFxuICAgICAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmIHRoaXMucXVvdGVkTWVzc2FnZSAmJiAhbSkgfHxcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAnbWFpbicgJiYgIWlzVGhyZWFkUmVwbHkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucXVvdGVkTWVzc2FnZSA9IG07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzJCA9IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkO1xuICAgIHRoaXMuaXNGaWxlVXBsb2FkRW5hYmxlZCA9IHRoaXMuY29uZmlnU2VydmljZS5pc0ZpbGVVcGxvYWRFbmFibGVkO1xuICAgIHRoaXMuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuYXJlTWVudGlvbnNFbmFibGVkO1xuICAgIHRoaXMubWVudGlvblNjb3BlID0gdGhpcy5jb25maWdTZXJ2aWNlLm1lbnRpb25TY29wZTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50eXBpbmdTdGFydCQuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RhcnRlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5sYXRlc3RNZXNzYWdlRGF0ZUJ5VXNlckJ5Q2hhbm5lbHMkLFxuICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLFxuICAgICAgXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKFtsYXRlc3RNZXNzYWdlcywgY2hhbm5lbF0pOiBbXG4gICAgICAgICAgICAgIERhdGUgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIENoYW5uZWwgfCB1bmRlZmluZWRcbiAgICAgICAgICAgIF0gPT4gW2xhdGVzdE1lc3NhZ2VzW2NoYW5uZWw/LmNpZCB8fCAnJ10sIGNoYW5uZWwhXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChbbGF0ZXN0TWVzc2FnZURhdGUsIGNoYW5uZWxdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29vbGRvd24gPVxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/LmNvb2xkb3duIGFzIG51bWJlcikgJiZcbiAgICAgICAgICAgIGxhdGVzdE1lc3NhZ2VEYXRlICYmXG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoY2hhbm5lbD8uZGF0YT8uY29vbGRvd24gYXMgbnVtYmVyKSAtXG4gICAgICAgICAgICAgICAgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbGF0ZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpKSAvIDEwMDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29vbGRvd24gJiZcbiAgICAgICAgICAgIGNvb2xkb3duID4gMCAmJlxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKCdzbG93LW1vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdGFydENvb2xkb3duKGNvb2xkb3duKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb29sZG93bkluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcENvb2xkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5lbW9qaVBpY2tlclRlbXBsYXRlJC5zdWJzY3JpYmUoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1vamlQaWNrZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5hdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRQcmV2aWV3TGlzdFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaWV3SW5pdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRUZXh0YXJlYSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmVzZXRBdHRhY2htZW50VXBsb2FkcygpO1xuICAgICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5jcmVhdGVGcm9tQXR0YWNobWVudHMoXG4gICAgICAgICAgdGhpcy5tZXNzYWdlIS5hdHRhY2htZW50cyB8fCBbXVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSB0aGlzLm1lc3NhZ2UhLnRleHQgfHwgJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmlzRmlsZVVwbG9hZEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc0ZpbGVVcGxvYWRFbmFibGVkID0gdGhpcy5pc0ZpbGVVcGxvYWRFbmFibGVkO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQgPVxuICAgICAgICB0aGlzLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuYXJlTWVudGlvbnNFbmFibGVkID0gdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQ7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnRpb25TY29wZSA9IHRoaXMubWVudGlvblNjb3BlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5tb2RlKSB7XG4gICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgYXN5bmMgbWVzc2FnZVNlbnQoKSB7XG4gICAgbGV0IGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciE6IG51bWJlcjtcbiAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKChjb3VudGVyKSA9PiAoYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyID0gY291bnRlcikpO1xuICAgIGlmIChhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIgPiAwKSB7XG4gICAgICBpZiAoIXRoaXMuaGlkZU5vdGlmaWNhdGlvbikge1xuICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb24gPVxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRQZXJtYW5lbnROb3RpZmljYXRpb24oXG4gICAgICAgICAgICAnc3RyZWFtQ2hhdC5XYWl0IHVudGlsIGFsbCBhdHRhY2htZW50cyBoYXZlIHVwbG9hZGVkJ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50U2VydmljZS5tYXBUb0F0dGFjaG1lbnRzKCk7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMudGV4dGFyZWFWYWx1ZTtcbiAgICBpZiAoIXRleHQgJiYgKCFhdHRhY2htZW50cyB8fCBhdHRhY2htZW50cy5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRhaW5zTGlua3MgJiYgIXRoaXMuY2FuU2VuZExpbmtzKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5TZW5kaW5nIGxpbmtzIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udmVyc2F0aW9uJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVXBkYXRlKSB7XG4gICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSAnJztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0ICh0aGlzLmlzVXBkYXRlXG4gICAgICAgID8gdGhpcy5jaGFubmVsU2VydmljZS51cGRhdGVNZXNzYWdlKHtcbiAgICAgICAgICAgIC4uLnRoaXMubWVzc2FnZSEsXG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy5jaGFubmVsU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMsXG4gICAgICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIHRoaXMucXVvdGVkTWVzc2FnZT8uaWRcbiAgICAgICAgICApKTtcbiAgICAgIHRoaXMubWVzc2FnZVVwZGF0ZS5lbWl0KCk7XG4gICAgICBpZiAoIXRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXNldEF0dGFjaG1lbnRVcGxvYWRzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLmlzVXBkYXRlKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRWRpdCBtZXNzYWdlIHJlcXVlc3QgZmFpbGVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RvcHBlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZCk7XG4gICAgaWYgKHRoaXMucXVvdGVkTWVzc2FnZSkge1xuICAgICAgdGhpcy5kZXNlbGVjdE1lc3NhZ2VUb1F1b3RlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbnRhaW5zTGlua3MoKSB7XG4gICAgcmV0dXJuIC8oPzooPzpodHRwcz98ZnRwKTpcXC9cXC8pP1tcXHcvXFwtPz0lLl0rXFwuW1xcdy9cXC0mPz0lLl0rLy50ZXN0KFxuICAgICAgdGhpcy50ZXh0YXJlYVZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIGdldCBxdW90ZWRNZXNzYWdlQXR0YWNobWVudHMoKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBdHRhY2htZW50cyA9IHRoaXMucXVvdGVkTWVzc2FnZT8uYXR0YWNobWVudHM7XG4gICAgcmV0dXJuIG9yaWdpbmFsQXR0YWNobWVudHMgJiYgb3JpZ2luYWxBdHRhY2htZW50cy5sZW5ndGhcbiAgICAgID8gW29yaWdpbmFsQXR0YWNobWVudHNbMF1dXG4gICAgICA6IFtdO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkVGV4dGFyZWFUZXh0KCkge1xuICAgIGlmICghdGhpcy5jYW5TZW5kTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICd0aHJlYWQnXG4gICAgICAgID8gXCJzdHJlYW1DaGF0LllvdSBjYW4ndCBzZW5kIHRocmVhZCByZXBsaWVzIGluIHRoaXMgY2hhbm5lbFwiXG4gICAgICAgIDogXCJzdHJlYW1DaGF0LllvdSBjYW4ndCBzZW5kIG1lc3NhZ2VzIGluIHRoaXMgY2hhbm5lbFwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb29sZG93biQpIHtcbiAgICAgIHJldHVybiAnc3RyZWFtQ2hhdC5TbG93IE1vZGUgT04nO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhc3luYyBmaWxlc1NlbGVjdGVkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpIHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFyZUF0dGFjaGVtbnRzVmFsaWQoZmlsZUxpc3QpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmZpbGVzU2VsZWN0ZWQoZmlsZUxpc3QpO1xuICAgIHRoaXMuY2xlYXJGaWxlSW5wdXQoKTtcbiAgfVxuXG4gIGRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKSB7XG4gICAgdGhpcy5jaGFubmVsU2VydmljZS5zZWxlY3RNZXNzYWdlVG9RdW90ZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgZ2V0RW1vamlQaWNrZXJDb250ZXh0KCk6IEVtb2ppUGlja2VyQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVtb2ppSW5wdXQkOiB0aGlzLmVtb2ppSW5wdXRTZXJ2aWNlLmVtb2ppSW5wdXQkLFxuICAgIH07XG4gIH1cblxuICBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KCk6IEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRhY2htZW50VXBsb2FkcyQ6IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkLFxuICAgICAgZGVsZXRlVXBsb2FkSGFuZGxlcjogdGhpcy5kZWxldGVVcGxvYWQuYmluZCh0aGlzKSxcbiAgICAgIHJldHJ5VXBsb2FkSGFuZGxlcjogdGhpcy5yZXRyeVVwbG9hZC5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVVwbG9hZCh1cGxvYWQ6IEF0dGFjaG1lbnRVcGxvYWQpIHtcbiAgICB2b2lkIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuZGVsZXRlQXR0YWNobWVudCh1cGxvYWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyeVVwbG9hZChmaWxlOiBGaWxlKSB7XG4gICAgdm9pZCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLnJldHJ5QXR0YWNobWVudFVwbG9hZChmaWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGaWxlSW5wdXQoKSB7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNVcGRhdGUoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5tZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGV4dGFyZWEoKSB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmRNZXNzYWdlcyB8fCB0aGlzLnRleHRhcmVhUmVmIHx8ICF0aGlzLnRleHRhcmVhQW5jaG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPVxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy50ZXh0YXJlYVR5cGUpO1xuICAgIHRoaXMudGV4dGFyZWFSZWYgPVxuICAgICAgdGhpcy50ZXh0YXJlYUFuY2hvci52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxhbnk+KFxuICAgICAgICBjb21wb25lbnRGYWN0b3J5XG4gICAgICApO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2hlbW50c1ZhbGlkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpIHtcbiAgICBpZiAoIWZpbGVMaXN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFwcFNldHRpbmdzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnQuZ2V0QXBwU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIEFycmF5LmZyb20oZmlsZUxpc3QpLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBoYXNCbG9ja2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc0Jsb2NrZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmKSkge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5VbnN1cHBvcnRlZCBmaWxlIHR5cGU6IHt7dHlwZX19JyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgdHlwZTogZi50eXBlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYW5TZW5kTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5jaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9XG4gICAgICAgIGNhcGFiaWxpdGllcy5pbmRleE9mKFxuICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nID8gJ3NlbmQtbWVzc2FnZScgOiAnc2VuZC1yZXBseSdcbiAgICAgICAgKSAhPT0gLTE7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmluaXRUZXh0YXJlYSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBhcmVudE1lc3NhZ2VJZCgpIHtcbiAgICBsZXQgcGFyZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3RocmVhZCcpIHtcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlUGFyZW50TWVzc2FnZUlkJFxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChpZCkgPT4gKHBhcmVudE1lc3NhZ2VJZCA9IGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudE1lc3NhZ2VJZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDb29sZG93bihjb29sZG93bjogbnVtYmVyKSB7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5jb29sZG93biQgPSB0aW1lcigwLCAxMDAwKS5waXBlKFxuICAgICAgdGFrZShjb29sZG93biArIDEpLFxuICAgICAgbWFwKCh2KSA9PiBjb29sZG93biAtIHYpLFxuICAgICAgdGFwKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQ29vbGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ29vbGRvd24oKSB7XG4gICAgdGhpcy5jb29sZG93biQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIC8vIHRoZSBhbmNob3IgZGlyZWN0aXZlIHdpbGwgYmUgcmVjcmVhdGVkIGJlY2F1c2Ugb2YgKm5nSWYsIHNvIHdlIHdpbGwgaGF2ZSB0byByZWluaXQgdGhlIHRleHRhcmVhIGFzIHdlbGxcbiAgICB0aGlzLnRleHRhcmVhUmVmID0gdW5kZWZpbmVkO1xuICAgIC8vIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGUgdGV4dGFyZWEgYWZ0ZXIgdGhlIGFuY2hvciB3YXMgcmVjcmVhdGVkLCBzbyB3ZSB3aWxsIGhhdmUgdG8gd2FpdCBhIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2l0aCBzZXRUaW1lb3V0XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRUZXh0YXJlYSgpKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInt7XG4gICAgbW9kZSA9PT0gJ21haW4nID8gJ3N0ci1jaGF0X19pbnB1dC1mbGF0JyA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dCdcbiAgfX1cIlxuICBbY2xhc3Muc3RyLWNoYXRfX2lucHV0LWZsYXQtaGFzLWF0dGFjaG1lbnRzXT1cIlxuICAgIChhdHRhY2htZW50VXBsb2FkcyQgfCBhc3luYykhLmxlbmd0aCA+IDBcbiAgXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19pbnB1dC1mbGF0LXF1b3RlZF09XCIhIXF1b3RlZE1lc3NhZ2VcIlxuPlxuICA8ZGl2XG4gICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS1jb250YWluZXJcIlxuICAgIGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlld1wiXG4gICAgKm5nSWY9XCJxdW90ZWRNZXNzYWdlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWhlYWRlclwiPlxuICAgICAgPGRpdj57eyBcInN0cmVhbUNoYXQuUmVwbHkgdG8gTWVzc2FnZVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NxdWFyZS1idXR0b25cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInJlbW92ZS1xdW90ZVwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdE1lc3NhZ2VUb1F1b3RlKClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgaWNvbj1cImNsb3NlLW5vLW91dGxpbmVcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogMTBweFwiXG4gICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInF1b3RlZC1tZXNzYWdlLXByZXZpZXctY29udGVudFwiPlxuICAgICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJxb3V0ZWQtbWVzc2FnZS1hdmF0YXJcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgW2ltYWdlVXJsXT1cInF1b3RlZE1lc3NhZ2U/LnVzZXI/LmltYWdlXCJcbiAgICAgICAgW25hbWVdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8ubmFtZSB8fCBxdW90ZWRNZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1jb250ZW50LWlubmVyXCI+XG4gICAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRhY2htZW50c109XCJxdW90ZWRNZXNzYWdlQXR0YWNobWVudHNcIlxuICAgICAgICAgIFttZXNzYWdlSWRdPVwicXVvdGVkTWVzc2FnZT8uaWRcIlxuICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS10ZXh0XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cInF1b3RlZE1lc3NhZ2U/Lmh0bWwgfHwgcXVvdGVkTWVzc2FnZT8udGV4dFwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19pbnB1dC1mbGF0LXdyYXBwZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ7e1xuICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICA/ICdzdHItY2hhdF9faW5wdXQtZmxhdC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgICAgICA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgIH19XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1ByZXZpZXdcbiAgICAgICAgbGV0LWF0dGFjaG1lbnRVcGxvYWRzJD1cImF0dGFjaG1lbnRVcGxvYWRzJFwiXG4gICAgICAgIGxldC1yZXRyeVVwbG9hZEhhbmRsZXI9XCJyZXRyeVVwbG9hZEhhbmRsZXJcIlxuICAgICAgICBsZXQtZGVsZXRlVXBsb2FkSGFuZGxlcj1cImRlbGV0ZVVwbG9hZEhhbmRsZXJcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0XG4gICAgICAgICAgW2F0dGFjaG1lbnRVcGxvYWRzJF09XCJhdHRhY2htZW50VXBsb2FkcyRcIlxuICAgICAgICAgIChyZXRyeUF0dGFjaG1lbnRVcGxvYWQpPVwicmV0cnlVcGxvYWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZVVwbG9hZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJyZnUtaW1hZ2UtcHJldmlld2VyLWFuZ3VsYXItaG9zdFwiXG4gICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LXByZXZpZXctbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzUHJldmlldztcbiAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KClcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydGEgc3RyLWNoYXRfX3RleHRhcmVhIHN0ci1jaGF0LWFuZ3VsYXJfX3RleHRhcmVhXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImVtb2ppUGlja2VyVGVtcGxhdGUgJiYgIWlzQ29vbGRvd25JblByb2dyZXNzXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImVtb2ppLXBpY2tlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9faW5wdXQtZmxhdC1lbW9qaXNlbGVjdFxuICAgICAgICAgICAgICBzdHItY2hhdC1hbmd1bGFyX19lbW9qaXNlbGVjdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZW1vamlQaWNrZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBnZXRFbW9qaVBpY2tlckNvbnRleHQoKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2lucHV0LWZsYXQtY29vbGRvd24gc3RyLWNoYXQtYW5ndWxhcl9fY29vbGRvd25cIlxuICAgICAgICAgICpuZ0lmPVwiaXNDb29sZG93bkluUHJvZ3Jlc3NcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY29vbGRvd24tdGltZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29vbGRvd24kIHwgYXN5bmMgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VzICYmICFpc0Nvb2xkb3duSW5Qcm9ncmVzczsgZWxzZSBub3RBbGxvd2VkXCJcbiAgICAgICAgICBzdHJlYW1UZXh0YXJlYVxuICAgICAgICAgIFsodmFsdWUpXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ0eXBpbmdTdGFydCQubmV4dCgpXCJcbiAgICAgICAgICAoc2VuZCk9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhUmVmXCJcbiAgICAgICAgICAodXNlck1lbnRpb25zKT1cIm1lbnRpb25lZFVzZXJzID0gJGV2ZW50XCJcbiAgICAgICAgICBbYXJlTWVudGlvbnNFbmFibGVkXT1cImFyZU1lbnRpb25zRW5hYmxlZFwiXG4gICAgICAgICAgW21lbnRpb25TY29wZV09XCJtZW50aW9uU2NvcGVcIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RBbGxvd2VkPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgIHJvd3M9XCIxXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkaXNhYmxlZFRleHRhcmVhVGV4dCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInJ0YV9fdGV4dGFyZWEgc3RyLWNoYXRfX3RleHRhcmVhX190ZXh0YXJlYVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRpc2FibGVkLXRleHRhcmVhXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzRmlsZVVwbG9hZEVuYWJsZWQgJiZcbiAgICAgICAgICBpc0ZpbGVVcGxvYWRBdXRob3JpemVkICYmXG4gICAgICAgICAgY2FuU2VuZE1lc3NhZ2VzICYmXG4gICAgICAgICAgIWlzQ29vbGRvd25JblByb2dyZXNzXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGV1cGxvYWQtd3JhcHBlclwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS11cGxvYWQtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICAgICAge3sgXCJzdHJlYW1DaGF0LkF0dGFjaCBmaWxlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmZ1LWZpbGUtdXBsb2FkLWJ1dHRvblwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZnUtZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVzU2VsZWN0ZWQoZmlsZUlucHV0LmZpbGVzKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9faW5wdXQtZmxhdC1maWxldXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGljb249XCJmaWxlLXVwbG9hZFwiXG4gICAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJjYW5TZW5kTWVzc2FnZXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kLWJ1dHRvblwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19zZW5kLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJzZW5kXCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -6,7 +6,7 @@ import * as i1 from "../channel.service";
6
6
  import * as i2 from "../chat-client.service";
7
7
  import * as i3 from "./image-load.service";
8
8
  import * as i4 from "../custom-templates.service";
9
- import * as i5 from "../avatar/avatar.component";
9
+ import * as i5 from "../avatar-placeholder/avatar-placeholder.component";
10
10
  import * as i6 from "../message/message.component";
11
11
  import * as i7 from "@angular/common";
12
12
  import * as i8 from "@ngx-translate/core";
@@ -204,7 +204,7 @@ export class MessageListComponent {
204
204
  }
205
205
  }
206
206
  MessageListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageListComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChatClientService }, { token: i3.ImageLoadService }, { token: i4.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
207
- MessageListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageListComponent, selector: "stream-message-list", inputs: { mode: "mode" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "parentMessageElement", first: true, predicate: ["parentMessageElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll\">\n <ul class=\"str-chat__ul\">\n <li\n #parentMessageElement\n *ngIf=\"mode === 'thread'\"\n data-testid=\"parent-message\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: parentMessage }\n \"\n ></ng-container>\n <div class=\"str-chat__thread-start\" translate>\n streamChat.Start of a new thread\n </div>\n </li>\n <li\n data-testclass=\"message\"\n *ngFor=\"\n let message of messages$ | async;\n let i = index;\n trackBy: trackByMessageId\n \"\n class=\"str-chat__li str-chat__li--{{ groupStyles[i] }}\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: message }\n \"\n ></ng-container>\n </li>\n </ul>\n <ng-template #defaultTypingIndicator let-usersTyping$=\"usersTyping$\">\n <div\n *ngIf=\"$any(usersTyping$ | async)?.length\"\n data-testid=\"typing-indicator\"\n class=\"str-chat__typing-indicator str-chat__typing-indicator--typing\"\n >\n <stream-avatar\n *ngFor=\"let user of usersTyping$ | async; trackBy: trackByUserId\"\n [name]=\"user.name || user.id\"\n [imageUrl]=\"user.image\"\n ></stream-avatar>\n <div class=\"str-chat__typing-indicator__dots\">\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n </div>\n </div>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n typingIndicatorTemplate || defaultTypingIndicator;\n context: getTypingIndicatorContext()\n \"\n ></ng-container>\n </div>\n</div>\n<div class=\"str-chat__list-notifications\">\n <button\n data-testid=\"scroll-to-bottom\"\n *ngIf=\"isUserScrolledUp\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-right\n str-chat__message-notification-scroll-down\n \"\n (keyup.enter)=\"scrollToBottom()\"\n (click)=\"scrollToBottom()\"\n >\n <div\n *ngIf=\"unreadMessageCount > 0\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-scroll-down-unread-count\n \"\n >\n {{ unreadMessageCount }}\n </div>\n </button>\n</div>\n\n<ng-template #messageTemplateContainer let-message=\"message\">\n <ng-template\n #defaultMessageTemplate\n let-messageInput=\"message\"\n let-isLastSentMessage=\"isLastSentMessage\"\n let-enabledMessageActions=\"enabledMessageActions\"\n let-mode=\"mode\"\n >\n <stream-message\n [message]=\"messageInput\"\n [isLastSentMessage]=\"isLastSentMessage\"\n [enabledMessageActions]=\"enabledMessageActions\"\n [mode]=\"mode\"\n ></stream-message>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplate || defaultMessageTemplate;\n context: getMessageContext(message)\n \"\n ></ng-container>\n</ng-template>\n", components: [{ type: i5.AvatarComponent, selector: "stream-avatar", inputs: ["name", "imageUrl", "size"] }, { type: i6.MessageComponent, selector: "stream-message", inputs: ["message", "enabledMessageActions", "isLastSentMessage", "mode"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i7.AsyncPipe } });
207
+ MessageListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageListComponent, selector: "stream-message-list", inputs: { mode: "mode" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "parentMessageElement", first: true, predicate: ["parentMessageElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll\">\n <ul class=\"str-chat__ul\">\n <li\n #parentMessageElement\n *ngIf=\"mode === 'thread'\"\n data-testid=\"parent-message\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: parentMessage }\n \"\n ></ng-container>\n <div class=\"str-chat__thread-start\" translate>\n streamChat.Start of a new thread\n </div>\n </li>\n <li\n data-testclass=\"message\"\n *ngFor=\"\n let message of messages$ | async;\n let i = index;\n trackBy: trackByMessageId\n \"\n class=\"str-chat__li str-chat__li--{{ groupStyles[i] }}\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: message }\n \"\n ></ng-container>\n </li>\n </ul>\n <ng-template #defaultTypingIndicator let-usersTyping$=\"usersTyping$\">\n <div\n *ngIf=\"$any(usersTyping$ | async)?.length\"\n data-testid=\"typing-indicator\"\n class=\"str-chat__typing-indicator str-chat__typing-indicator--typing\"\n >\n <stream-avatar-placeholder\n *ngFor=\"let user of usersTyping$ | async; trackBy: trackByUserId\"\n [name]=\"user.name || user.id\"\n [imageUrl]=\"user.image\"\n ></stream-avatar-placeholder>\n <div class=\"str-chat__typing-indicator__dots\">\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n </div>\n </div>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n typingIndicatorTemplate || defaultTypingIndicator;\n context: getTypingIndicatorContext()\n \"\n ></ng-container>\n </div>\n</div>\n<div class=\"str-chat__list-notifications\">\n <button\n data-testid=\"scroll-to-bottom\"\n *ngIf=\"isUserScrolledUp\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-right\n str-chat__message-notification-scroll-down\n \"\n (keyup.enter)=\"scrollToBottom()\"\n (click)=\"scrollToBottom()\"\n >\n <div\n *ngIf=\"unreadMessageCount > 0\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-scroll-down-unread-count\n \"\n >\n {{ unreadMessageCount }}\n </div>\n </button>\n</div>\n\n<ng-template #messageTemplateContainer let-message=\"message\">\n <ng-template\n #defaultMessageTemplate\n let-messageInput=\"message\"\n let-isLastSentMessage=\"isLastSentMessage\"\n let-enabledMessageActions=\"enabledMessageActions\"\n let-mode=\"mode\"\n >\n <stream-message\n [message]=\"messageInput\"\n [isLastSentMessage]=\"isLastSentMessage\"\n [enabledMessageActions]=\"enabledMessageActions\"\n [mode]=\"mode\"\n ></stream-message>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplate || defaultMessageTemplate;\n context: getMessageContext(message)\n \"\n ></ng-container>\n</ng-template>\n", components: [{ type: i5.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size"] }, { type: i6.MessageComponent, selector: "stream-message", inputs: ["message", "enabledMessageActions", "isLastSentMessage", "mode"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i7.AsyncPipe } });
208
208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageListComponent, decorators: [{
209
209
  type: Component,
210
210
  args: [{
@@ -224,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
224
224
  type: ViewChild,
225
225
  args: ['parentMessageElement']
226
226
  }] } });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXJDLE9BQU8sRUFBRSxjQUFjLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQUs1RDs7R0FFRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFrQy9CLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxzQkFBOEM7UUFIOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBbkN4RDs7V0FFRztRQUNNLFNBQUksR0FBc0IsTUFBTSxDQUFDO1FBSTFDLDBCQUFxQixHQUFhLEVBQUUsQ0FBQztRQUNQLFVBQUssR0FDakMsd0VBQXdFLENBQUM7UUFDM0UsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQWFkLDhCQUF5QixHQUFHLEdBQUcsQ0FBQztRQUN6QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFXekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJ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QkFDNUMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7eU1BT1UsSUFBSTtzQkFBWixLQUFLO2dCQUt3QixLQUFLO3NCQUFsQyxXQUFXO3VCQUFDLE9BQU87Z0JBUVosZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBR3BCLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERlZmF1bHRVc2VyVHlwZSxcbiAgTWVzc2FnZUNvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG4gIFR5cGluZ0luZGljYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRHcm91cFN0eWxlcywgR3JvdXBTdHlsZSB9IGZyb20gJy4vZ3JvdXAtc3R5bGVzJztcbmltcG9ydCB7IEltYWdlTG9hZFNlcnZpY2UgfSBmcm9tICcuL2ltYWdlLWxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VMaXN0YCBjb21wb25lbnQgcmVuZGVycyBhIHNjcm9sbGFibGUgbGlzdCBvZiBtZXNzYWdlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlTGlzdENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgbGlzdCBzaG91bGQgZGlzcGxheSBjaGFubmVsIG1lc3NhZ2VzIG9yIFt0aHJlYWQgbWVzc2FnZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ21haW4nIHwgJ3RocmVhZCcgPSAnbWFpbic7XG4gIHR5cGluZ0luZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxUeXBpbmdJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VzJCE6IE9ic2VydmFibGU8U3RyZWFtTWVzc2FnZVtdPjtcbiAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgcHJpdmF0ZSBjbGFzcyA9XG4gICAgJ3N0ci1jaGF0LWFuZ3VsYXJfX21haW4tcGFuZWwtaW5uZXIgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1saXN0LWhvc3QnO1xuICB1bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICBpc1VzZXJTY3JvbGxlZFVwOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBncm91cFN0eWxlczogR3JvdXBTdHlsZVtdID0gW107XG4gIGxhc3RTZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhcmVudE1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpXG4gIHByaXZhdGUgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhcmVudE1lc3NhZ2VFbGVtZW50JylcbiAgcHJpdmF0ZSBwYXJlbnRNZXNzYWdlRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIGxhdGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc05ld01lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnRhaW5lckhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVyTWFzc2FnZXNMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNOZXdNZXNzYWdlU2VudEJ5VXNlcjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1VzZXJTY3JvbGxlZFVwVGhyZXNob2xkID0gMzAwO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJldlNjcm9sbFRvcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVzZXJzVHlwaW5nSW5DaGFubmVsJCE6IE9ic2VydmFibGU8VXNlclJlc3BvbnNlPERlZmF1bHRVc2VyVHlwZT5bXT47XG4gIHByaXZhdGUgdXNlcnNUeXBpbmdJblRocmVhZCQhOiBPYnNlcnZhYmxlPFVzZXJSZXNwb25zZTxEZWZhdWx0VXNlclR5cGU+W10+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW1hZ2VMb2FkU2VydmljZTogSW1hZ2VMb2FkU2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0ZXMgPSBjaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAoY2FwYWJpbGl0ZXMpIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyA9IGNhcGFiaWxpdGVzO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmltYWdlTG9hZFNlcnZpY2UuaW1hZ2VMb2FkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNVc2VyU2Nyb2xsZWRVcCkge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAvLyBIYWNreSBhbmQgdW5yZWxpYWJsZSB3b3JrYXJvdW5kIHRvIHNjcm9sbCBkb3duIGFmdGVyIGxvYWRlZCBpbWFnZXMgbW92ZSB0aGUgc2Nyb2xsYmFyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVQYXJlbnRNZXNzYWdlJC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1lc3NhZ2UgJiZcbiAgICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2UgJiZcbiAgICAgICAgICBtZXNzYWdlLmlkICE9PSB0aGlzLnBhcmVudE1lc3NhZ2UuaWQgJiZcbiAgICAgICAgICB0aGlzLm1vZGUgPT09ICd0aHJlYWQnXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZVRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMubWVzc2FnZVRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLnR5cGluZ0luZGljYXRvclRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICAgIHRoaXMudXNlcnNUeXBpbmdJblRocmVhZCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVzZXJzVHlwaW5nSW5UaHJlYWQkO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tb2RlKSB7XG4gICAgICB0aGlzLnNldE1lc3NhZ2VzJCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5oYXNOZXdNZXNzYWdlcykge1xuICAgICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkVXAgfHwgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgLy8gSGFja3kgYW5kIHVucmVsaWFibGUgd29ya2Fyb3VuZCB0byBzY3JvbGwgZG93biBhZnRlciBsb2FkZWQgaW1hZ2VzIG1vdmUgdGhlIHNjcm9sbGJhclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9XG4gICAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkKSB7XG4gICAgICB0aGlzLnByZXNlcnZlU2Nyb2xsYmFyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICB0aGlzLm9sZGVyTWFzc2FnZXNMb2FkZWQgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPCB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAmJlxuICAgICAgIXRoaXMuaXNVc2VyU2Nyb2xsZWRVcFxuICAgICkge1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHRyYWNrQnlNZXNzYWdlSWQoaW5kZXg6IG51bWJlciwgaXRlbTogU3RyZWFtTWVzc2FnZSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgdHJhY2tCeVVzZXJJZChpbmRleDogbnVtYmVyLCB1c2VyOiBVc2VyUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gdXNlci5pZDtcbiAgfVxuXG4gIHNjcm9sbFRvQm90dG9tKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgc2Nyb2xsZWQoKSB7XG4gICAgdGhpcy5pc1VzZXJTY3JvbGxlZFVwID1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC1cbiAgICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICtcbiAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCkgPlxuICAgICAgdGhpcy5pc1VzZXJTY3JvbGxlZFVwVGhyZXNob2xkO1xuICAgIGlmICghdGhpcy5pc1VzZXJTY3JvbGxlZFVwKSB7XG4gICAgICB0aGlzLnVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDw9XG4gICAgICAgICh0aGlzLnBhcmVudE1lc3NhZ2VFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCB8fCAwKSAmJlxuICAgICAgKHRoaXMucHJldlNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMucHJldlNjcm9sbFRvcCA+XG4gICAgICAgICAgKHRoaXMucGFyZW50TWVzc2FnZUVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IDApKVxuICAgICkge1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlTWVzc2FnZXMoKVxuICAgICAgICA6IHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZVRocmVhZFJlcGxpZXMoKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JDb250ZXh0KCk6IFR5cGluZ0luZGljYXRvckNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICB1c2Vyc1R5cGluZyQ6IHRoaXMudXNlcnNUeXBpbmckLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKTogTWVzc2FnZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgaXNMYXN0U2VudE1lc3NhZ2U6ICEhKFxuICAgICAgICB0aGlzLmxhc3RTZW50TWVzc2FnZUlkICYmIG1lc3NhZ2U/LmlkID09PSB0aGlzLmxhc3RTZW50TWVzc2FnZUlkXG4gICAgICApLFxuICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVzZXJ2ZVNjcm9sbGJhclBvc2l0aW9uKCkge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICh0aGlzLnByZXZTY3JvbGxUb3AgfHwgMCkgK1xuICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5jb250YWluZXJIZWlnaHQhKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWVzc2FnZXMkKCkge1xuICAgIHRoaXMubWVzc2FnZXMkID0gKFxuICAgICAgdGhpcy5tb2RlID09PSAnbWFpbidcbiAgICAgICAgPyB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWxNZXNzYWdlcyRcbiAgICAgICAgOiB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZVRocmVhZE1lc3NhZ2VzJFxuICAgICkucGlwZShcbiAgICAgIHRhcCgobWVzc2FnZXMpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50TGF0ZXN0TWVzc2FnZURhdGUgPVxuICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdLmNyZWF0ZWRfYXQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5sYXRlc3RNZXNzYWdlRGF0ZSB8fFxuICAgICAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZURhdGU/LmdldFRpbWUoKSA8IGN1cnJlbnRMYXRlc3RNZXNzYWdlRGF0ZS5nZXRUaW1lKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5sYXRlc3RNZXNzYWdlRGF0ZSA9IGN1cnJlbnRMYXRlc3RNZXNzYWdlRGF0ZTtcbiAgICAgICAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPVxuICAgICAgICAgICAgbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0udXNlcj8uaWQgPT09XG4gICAgICAgICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkO1xuICAgICAgICAgIGlmICh0aGlzLmlzVXNlclNjcm9sbGVkVXApIHtcbiAgICAgICAgICAgIHRoaXMudW5yZWFkTWVzc2FnZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPbGRlc3RNZXNzYWdlRGF0ZSA9IG1lc3NhZ2VzWzBdLmNyZWF0ZWRfYXQ7XG4gICAgICAgIGlmICghdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZSkge1xuICAgICAgICAgIHRoaXMub2xkZXN0TWVzc2FnZURhdGUgPSBjdXJyZW50T2xkZXN0TWVzc2FnZURhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZT8uZ2V0VGltZSgpID4gY3VycmVudE9sZGVzdE1lc3NhZ2VEYXRlLmdldFRpbWUoKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9sZGVzdE1lc3NhZ2VEYXRlID0gY3VycmVudE9sZGVzdE1lc3NhZ2VEYXRlO1xuICAgICAgICAgIHRoaXMub2xkZXJNYXNzYWdlc0xvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICB0aGlzLmdyb3VwU3R5bGVzID0gbWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgIGdldEdyb3VwU3R5bGVzKG0sIG1lc3NhZ2VzW2kgLSAxXSwgbWVzc2FnZXNbaSArIDFdKVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICB0YXAoXG4gICAgICAgIChtZXNzYWdlcykgPT5cbiAgICAgICAgICAodGhpcy5sYXN0U2VudE1lc3NhZ2VJZCA9IFsuLi5tZXNzYWdlc11cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgICAgICBtLnVzZXI/LmlkID09PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkICYmXG4gICAgICAgICAgICAgICAgbS5zdGF0dXMgIT09ICdzZW5kaW5nJ1xuICAgICAgICAgICAgKT8uaWQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTY3JvbGxTdGF0ZSgpIHtcbiAgICB0aGlzLmxhdGVzdE1lc3NhZ2VEYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgPSB0cnVlO1xuICAgIHRoaXMuaXNVc2VyU2Nyb2xsZWRVcCA9IGZhbHNlO1xuICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub2xkZXJNYXNzYWdlc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMub2xkZXN0TWVzc2FnZURhdGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICAgIHRoaXMucHJldlNjcm9sbFRvcCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCB1c2Vyc1R5cGluZyQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgID8gdGhpcy51c2Vyc1R5cGluZ0luVGhyZWFkJFxuICAgICAgOiB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJDtcbiAgfVxufVxuIiwiPGRpdlxuICAjc2Nyb2xsQ29udGFpbmVyXG4gIGRhdGEtdGVzdGlkPVwic2Nyb2xsLWNvbnRhaW5lclwiXG4gIGNsYXNzPVwic3RyLWNoYXRfX2xpc3RcIlxuICAoc2Nyb2xsKT1cInNjcm9sbGVkKClcIlxuPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3JldmVyc2UtaW5maW5pdGUtc2Nyb2xsXCI+XG4gICAgPHVsIGNsYXNzPVwic3RyLWNoYXRfX3VsXCI+XG4gICAgICA8bGlcbiAgICAgICAgI3BhcmVudE1lc3NhZ2VFbGVtZW50XG4gICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RocmVhZCdcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInBhcmVudC1tZXNzYWdlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IHBhcmVudE1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190aHJlYWQtc3RhcnRcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5TdGFydCBvZiBhIG5ldyB0aHJlYWRcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPGxpXG4gICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibWVzc2FnZVwiXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzJCB8IGFzeW5jO1xuICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeU1lc3NhZ2VJZFxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19saSBzdHItY2hhdF9fbGktLXt7IGdyb3VwU3R5bGVzW2ldIH19XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IG1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUeXBpbmdJbmRpY2F0b3IgbGV0LXVzZXJzVHlwaW5nJD1cInVzZXJzVHlwaW5nJFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiRhbnkodXNlcnNUeXBpbmckIHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInR5cGluZy1pbmRpY2F0b3JcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yIHN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yLS10eXBpbmdcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF2YXRhclxuICAgICAgICAgICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJzVHlwaW5nJCB8IGFzeW5jOyB0cmFja0J5OiB0cmFja0J5VXNlcklkXCJcbiAgICAgICAgICBbbmFtZV09XCJ1c2VyLm5hbWUgfHwgdXNlci5pZFwiXG4gICAgICAgICAgW2ltYWdlVXJsXT1cInVzZXIuaW1hZ2VcIlxuICAgICAgICA+PC9zdHJlYW0tYXZhdGFyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHR5cGluZ0luZGljYXRvclRlbXBsYXRlIHx8IGRlZmF1bHRUeXBpbmdJbmRpY2F0b3I7XG4gICAgICAgIGNvbnRleHQ6IGdldFR5cGluZ0luZGljYXRvckNvbnRleHQoKVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xpc3Qtbm90aWZpY2F0aW9uc1wiPlxuICA8YnV0dG9uXG4gICAgZGF0YS10ZXN0aWQ9XCJzY3JvbGwtdG8tYm90dG9tXCJcbiAgICAqbmdJZj1cImlzVXNlclNjcm9sbGVkVXBcIlxuICAgIGNsYXNzPVwiXG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb25cbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1yaWdodFxuICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC1kb3duXG4gICAgXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2Nyb2xsVG9Cb3R0b20oKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFRvQm90dG9tKClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJ1bnJlYWRNZXNzYWdlQ291bnQgPiAwXCJcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvblxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb24tc2Nyb2xsLWRvd24tdW5yZWFkLWNvdW50XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IHVucmVhZE1lc3NhZ2VDb3VudCB9fVxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lciBsZXQtbWVzc2FnZT1cIm1lc3NhZ2VcIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHRNZXNzYWdlVGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgbGV0LWlzTGFzdFNlbnRNZXNzYWdlPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgIGxldC1lbmFibGVkTWVzc2FnZUFjdGlvbnM9XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgIGxldC1tb2RlPVwibW9kZVwiXG4gID5cbiAgICA8c3RyZWFtLW1lc3NhZ2VcbiAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICBbaXNMYXN0U2VudE1lc3NhZ2VdPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgICAgW2VuYWJsZWRNZXNzYWdlQWN0aW9uc109XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgPjwvc3RyZWFtLW1lc3NhZ2U+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgbWVzc2FnZVRlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlVGVtcGxhdGU7XG4gICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlKVxuICAgIFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXJDLE9BQU8sRUFBRSxjQUFjLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQUs1RDs7R0FFRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFrQy9CLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxzQkFBOEM7UUFIOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBbkN4RDs7V0FFRztRQUNNLFNBQUksR0FBc0IsTUFBTSxDQUFDO1FBSTFDLDBCQUFxQixHQUFhLEVBQUUsQ0FBQztRQUNQLFVBQUssR0FDakMsd0VBQXdFLENBQUM7UUFDM0UsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQWFkLDhCQUF5QixHQUFHLEdBQUcsQ0FBQztRQUN6QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFXekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJ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QkFDNUMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7eU1BT1UsSUFBSTtzQkFBWixLQUFLO2dCQUt3QixLQUFLO3NCQUFsQyxXQUFXO3VCQUFDLE9BQU87Z0JBUVosZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBR3BCLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIERlZmF1bHRVc2VyVHlwZSxcbiAgTWVzc2FnZUNvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG4gIFR5cGluZ0luZGljYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRHcm91cFN0eWxlcywgR3JvdXBTdHlsZSB9IGZyb20gJy4vZ3JvdXAtc3R5bGVzJztcbmltcG9ydCB7IEltYWdlTG9hZFNlcnZpY2UgfSBmcm9tICcuL2ltYWdlLWxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VMaXN0YCBjb21wb25lbnQgcmVuZGVycyBhIHNjcm9sbGFibGUgbGlzdCBvZiBtZXNzYWdlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlTGlzdENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgbGlzdCBzaG91bGQgZGlzcGxheSBjaGFubmVsIG1lc3NhZ2VzIG9yIFt0aHJlYWQgbWVzc2FnZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ21haW4nIHwgJ3RocmVhZCcgPSAnbWFpbic7XG4gIHR5cGluZ0luZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxUeXBpbmdJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VzJCE6IE9ic2VydmFibGU8U3RyZWFtTWVzc2FnZVtdPjtcbiAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgcHJpdmF0ZSBjbGFzcyA9XG4gICAgJ3N0ci1jaGF0LWFuZ3VsYXJfX21haW4tcGFuZWwtaW5uZXIgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1saXN0LWhvc3QnO1xuICB1bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICBpc1VzZXJTY3JvbGxlZFVwOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBncm91cFN0eWxlczogR3JvdXBTdHlsZVtdID0gW107XG4gIGxhc3RTZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhcmVudE1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpXG4gIHByaXZhdGUgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhcmVudE1lc3NhZ2VFbGVtZW50JylcbiAgcHJpdmF0ZSBwYXJlbnRNZXNzYWdlRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIGxhdGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc05ld01lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnRhaW5lckhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVyTWFzc2FnZXNMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNOZXdNZXNzYWdlU2VudEJ5VXNlcjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1VzZXJTY3JvbGxlZFVwVGhyZXNob2xkID0gMzAwO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJldlNjcm9sbFRvcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVzZXJzVHlwaW5nSW5DaGFubmVsJCE6IE9ic2VydmFibGU8VXNlclJlc3BvbnNlPERlZmF1bHRVc2VyVHlwZT5bXT47XG4gIHByaXZhdGUgdXNlcnNUeXBpbmdJblRocmVhZCQhOiBPYnNlcnZhYmxlPFVzZXJSZXNwb25zZTxEZWZhdWx0VXNlclR5cGU+W10+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW1hZ2VMb2FkU2VydmljZTogSW1hZ2VMb2FkU2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0ZXMgPSBjaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAoY2FwYWJpbGl0ZXMpIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyA9IGNhcGFiaWxpdGVzO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmltYWdlTG9hZFNlcnZpY2UuaW1hZ2VMb2FkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNVc2VyU2Nyb2xsZWRVcCkge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAvLyBIYWNreSBhbmQgdW5yZWxpYWJsZSB3b3JrYXJvdW5kIHRvIHNjcm9sbCBkb3duIGFmdGVyIGxvYWRlZCBpbWFnZXMgbW92ZSB0aGUgc2Nyb2xsYmFyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVQYXJlbnRNZXNzYWdlJC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1lc3NhZ2UgJiZcbiAgICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2UgJiZcbiAgICAgICAgICBtZXNzYWdlLmlkICE9PSB0aGlzLnBhcmVudE1lc3NhZ2UuaWQgJiZcbiAgICAgICAgICB0aGlzLm1vZGUgPT09ICd0aHJlYWQnXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZVRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMubWVzc2FnZVRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLnR5cGluZ0luZGljYXRvclRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICAgIHRoaXMudXNlcnNUeXBpbmdJblRocmVhZCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVzZXJzVHlwaW5nSW5UaHJlYWQkO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tb2RlKSB7XG4gICAgICB0aGlzLnNldE1lc3NhZ2VzJCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5oYXNOZXdNZXNzYWdlcykge1xuICAgICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkVXAgfHwgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgLy8gSGFja3kgYW5kIHVucmVsaWFibGUgd29ya2Fyb3VuZCB0byBzY3JvbGwgZG93biBhZnRlciBsb2FkZWQgaW1hZ2VzIG1vdmUgdGhlIHNjcm9sbGJhclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9XG4gICAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkKSB7XG4gICAgICB0aGlzLnByZXNlcnZlU2Nyb2xsYmFyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICB0aGlzLm9sZGVyTWFzc2FnZXNMb2FkZWQgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPCB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAmJlxuICAgICAgIXRoaXMuaXNVc2VyU2Nyb2xsZWRVcFxuICAgICkge1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHRyYWNrQnlNZXNzYWdlSWQoaW5kZXg6IG51bWJlciwgaXRlbTogU3RyZWFtTWVzc2FnZSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgdHJhY2tCeVVzZXJJZChpbmRleDogbnVtYmVyLCB1c2VyOiBVc2VyUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gdXNlci5pZDtcbiAgfVxuXG4gIHNjcm9sbFRvQm90dG9tKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgc2Nyb2xsZWQoKSB7XG4gICAgdGhpcy5pc1VzZXJTY3JvbGxlZFVwID1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC1cbiAgICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICtcbiAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCkgPlxuICAgICAgdGhpcy5pc1VzZXJTY3JvbGxlZFVwVGhyZXNob2xkO1xuICAgIGlmICghdGhpcy5pc1VzZXJTY3JvbGxlZFVwKSB7XG4gICAgICB0aGlzLnVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDw9XG4gICAgICAgICh0aGlzLnBhcmVudE1lc3NhZ2VFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCB8fCAwKSAmJlxuICAgICAgKHRoaXMucHJldlNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMucHJldlNjcm9sbFRvcCA+XG4gICAgICAgICAgKHRoaXMucGFyZW50TWVzc2FnZUVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IDApKVxuICAgICkge1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlTWVzc2FnZXMoKVxuICAgICAgICA6IHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZVRocmVhZFJlcGxpZXMoKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JDb250ZXh0KCk6IFR5cGluZ0luZGljYXRvckNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICB1c2Vyc1R5cGluZyQ6IHRoaXMudXNlcnNUeXBpbmckLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKTogTWVzc2FnZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgaXNMYXN0U2VudE1lc3NhZ2U6ICEhKFxuICAgICAgICB0aGlzLmxhc3RTZW50TWVzc2FnZUlkICYmIG1lc3NhZ2U/LmlkID09PSB0aGlzLmxhc3RTZW50TWVzc2FnZUlkXG4gICAgICApLFxuICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVzZXJ2ZVNjcm9sbGJhclBvc2l0aW9uKCkge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICh0aGlzLnByZXZTY3JvbGxUb3AgfHwgMCkgK1xuICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5jb250YWluZXJIZWlnaHQhKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWVzc2FnZXMkKCkge1xuICAgIHRoaXMubWVzc2FnZXMkID0gKFxuICAgICAgdGhpcy5tb2RlID09PSAnbWFpbidcbiAgICAgICAgPyB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWxNZXNzYWdlcyRcbiAgICAgICAgOiB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZVRocmVhZE1lc3NhZ2VzJFxuICAgICkucGlwZShcbiAgICAgIHRhcCgobWVzc2FnZXMpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50TGF0ZXN0TWVzc2FnZURhdGUgPVxuICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdLmNyZWF0ZWRfYXQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5sYXRlc3RNZXNzYWdlRGF0ZSB8fFxuICAgICAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZURhdGU/LmdldFRpbWUoKSA8IGN1cnJlbnRMYXRlc3RNZXNzYWdlRGF0ZS5nZXRUaW1lKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5sYXRlc3RNZXNzYWdlRGF0ZSA9IGN1cnJlbnRMYXRlc3RNZXNzYWdlRGF0ZTtcbiAgICAgICAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPVxuICAgICAgICAgICAgbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0udXNlcj8uaWQgPT09XG4gICAgICAgICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkO1xuICAgICAgICAgIGlmICh0aGlzLmlzVXNlclNjcm9sbGVkVXApIHtcbiAgICAgICAgICAgIHRoaXMudW5yZWFkTWVzc2FnZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPbGRlc3RNZXNzYWdlRGF0ZSA9IG1lc3NhZ2VzWzBdLmNyZWF0ZWRfYXQ7XG4gICAgICAgIGlmICghdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZSkge1xuICAgICAgICAgIHRoaXMub2xkZXN0TWVzc2FnZURhdGUgPSBjdXJyZW50T2xkZXN0TWVzc2FnZURhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZT8uZ2V0VGltZSgpID4gY3VycmVudE9sZGVzdE1lc3NhZ2VEYXRlLmdldFRpbWUoKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9sZGVzdE1lc3NhZ2VEYXRlID0gY3VycmVudE9sZGVzdE1lc3NhZ2VEYXRlO1xuICAgICAgICAgIHRoaXMub2xkZXJNYXNzYWdlc0xvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICB0aGlzLmdyb3VwU3R5bGVzID0gbWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgIGdldEdyb3VwU3R5bGVzKG0sIG1lc3NhZ2VzW2kgLSAxXSwgbWVzc2FnZXNbaSArIDFdKVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICB0YXAoXG4gICAgICAgIChtZXNzYWdlcykgPT5cbiAgICAgICAgICAodGhpcy5sYXN0U2VudE1lc3NhZ2VJZCA9IFsuLi5tZXNzYWdlc11cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgICAgICBtLnVzZXI/LmlkID09PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkICYmXG4gICAgICAgICAgICAgICAgbS5zdGF0dXMgIT09ICdzZW5kaW5nJ1xuICAgICAgICAgICAgKT8uaWQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTY3JvbGxTdGF0ZSgpIHtcbiAgICB0aGlzLmxhdGVzdE1lc3NhZ2VEYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgPSB0cnVlO1xuICAgIHRoaXMuaXNVc2VyU2Nyb2xsZWRVcCA9IGZhbHNlO1xuICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub2xkZXJNYXNzYWdlc0xvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMub2xkZXN0TWVzc2FnZURhdGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICAgIHRoaXMucHJldlNjcm9sbFRvcCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCB1c2Vyc1R5cGluZyQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgID8gdGhpcy51c2Vyc1R5cGluZ0luVGhyZWFkJFxuICAgICAgOiB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJDtcbiAgfVxufVxuIiwiPGRpdlxuICAjc2Nyb2xsQ29udGFpbmVyXG4gIGRhdGEtdGVzdGlkPVwic2Nyb2xsLWNvbnRhaW5lclwiXG4gIGNsYXNzPVwic3RyLWNoYXRfX2xpc3RcIlxuICAoc2Nyb2xsKT1cInNjcm9sbGVkKClcIlxuPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3JldmVyc2UtaW5maW5pdGUtc2Nyb2xsXCI+XG4gICAgPHVsIGNsYXNzPVwic3RyLWNoYXRfX3VsXCI+XG4gICAgICA8bGlcbiAgICAgICAgI3BhcmVudE1lc3NhZ2VFbGVtZW50XG4gICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ3RocmVhZCdcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInBhcmVudC1tZXNzYWdlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IHBhcmVudE1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190aHJlYWQtc3RhcnRcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5TdGFydCBvZiBhIG5ldyB0aHJlYWRcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPGxpXG4gICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibWVzc2FnZVwiXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzJCB8IGFzeW5jO1xuICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeU1lc3NhZ2VJZFxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19saSBzdHItY2hhdF9fbGktLXt7IGdyb3VwU3R5bGVzW2ldIH19XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IG1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUeXBpbmdJbmRpY2F0b3IgbGV0LXVzZXJzVHlwaW5nJD1cInVzZXJzVHlwaW5nJFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiRhbnkodXNlcnNUeXBpbmckIHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInR5cGluZy1pbmRpY2F0b3JcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yIHN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yLS10eXBpbmdcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICAgICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJzVHlwaW5nJCB8IGFzeW5jOyB0cmFja0J5OiB0cmFja0J5VXNlcklkXCJcbiAgICAgICAgICBbbmFtZV09XCJ1c2VyLm5hbWUgfHwgdXNlci5pZFwiXG4gICAgICAgICAgW2ltYWdlVXJsXT1cInVzZXIuaW1hZ2VcIlxuICAgICAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHR5cGluZ0luZGljYXRvclRlbXBsYXRlIHx8IGRlZmF1bHRUeXBpbmdJbmRpY2F0b3I7XG4gICAgICAgIGNvbnRleHQ6IGdldFR5cGluZ0luZGljYXRvckNvbnRleHQoKVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xpc3Qtbm90aWZpY2F0aW9uc1wiPlxuICA8YnV0dG9uXG4gICAgZGF0YS10ZXN0aWQ9XCJzY3JvbGwtdG8tYm90dG9tXCJcbiAgICAqbmdJZj1cImlzVXNlclNjcm9sbGVkVXBcIlxuICAgIGNsYXNzPVwiXG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb25cbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1yaWdodFxuICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC1kb3duXG4gICAgXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2Nyb2xsVG9Cb3R0b20oKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFRvQm90dG9tKClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJ1bnJlYWRNZXNzYWdlQ291bnQgPiAwXCJcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvblxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb24tc2Nyb2xsLWRvd24tdW5yZWFkLWNvdW50XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IHVucmVhZE1lc3NhZ2VDb3VudCB9fVxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lciBsZXQtbWVzc2FnZT1cIm1lc3NhZ2VcIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHRNZXNzYWdlVGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgbGV0LWlzTGFzdFNlbnRNZXNzYWdlPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgIGxldC1lbmFibGVkTWVzc2FnZUFjdGlvbnM9XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgIGxldC1tb2RlPVwibW9kZVwiXG4gID5cbiAgICA8c3RyZWFtLW1lc3NhZ2VcbiAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICBbaXNMYXN0U2VudE1lc3NhZ2VdPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgICAgW2VuYWJsZWRNZXNzYWdlQWN0aW9uc109XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgPjwvc3RyZWFtLW1lc3NhZ2U+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgbWVzc2FnZVRlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlVGVtcGxhdGU7XG4gICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlKVxuICAgIFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=