stream-chat-angular 2.3.0 → 2.5.1

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.
@@ -1,2 +1,2 @@
1
- export const version = '2.3.0';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICcyLjMuMCc7XG4iXX0=
1
+ export const version = '2.5.1';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICcyLjUuMSc7XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
1
+ import { Component, Input, ViewChild, } from '@angular/core';
2
2
  import { getDeviceWidth } from '../device-width';
3
3
  import { parseDate } from './parse-date';
4
4
  import { getReadByText } from './read-by-text';
@@ -13,7 +13,6 @@ import * as i7 from "../attachment-list/attachment-list.component";
13
13
  import * as i8 from "../loading-indicator/loading-indicator.component";
14
14
  import * as i9 from "@angular/common";
15
15
  import * as i10 from "@ngx-translate/core";
16
- import * as i11 from "./highlight-mentions.pipe";
17
16
  export class MessageComponent {
18
17
  constructor(chatClientService, channelService) {
19
18
  this.chatClientService = chatClientService;
@@ -23,8 +22,52 @@ export class MessageComponent {
23
22
  this.isReactionSelectorOpen = false;
24
23
  this.isPressedOnMobile = false;
25
24
  this.visibleMessageActionsCount = 0;
25
+ this.messageTextParts = [];
26
26
  this.user = this.chatClientService.chatClient.user;
27
27
  }
28
+ ngOnChanges(changes) {
29
+ var _a, _b;
30
+ if (changes.message) {
31
+ let content = ((_a = this.message) === null || _a === void 0 ? void 0 : _a.html) || ((_b = this.message) === null || _b === void 0 ? void 0 : _b.text);
32
+ if (!content) {
33
+ this.messageTextParts = [];
34
+ }
35
+ else {
36
+ // Backend will wrap HTML content with <p></p>\n
37
+ if (content.startsWith('<p>')) {
38
+ content = content.replace('<p>', '');
39
+ }
40
+ if (content.endsWith('</p>\n')) {
41
+ content = content.replace('</p>\n', '');
42
+ }
43
+ if (!this.message.mentioned_users ||
44
+ this.message.mentioned_users.length === 0) {
45
+ this.messageTextParts = [{ content, type: 'text' }];
46
+ }
47
+ else {
48
+ this.messageTextParts = [];
49
+ let text = content;
50
+ this.message.mentioned_users.forEach((user) => {
51
+ const mention = `@${user.name || user.id}`;
52
+ const precedingText = text.substring(0, text.indexOf(mention));
53
+ this.messageTextParts.push({
54
+ content: precedingText,
55
+ type: 'text',
56
+ });
57
+ this.messageTextParts.push({
58
+ content: mention,
59
+ type: 'mention',
60
+ user,
61
+ });
62
+ text = text.replace(precedingText + mention, '');
63
+ });
64
+ if (text) {
65
+ this.messageTextParts.push({ content: text, type: 'text' });
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
28
71
  get isSentByCurrentUser() {
29
72
  var _a, _b, _c;
30
73
  return ((_b = (_a = this.message) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id) === ((_c = this.user) === null || _c === void 0 ? void 0 : _c.id);
@@ -98,7 +141,7 @@ export class MessageComponent {
98
141
  }
99
142
  }
100
143
  MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageComponent, deps: [{ token: i1.ChatClientService }, { token: i2.ChannelService }], target: i0.ɵɵFactoryTarget.Component });
101
- MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageComponent, selector: "stream-message", inputs: { message: "message", enabledMessageActions: "enabledMessageActions", areReactionsEnabled: "areReactionsEnabled", canReactToMessage: "canReactToMessage", isLastSentMessage: "isLastSentMessage", canReceiveReadEvents: "canReceiveReadEvents" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"str-chat__message-simple str-chat__message str-chat__message--{{\n message?.type\n }} str-chat__message--{{ message?.status }} {{\n message?.text ? 'str-chat__message--has-text' : 'has-no-text'\n }}\"\n [class.str-chat__message--me]=\"isSentByCurrentUser\"\n [class.str-chat__message-simple--me]=\"isSentByCurrentUser\"\n [class.mobile-press]=\"isPressedOnMobile\"\n [class.str-chat__message--has-attachment]=\"hasAttachment\"\n [class.str-chat__message--with-reactions]=\"\n areReactionsEnabled && hasReactions\n \"\n data-testid=\"message-container\"\n>\n <ng-container *ngIf=\"!message?.deleted_at; else deletedMessage\">\n <ng-container *ngIf=\"message?.type !== 'system'; else systemMessage\">\n <ng-container\n *ngIf=\"\n isSentByCurrentUser &&\n ((isLastSentMessage && message?.status === 'received') ||\n message?.status === 'sending')\n \"\n >\n <ng-container *ngIf=\"message?.status === 'sending'; else sentStatus\">\n <ng-container *ngTemplateOutlet=\"sendingStatus\"></ng-container>\n </ng-container>\n <ng-template #sentStatus>\n <ng-container\n *ngIf=\"\n isMessageDeliveredAndRead && canReceiveReadEvents;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <stream-avatar\n data-testid=\"avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"message?.user?.image\"\n [name]=\"message?.user?.name || message?.user?.id\"\n ></stream-avatar>\n <div class=\"str-chat__message-inner\">\n <div\n class=\"str-chat__message-simple__actions\"\n data-testid=\"message-options\"\n *ngIf=\"areOptionsVisible\"\n >\n <div\n data-testid=\"message-actions-container\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--options\n \"\n [class.str-chat-angular__message-simple__actions__action--options--editing]=\"\n isEditing\n \"\n >\n <stream-message-actions-box\n [isOpen]=\"isActionBoxOpen\"\n [isMine]=\"isSentByCurrentUser\"\n [enabledActions]=\"enabledMessageActions\"\n [message]=\"message\"\n (displayedActionsCount)=\"visibleMessageActionsCount = $event\"\n (isEditing)=\"isEditing = $event; isActionBoxOpen = !isEditing\"\n ></stream-message-actions-box>\n <stream-icon\n *ngIf=\"visibleMessageActionsCount > 0\"\n data-testid=\"action-icon\"\n icon=\"action-icon\"\n (keyup.enter)=\"isActionBoxOpen = !isActionBoxOpen\"\n (click)=\"isActionBoxOpen = !isActionBoxOpen\"\n ></stream-icon>\n </div>\n <div\n *ngIf=\"areReactionsEnabled && canReactToMessage\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--reactions\n \"\n data-testid=\"reaction-icon\"\n (click)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n (keyup.enter)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n >\n <stream-icon icon=\"reaction-icon\"></stream-icon>\n </div>\n </div>\n <stream-message-reactions\n *ngIf=\"areReactionsEnabled\"\n [messageReactionCounts]=\"message?.reaction_counts || {}\"\n [latestReactions]=\"message?.latest_reactions || []\"\n [(isSelectorOpen)]=\"isReactionSelectorOpen\"\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n ></stream-message-reactions>\n <stream-attachment-list\n *ngIf=\"hasAttachment\"\n [attachments]=\"message!.attachments!\"\n ></stream-attachment-list>\n <div class=\"str-chat__message-text\" *ngIf=\"message?.text\">\n <div\n data-testid=\"inner-message\"\n class=\"\n str-chat__message-text-inner str-chat__message-simple-text-inner\n \"\n [class.str-chat__message-light-text-inner--has-attachment]=\"\n hasAttachment\n \"\n (click)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n (keyup.enter)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n >\n <div\n data-testid=\"client-error-message\"\n *ngIf=\"message?.type === 'error'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{ \"streamChat.Error \u00B7 Unsent\" | translate }}\n </div>\n <div\n data-testid=\"error-message\"\n *ngIf=\"message?.status === 'failed'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{\n (message?.errorStatusCode === 403\n ? \"streamChat.Message Failed \u00B7 Unauthorized\"\n : \"streamChat.Message Failed \u00B7 Click to try again\"\n ) | translate\n }}\n </div>\n <div\n (click)=\"textClicked()\"\n (keyup.enter)=\"textClicked()\"\n data-testid=\"text\"\n [innerHTML]=\"\n message?.html || message?.text\n | highlightMentions: message?.mentioned_users\n \"\n ></div>\n </div>\n </div>\n <div class=\"str-chat__message-data str-chat__message-simple-data\">\n <span\n data-testid=\"sender\"\n *ngIf=\"!isSentByCurrentUser\"\n class=\"str-chat__message-simple-name\"\n >\n {{ message?.user?.name ? message?.user?.name : message?.user?.id }}\n </span>\n <span data-testid=\"date\" class=\"str-chat__message-simple-timestamp\">\n {{ parsedDate }}\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #sendingStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"sending-indicator\">\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n <stream-loading-indicator\n data-testid=\"loading-indicator\"\n ></stream-loading-indicator>\n </span>\n</ng-template>\n<ng-template #readStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"read-indicator\">\n <div class=\"str-chat__tooltip\" data-testid=\"read-by-tooltip\">\n {{ readByText }}\n </div>\n <stream-avatar\n class=\"str-chat-angular__avatar-host\"\n data-test-id=\"last-read-user-avatar\"\n [size]=\"15\"\n [imageUrl]=\"lastReadUser?.image\"\n [name]=\"lastReadUser?.name || lastReadUser?.id\"\n ></stream-avatar>\n <span\n data-test-id=\"read-by-length\"\n *ngIf=\"isReadByMultipleUsers\"\n class=\"str-chat__message-simple-status-number\"\n >\n {{ (message?.readBy)!.length }}\n </span>\n </span>\n</ng-template>\n<ng-template #deliveredStatus>\n <span\n class=\"str-chat__message-simple-status\"\n data-testid=\"delivered-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n <stream-icon\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon>\n </span>\n</ng-template>\n\n<ng-template #deletedMessage>\n <div data-testid=\"message-deleted-component\">\n <div class=\"str-chat__message--deleted-inner\" translate>\n streamChat.This message was deleted...\n </div>\n </div>\n</ng-template>\n\n<ng-template #systemMessage>\n <div data-testid=\"system-message\" class=\"str-chat__message--system\">\n <div class=\"str-chat__message--system__text\">\n <div class=\"str-chat__message--system__line\"></div>\n <p>{{ message?.text }}</p>\n <div class=\"str-chat__message--system__line\"></div>\n </div>\n <div class=\"str-chat__message--system__date\">\n {{ parsedDate }}\n </div>\n </div>\n</ng-template>\n", components: [{ type: i3.AvatarComponent, selector: "stream-avatar", inputs: ["name", "imageUrl", "size"] }, { type: i4.MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: ["isOpen", "isMine", "message", "enabledActions"], outputs: ["displayedActionsCount", "isEditing"] }, { type: i5.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i6.MessageReactionsComponent, selector: "stream-message-reactions", inputs: ["messageId", "messageReactionCounts", "isSelectorOpen", "latestReactions", "ownReactions"], outputs: ["isSelectorOpenChange"] }, { type: i7.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["attachments"] }, { type: i8.LoadingIndicatorComponent, selector: "stream-loading-indicator", inputs: ["size", "color"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i10.TranslatePipe, "highlightMentions": i11.HighlightMentionsPipe } });
144
+ MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageComponent, selector: "stream-message", inputs: { messageInputTemplate: "messageInputTemplate", mentionTemplate: "mentionTemplate", message: "message", enabledMessageActions: "enabledMessageActions", areReactionsEnabled: "areReactionsEnabled", canReactToMessage: "canReactToMessage", isLastSentMessage: "isLastSentMessage", canReceiveReadEvents: "canReceiveReadEvents" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #container\n class=\"str-chat__message-simple str-chat__message str-chat__message--{{\n message?.type\n }} str-chat__message--{{ message?.status }} {{\n message?.text ? 'str-chat__message--has-text' : 'has-no-text'\n }}\"\n [class.str-chat__message--me]=\"isSentByCurrentUser\"\n [class.str-chat__message-simple--me]=\"isSentByCurrentUser\"\n [class.mobile-press]=\"isPressedOnMobile\"\n [class.str-chat__message--has-attachment]=\"hasAttachment\"\n [class.str-chat__message--with-reactions]=\"\n areReactionsEnabled && hasReactions\n \"\n data-testid=\"message-container\"\n>\n <ng-container *ngIf=\"!message?.deleted_at; else deletedMessage\">\n <ng-container *ngIf=\"message?.type !== 'system'; else systemMessage\">\n <ng-container\n *ngIf=\"\n isSentByCurrentUser &&\n ((isLastSentMessage && message?.status === 'received') ||\n message?.status === 'sending')\n \"\n >\n <ng-container *ngIf=\"message?.status === 'sending'; else sentStatus\">\n <ng-container *ngTemplateOutlet=\"sendingStatus\"></ng-container>\n </ng-container>\n <ng-template #sentStatus>\n <ng-container\n *ngIf=\"\n isMessageDeliveredAndRead && canReceiveReadEvents;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <stream-avatar\n data-testid=\"avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"message?.user?.image\"\n [name]=\"message?.user?.name || message?.user?.id\"\n ></stream-avatar>\n <div class=\"str-chat__message-inner\">\n <div\n class=\"str-chat__message-simple__actions\"\n data-testid=\"message-options\"\n *ngIf=\"areOptionsVisible\"\n >\n <div\n data-testid=\"message-actions-container\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--options\n \"\n [class.str-chat-angular__message-simple__actions__action--options--editing]=\"\n isEditing\n \"\n >\n <stream-message-actions-box\n [isOpen]=\"isActionBoxOpen\"\n [isMine]=\"isSentByCurrentUser\"\n [enabledActions]=\"enabledMessageActions\"\n [message]=\"message\"\n (displayedActionsCount)=\"visibleMessageActionsCount = $event\"\n (isEditing)=\"isEditing = $event; isActionBoxOpen = !isEditing\"\n [messageInputTemplate]=\"messageInputTemplate\"\n ></stream-message-actions-box>\n <stream-icon\n *ngIf=\"visibleMessageActionsCount > 0\"\n data-testid=\"action-icon\"\n icon=\"action-icon\"\n (keyup.enter)=\"isActionBoxOpen = !isActionBoxOpen\"\n (click)=\"isActionBoxOpen = !isActionBoxOpen\"\n ></stream-icon>\n </div>\n <div\n *ngIf=\"areReactionsEnabled && canReactToMessage\"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--reactions\n \"\n data-testid=\"reaction-icon\"\n (click)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n (keyup.enter)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n >\n <stream-icon icon=\"reaction-icon\"></stream-icon>\n </div>\n </div>\n <stream-message-reactions\n *ngIf=\"areReactionsEnabled\"\n [messageReactionCounts]=\"message?.reaction_counts || {}\"\n [latestReactions]=\"message?.latest_reactions || []\"\n [(isSelectorOpen)]=\"isReactionSelectorOpen\"\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n ></stream-message-reactions>\n <stream-attachment-list\n *ngIf=\"hasAttachment\"\n [attachments]=\"message!.attachments!\"\n ></stream-attachment-list>\n <div class=\"str-chat__message-text\" *ngIf=\"message?.text\">\n <div\n data-testid=\"inner-message\"\n class=\"\n str-chat__message-text-inner str-chat__message-simple-text-inner\n \"\n [class.str-chat__message-light-text-inner--has-attachment]=\"\n hasAttachment\n \"\n (click)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n (keyup.enter)=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n ? resendMessage()\n : undefined\n \"\n >\n <div\n data-testid=\"client-error-message\"\n *ngIf=\"message?.type === 'error'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{ \"streamChat.Error \u00B7 Unsent\" | translate }}\n </div>\n <div\n data-testid=\"error-message\"\n *ngIf=\"message?.status === 'failed'\"\n class=\"str-chat__simple-message--error-message\"\n >\n {{\n (message?.errorStatusCode === 403\n ? \"streamChat.Message Failed \u00B7 Unauthorized\"\n : \"streamChat.Message Failed \u00B7 Click to try again\"\n ) | translate\n }}\n </div>\n <div\n (click)=\"textClicked()\"\n (keyup.enter)=\"textClicked()\"\n data-testid=\"text\"\n >\n <p>\n <!-- eslint-disable-next-line @angular-eslint/template/use-track-by-function -->\n <ng-container *ngFor=\"let part of messageTextParts\">\n <span\n *ngIf=\"part.type === 'text'; else mention\"\n [innerHTML]=\"part.content\"\n ></span>\n <ng-template #mention>\n <ng-container *ngIf=\"mentionTemplate; else defaultMention\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionTemplate;\n context: { user: part.user! }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultMention>\n <b>{{ part.content }}</b>\n </ng-template>\n </ng-template>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"str-chat__message-data str-chat__message-simple-data\">\n <span\n data-testid=\"sender\"\n *ngIf=\"!isSentByCurrentUser\"\n class=\"str-chat__message-simple-name\"\n >\n {{ message?.user?.name ? message?.user?.name : message?.user?.id }}\n </span>\n <span data-testid=\"date\" class=\"str-chat__message-simple-timestamp\">\n {{ parsedDate }}\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #sendingStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"sending-indicator\">\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n <stream-loading-indicator\n data-testid=\"loading-indicator\"\n ></stream-loading-indicator>\n </span>\n</ng-template>\n<ng-template #readStatus>\n <span class=\"str-chat__message-simple-status\" data-testid=\"read-indicator\">\n <div class=\"str-chat__tooltip\" data-testid=\"read-by-tooltip\">\n {{ readByText }}\n </div>\n <stream-avatar\n class=\"str-chat-angular__avatar-host\"\n data-test-id=\"last-read-user-avatar\"\n [size]=\"15\"\n [imageUrl]=\"lastReadUser?.image\"\n [name]=\"lastReadUser?.name || lastReadUser?.id\"\n ></stream-avatar>\n <span\n data-test-id=\"read-by-length\"\n *ngIf=\"isReadByMultipleUsers\"\n class=\"str-chat__message-simple-status-number\"\n >\n {{ (message?.readBy)!.length }}\n </span>\n </span>\n</ng-template>\n<ng-template #deliveredStatus>\n <span\n class=\"str-chat__message-simple-status\"\n data-testid=\"delivered-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n <stream-icon\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon>\n </span>\n</ng-template>\n\n<ng-template #deletedMessage>\n <div data-testid=\"message-deleted-component\">\n <div class=\"str-chat__message--deleted-inner\" translate>\n streamChat.This message was deleted...\n </div>\n </div>\n</ng-template>\n\n<ng-template #systemMessage>\n <div data-testid=\"system-message\" class=\"str-chat__message--system\">\n <div class=\"str-chat__message--system__text\">\n <div class=\"str-chat__message--system__line\"></div>\n <p>{{ message?.text }}</p>\n <div class=\"str-chat__message--system__line\"></div>\n </div>\n <div class=\"str-chat__message--system__date\">\n {{ parsedDate }}\n </div>\n </div>\n</ng-template>\n", components: [{ type: i3.AvatarComponent, selector: "stream-avatar", inputs: ["name", "imageUrl", "size"] }, { type: i4.MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: ["messageInputTemplate", "isOpen", "isMine", "message", "enabledActions"], outputs: ["displayedActionsCount", "isEditing"] }, { type: i5.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i6.MessageReactionsComponent, selector: "stream-message-reactions", inputs: ["messageId", "messageReactionCounts", "isSelectorOpen", "latestReactions", "ownReactions"], outputs: ["isSelectorOpenChange"] }, { type: i7.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["attachments"] }, { type: i8.LoadingIndicatorComponent, selector: "stream-loading-indicator", inputs: ["size", "color"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i10.TranslatePipe } });
102
145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageComponent, decorators: [{
103
146
  type: Component,
104
147
  args: [{
@@ -106,7 +149,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
106
149
  templateUrl: './message.component.html',
107
150
  styles: [],
108
151
  }]
109
- }], ctorParameters: function () { return [{ type: i1.ChatClientService }, { type: i2.ChannelService }]; }, propDecorators: { message: [{
152
+ }], ctorParameters: function () { return [{ type: i1.ChatClientService }, { type: i2.ChannelService }]; }, propDecorators: { messageInputTemplate: [{
153
+ type: Input
154
+ }], mentionTemplate: [{
155
+ type: Input
156
+ }], message: [{
110
157
  type: Input
111
158
  }], enabledMessageActions: [{
112
159
  type: Input
@@ -122,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
122
169
  type: ViewChild,
123
170
  args: ['container']
124
171
  }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sZ0JBQWdCO0lBaUIzQixZQUNVLGlCQUFvQyxFQUNwQyxjQUE4QjtRQUQ5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCL0IsMEJBQXFCLEdBQXFCLEVBQUUsQ0FBQztRQU10RCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0Isc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLCtCQUEwQixHQUFHLENBQUMsQ0FBQztRQVU3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJLG1CQUFtQjs7UUFDckIsT0FBTyxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxJQUFJLDBDQUFFLEVBQUUsT0FBSyxNQUFBLElBQUksQ0FBQyxJQUFJ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aUIsRUFBRTtZQUMxQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7O1lBQ3BDLElBQUksQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBYyxDQUFDLENBQUEsRUFBRTtnQkFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztnQkFDL0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQzthQUNuRDtRQUNILENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakQsQ0FBQzs7NkdBekdVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLHdaQ2Y3Qiw0aVJBMk9BOzJGRDVOYSxnQkFBZ0I7a0JBTDVCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7cUlBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBTzBCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlclJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldERldmljZVdpZHRoIH0gZnJvbSAnLi4vZGV2aWNlLXdpZHRoJztcbmltcG9ydCB7IE1lc3NhZ2VBY3Rpb25zIH0gZnJvbSAnLi4vbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWZhdWx0VXNlclR5cGUsIFN0cmVhbU1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuL3BhcnNlLWRhdGUnO1xuaW1wb3J0IHsgZ2V0UmVhZEJ5VGV4dCB9IGZyb20gJy4vcmVhZC1ieS10ZXh0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VDb21wb25lbnQge1xuICBASW5wdXQoKSBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IE1lc3NhZ2VBY3Rpb25zW10gPSBbXTtcbiAgQElucHV0KCkgYXJlUmVhY3Rpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY2FuUmVhY3RUb01lc3NhZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGlzTGFzdFNlbnRNZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBjYW5SZWNlaXZlUmVhZEV2ZW50czogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNFZGl0aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0FjdGlvbkJveE9wZW4gPSBmYWxzZTtcbiAgaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9IGZhbHNlO1xuICBpc1ByZXNzZWRPbk1vYmlsZSA9IGZhbHNlO1xuICB2aXNpYmxlTWVzc2FnZUFjdGlvbnNDb3VudCA9IDA7XG4gIHByaXZhdGUgdXNlcjogVXNlclJlc3BvbnNlPERlZmF1bHRVc2VyVHlwZT4gfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHByaXZhdGUgY29udGFpbmVyOlxuICAgIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgICB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZVxuICApIHtcbiAgICB0aGlzLnVzZXIgPSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQudXNlcjtcbiAgfVxuXG4gIGdldCBpc1NlbnRCeUN1cnJlbnRVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2U/LnVzZXI/LmlkID09PSB0aGlzLnVzZXI/LmlkO1xuICB9XG5cbiAgZ2V0IHJlYWRCeVRleHQoKSB7XG4gICAgcmV0dXJuIGdldFJlYWRCeVRleHQodGhpcy5tZXNzYWdlIS5yZWFkQnkpO1xuICB9XG5cbiAgZ2V0IGxhc3RSZWFkVXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlPy5yZWFkQnkuZmlsdGVyKCh1KSA9PiB1LmlkICE9PSB0aGlzLnVzZXI/LmlkKVswXTtcbiAgfVxuXG4gIGdldCBpc09ubHlSZWFkQnlNZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IGlzUmVhZEJ5TXVsdGlwbGVVc2VycygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBpc01lc3NhZ2VEZWxpdmVyZWRBbmRSZWFkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1lc3NhZ2UgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBnZXQgcGFyc2VkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZSB8fCAhdGhpcy5tZXNzYWdlPy5jcmVhdGVkX2F0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBwYXJzZURhdGUodGhpcy5tZXNzYWdlLmNyZWF0ZWRfYXQpO1xuICB9XG5cbiAgZ2V0IGFyZU9wdGlvbnNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhKFxuICAgICAgIXRoaXMubWVzc2FnZS50eXBlIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2Vycm9yJyB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnR5cGUgPT09ICdzeXN0ZW0nIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2VwaGVtZXJhbCcgfHxcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdmYWlsZWQnIHx8XG4gICAgICB0aGlzLm1lc3NhZ2Uuc3RhdHVzID09PSAnc2VuZGluZydcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0F0dGFjaG1lbnQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5tZXNzYWdlPy5hdHRhY2htZW50cyAmJiAhIXRoaXMubWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGg7XG4gIH1cblxuICBnZXQgaGFzUmVhY3Rpb25zKCkge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMubWVzc2FnZT8ucmVhY3Rpb25fY291bnRzICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLm1lc3NhZ2UucmVhY3Rpb25fY291bnRzKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIHJlc2VuZE1lc3NhZ2UoKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnJlc2VuZE1lc3NhZ2UodGhpcy5tZXNzYWdlISk7XG4gIH1cblxuICB0ZXh0Q2xpY2tlZCgpIHtcbiAgICBpZiAoZ2V0RGV2aWNlV2lkdGgoKS5kZXZpY2UgIT09ICdtb2JpbGUnKSB7XG4gICAgICB0aGlzLmlzUHJlc3NlZE9uTW9iaWxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUHJlc3NlZE9uTW9iaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUgPSB0cnVlO1xuICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgIHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUgPSBmYWxzZTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50SGFuZGxlcik7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2NvbnRhaW5lclxuICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZSBzdHItY2hhdF9fbWVzc2FnZSBzdHItY2hhdF9fbWVzc2FnZS0te3tcbiAgICBtZXNzYWdlPy50eXBlXG4gIH19IHN0ci1jaGF0X19tZXNzYWdlLS17eyBtZXNzYWdlPy5zdGF0dXMgfX0ge3tcbiAgICBtZXNzYWdlPy50ZXh0ID8gJ3N0ci1jaGF0X19tZXNzYWdlLS1oYXMtdGV4dCcgOiAnaGFzLW5vLXRleHQnXG4gIH19XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS1tZV09XCJpc1NlbnRCeUN1cnJlbnRVc2VyXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS0tbWVdPVwiaXNTZW50QnlDdXJyZW50VXNlclwiXG4gIFtjbGFzcy5tb2JpbGUtcHJlc3NdPVwiaXNQcmVzc2VkT25Nb2JpbGVcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtLWhhcy1hdHRhY2htZW50XT1cImhhc0F0dGFjaG1lbnRcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtLXdpdGgtcmVhY3Rpb25zXT1cIlxuICAgIGFyZVJlYWN0aW9uc0VuYWJsZWQgJiYgaGFzUmVhY3Rpb25zXG4gIFwiXG4gIGRhdGEtdGVzdGlkPVwibWVzc2FnZS1jb250YWluZXJcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1lc3NhZ2U/LmRlbGV0ZWRfYXQ7IGVsc2UgZGVsZXRlZE1lc3NhZ2VcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZT8udHlwZSAhPT0gJ3N5c3RlbSc7IGVsc2Ugc3lzdGVtTWVzc2FnZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzU2VudEJ5Q3VycmVudFVzZXIgJiZcbiAgICAgICAgICAoKGlzTGFzdFNlbnRNZXNzYWdlICYmIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3JlY2VpdmVkJykgfHxcbiAgICAgICAgICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3NlbmRpbmcnKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZT8uc3RhdHVzID09PSAnc2VuZGluZyc7IGVsc2Ugc2VudFN0YXR1c1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZW5kaW5nU3RhdHVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NlbnRTdGF0dXM+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaXNNZXNzYWdlRGVsaXZlcmVkQW5kUmVhZCAmJiBjYW5SZWNlaXZlUmVhZEV2ZW50cztcbiAgICAgICAgICAgICAgZWxzZSBkZWxpdmVyZWRTdGF0dXNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlYWRTdGF0dXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHN0cmVhbS1hdmF0YXJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJhdmF0YXJcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgW2ltYWdlVXJsXT1cIm1lc3NhZ2U/LnVzZXI/LmltYWdlXCJcbiAgICAgICAgW25hbWVdPVwibWVzc2FnZT8udXNlcj8ubmFtZSB8fCBtZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICA+PC9zdHJlYW0tYXZhdGFyPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWlubmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc1wiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLW9wdGlvbnNcIlxuICAgICAgICAgICpuZ0lmPVwiYXJlT3B0aW9uc1Zpc2libGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWFjdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uLS1vcHRpb25zXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb24tLW9wdGlvbnMtLWVkaXRpbmddPVwiXG4gICAgICAgICAgICAgIGlzRWRpdGluZ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3hcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJpc0FjdGlvbkJveE9wZW5cIlxuICAgICAgICAgICAgICBbaXNNaW5lXT1cImlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICAgICAgICAgICAgICBbZW5hYmxlZEFjdGlvbnNdPVwiZW5hYmxlZE1lc3NhZ2VBY3Rpb25zXCJcbiAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgIChkaXNwbGF5ZWRBY3Rpb25zQ291bnQpPVwidmlzaWJsZU1lc3NhZ2VBY3Rpb25zQ291bnQgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAoaXNFZGl0aW5nKT1cImlzRWRpdGluZyA9ICRldmVudDsgaXNBY3Rpb25Cb3hPcGVuID0gIWlzRWRpdGluZ1wiXG4gICAgICAgICAgICA+PC9zdHJlYW0tbWVzc2FnZS1hY3Rpb25zLWJveD5cbiAgICAgICAgICAgIDxzdHJlYW0taWNvblxuICAgICAgICAgICAgICAqbmdJZj1cInZpc2libGVNZXNzYWdlQWN0aW9uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICBpY29uPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNBY3Rpb25Cb3hPcGVuID0gIWlzQWN0aW9uQm94T3BlblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpc0FjdGlvbkJveE9wZW4gPSAhaXNBY3Rpb25Cb3hPcGVuXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiYXJlUmVhY3Rpb25zRW5hYmxlZCAmJiBjYW5SZWFjdFRvTWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvblxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tcmVhY3Rpb25zXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpc1JlYWN0aW9uU2VsZWN0b3JPcGVuID0gIWlzUmVhY3Rpb25TZWxlY3Rvck9wZW5cIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSAhaXNSZWFjdGlvblNlbGVjdG9yT3BlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uIGljb249XCJyZWFjdGlvbi1pY29uXCI+PC9zdHJlYW0taWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzdHJlYW0tbWVzc2FnZS1yZWFjdGlvbnNcbiAgICAgICAgICAqbmdJZj1cImFyZVJlYWN0aW9uc0VuYWJsZWRcIlxuICAgICAgICAgIFttZXNzYWdlUmVhY3Rpb25Db3VudHNdPVwibWVzc2FnZT8ucmVhY3Rpb25fY291bnRzIHx8IHt9XCJcbiAgICAgICAgICBbbGF0ZXN0UmVhY3Rpb25zXT1cIm1lc3NhZ2U/LmxhdGVzdF9yZWFjdGlvbnMgfHwgW11cIlxuICAgICAgICAgIFsoaXNTZWxlY3Rvck9wZW4pXT1cImlzUmVhY3Rpb25TZWxlY3Rvck9wZW5cIlxuICAgICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZT8uaWRcIlxuICAgICAgICAgIFtvd25SZWFjdGlvbnNdPVwibWVzc2FnZT8ub3duX3JlYWN0aW9ucyB8fCBbXVwiXG4gICAgICAgID48L3N0cmVhbS1tZXNzYWdlLXJlYWN0aW9ucz5cbiAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LWxpc3RcbiAgICAgICAgICAqbmdJZj1cImhhc0F0dGFjaG1lbnRcIlxuICAgICAgICAgIFthdHRhY2htZW50c109XCJtZXNzYWdlIS5hdHRhY2htZW50cyFcIlxuICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtdGV4dFwiICpuZ0lmPVwibWVzc2FnZT8udGV4dFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaW5uZXItbWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZXh0LWlubmVyIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10ZXh0LWlubmVyXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLWxpZ2h0LXRleHQtaW5uZXItLWhhcy1hdHRhY2htZW50XT1cIlxuICAgICAgICAgICAgICBoYXNBdHRhY2htZW50XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnICYmIG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSAhPT0gNDAzXG4gICAgICAgICAgICAgICAgPyByZXNlbmRNZXNzYWdlKClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJcbiAgICAgICAgICAgICAgbWVzc2FnZT8uc3RhdHVzID09PSAnZmFpbGVkJyAmJiBtZXNzYWdlPy5lcnJvclN0YXR1c0NvZGUgIT09IDQwM1xuICAgICAgICAgICAgICAgID8gcmVzZW5kTWVzc2FnZSgpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNsaWVudC1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlPy50eXBlID09PSAnZXJyb3InXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2ltcGxlLW1lc3NhZ2UtLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBcInN0cmVhbUNoYXQuRXJyb3IgwrcgVW5zZW50XCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2U/LnN0YXR1cyA9PT0gJ2ZhaWxlZCdcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zaW1wbGUtbWVzc2FnZS0tZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSA9PT0gNDAzXG4gICAgICAgICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5NZXNzYWdlIEZhaWxlZCDCtyBVbmF1dGhvcml6ZWRcIlxuICAgICAgICAgICAgICAgICAgOiBcInN0cmVhbUNoYXQuTWVzc2FnZSBGYWlsZWQgwrcgQ2xpY2sgdG8gdHJ5IGFnYWluXCJcbiAgICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHRDbGlja2VkKClcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwidGV4dENsaWNrZWQoKVwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgbWVzc2FnZT8uaHRtbCB8fCBtZXNzYWdlPy50ZXh0XG4gICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodE1lbnRpb25zOiBtZXNzYWdlPy5tZW50aW9uZWRfdXNlcnNcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1kYXRhIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1kYXRhXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtbmFtZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgbWVzc2FnZT8udXNlcj8ubmFtZSA/IG1lc3NhZ2U/LnVzZXI/Lm5hbWUgOiBtZXNzYWdlPy51c2VyPy5pZCB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBkYXRhLXRlc3RpZD1cImRhdGVcIiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10aW1lc3RhbXBcIj5cbiAgICAgICAgICAgIHt7IHBhcnNlZERhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2VuZGluZ1N0YXR1cz5cbiAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzXCIgZGF0YS10ZXN0aWQ9XCJzZW5kaW5nLWluZGljYXRvclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdG9vbHRpcFwiPlxuICAgICAge3sgXCJzdHJlYW1DaGF0LlNlbmRpbmcuLi5cIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0tbG9hZGluZy1pbmRpY2F0b3JcbiAgICAgIGRhdGEtdGVzdGlkPVwibG9hZGluZy1pbmRpY2F0b3JcIlxuICAgID48L3N0cmVhbS1sb2FkaW5nLWluZGljYXRvcj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVhZFN0YXR1cz5cbiAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzXCIgZGF0YS10ZXN0aWQ9XCJyZWFkLWluZGljYXRvclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdG9vbHRpcFwiIGRhdGEtdGVzdGlkPVwicmVhZC1ieS10b29sdGlwXCI+XG4gICAgICB7eyByZWFkQnlUZXh0IH19XG4gICAgPC9kaXY+XG4gICAgPHN0cmVhbS1hdmF0YXJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3RcIlxuICAgICAgZGF0YS10ZXN0LWlkPVwibGFzdC1yZWFkLXVzZXItYXZhdGFyXCJcbiAgICAgIFtzaXplXT1cIjE1XCJcbiAgICAgIFtpbWFnZVVybF09XCJsYXN0UmVhZFVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cImxhc3RSZWFkVXNlcj8ubmFtZSB8fCBsYXN0UmVhZFVzZXI/LmlkXCJcbiAgICA+PC9zdHJlYW0tYXZhdGFyPlxuICAgIDxzcGFuXG4gICAgICBkYXRhLXRlc3QtaWQ9XCJyZWFkLWJ5LWxlbmd0aFwiXG4gICAgICAqbmdJZj1cImlzUmVhZEJ5TXVsdGlwbGVVc2Vyc1wiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXMtbnVtYmVyXCJcbiAgICA+XG4gICAgICB7eyAobWVzc2FnZT8ucmVhZEJ5KSEubGVuZ3RoIH19XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWxpdmVyZWRTdGF0dXM+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzXCJcbiAgICBkYXRhLXRlc3RpZD1cImRlbGl2ZXJlZC1pbmRpY2F0b3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICB7eyBcInN0cmVhbUNoYXQuRGVsaXZlcmVkXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8c3RyZWFtLWljb25cbiAgICAgIGRhdGEtdGVzdGlkPVwiZGVsaXZlcmVkLWljb25cIlxuICAgICAgaWNvbj1cImRlbGl2ZXJlZC1pY29uXCJcbiAgICA+PC9zdHJlYW0taWNvbj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWxldGVkTWVzc2FnZT5cbiAgPGRpdiBkYXRhLXRlc3RpZD1cIm1lc3NhZ2UtZGVsZXRlZC1jb21wb25lbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLWRlbGV0ZWQtaW5uZXJcIiB0cmFuc2xhdGU+XG4gICAgICBzdHJlYW1DaGF0LlRoaXMgbWVzc2FnZSB3YXMgZGVsZXRlZC4uLlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3lzdGVtTWVzc2FnZT5cbiAgPGRpdiBkYXRhLXRlc3RpZD1cInN5c3RlbS1tZXNzYWdlXCIgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX3RleHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX19saW5lXCI+PC9kaXY+XG4gICAgICA8cD57eyBtZXNzYWdlPy50ZXh0IH19PC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX2xpbmVcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fZGF0ZVwiPlxuICAgICAge3sgcGFyc2VkRGF0ZSB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTy9DLE1BQU0sT0FBTyxnQkFBZ0I7SUF3QjNCLFlBQ1UsaUJBQW9DLEVBQ3BDLGNBQThCO1FBRDlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBdEIvQiwwQkFBcUIsR0FBcUIsRUFBRSxDQUFDO1FBTXRELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMvQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsK0JBQTBCLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLHFCQUFnQixHQUlWLEVBQUUsQ0FBQztRQVVQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjs7UUFDaEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksT0FBTyxHQUFHLENBQUEs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QyxDQUFDO0lBQ2pELENBQUM7OzZHQTNKVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQiwrZkN2QjdCLDI3U0ErUEE7MkZEeE9hLGdCQUFnQjtrQkFMNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxNQUFNLEVBQUUsRUFBRTtpQkFDWDtxSUFFVSxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFZMEIsU0FBUztzQkFBeEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXREZXZpY2VXaWR0aCB9IGZyb20gJy4uL2RldmljZS13aWR0aCc7XG5pbXBvcnQgeyBNZXNzYWdlQWN0aW9ucyB9IGZyb20gJy4uL21lc3NhZ2UtYWN0aW9ucy1ib3gvbWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmYXVsdFVzZXJUeXBlLCBTdHJlYW1NZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSAnLi9wYXJzZS1kYXRlJztcbmltcG9ydCB7IGdldFJlYWRCeVRleHQgfSBmcm9tICcuL3JlYWQtYnktdGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbWVzc2FnZUlucHV0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIG1lbnRpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBNZXNzYWdlQWN0aW9uc1tdID0gW107XG4gIEBJbnB1dCgpIGFyZVJlYWN0aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGNhblJlYWN0VG9NZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBpc0xhc3RTZW50TWVzc2FnZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY2FuUmVjZWl2ZVJlYWRFdmVudHM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNBY3Rpb25Cb3hPcGVuID0gZmFsc2U7XG4gIGlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSBmYWxzZTtcbiAgaXNQcmVzc2VkT25Nb2JpbGUgPSBmYWxzZTtcbiAgdmlzaWJsZU1lc3NhZ2VBY3Rpb25zQ291bnQgPSAwO1xuICBtZXNzYWdlVGV4dFBhcnRzOiB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIHR5cGU6ICd0ZXh0JyB8ICdtZW50aW9uJztcbiAgICB1c2VyPzogVXNlclJlc3BvbnNlO1xuICB9W10gPSBbXTtcbiAgcHJpdmF0ZSB1c2VyOiBVc2VyUmVzcG9uc2U8RGVmYXVsdFVzZXJUeXBlPiB8IHVuZGVmaW5lZDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHJpdmF0ZSBjb250YWluZXI6XG4gICAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudXNlciA9IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudC51c2VyO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy5tZXNzYWdlPy5odG1sIHx8IHRoaXMubWVzc2FnZT8udGV4dDtcbiAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJhY2tlbmQgd2lsbCB3cmFwIEhUTUwgY29udGVudCB3aXRoIDxwPjwvcD5cXG5cbiAgICAgICAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnPHA+JykpIHtcbiAgICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKCc8cD4nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRlbnQuZW5kc1dpdGgoJzwvcD5cXG4nKSkge1xuICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoJzwvcD5cXG4nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLm1lc3NhZ2UhLm1lbnRpb25lZF91c2VycyB8fFxuICAgICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMgPSBbeyBjb250ZW50LCB0eXBlOiAndGV4dCcgfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzID0gW107XG4gICAgICAgICAgbGV0IHRleHQgPSBjb250ZW50O1xuICAgICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmZvckVhY2goKHVzZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lbnRpb24gPSBgQCR7dXNlci5uYW1lIHx8IHVzZXIuaWR9YDtcbiAgICAgICAgICAgIGNvbnN0IHByZWNlZGluZ1RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0LmluZGV4T2YobWVudGlvbikpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgICBjb250ZW50OiBwcmVjZWRpbmdUZXh0LFxuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29udGVudDogbWVudGlvbixcbiAgICAgICAgICAgICAgdHlwZTogJ21lbnRpb24nLFxuICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHByZWNlZGluZ1RleHQgKyBtZW50aW9uLCAnJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cy5wdXNoKHsgY29udGVudDogdGV4dCwgdHlwZTogJ3RleHQnIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpc1NlbnRCeUN1cnJlbnRVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2U/LnVzZXI/LmlkID09PSB0aGlzLnVzZXI/LmlkO1xuICB9XG5cbiAgZ2V0IHJlYWRCeVRleHQoKSB7XG4gICAgcmV0dXJuIGdldFJlYWRCeVRleHQodGhpcy5tZXNzYWdlIS5yZWFkQnkpO1xuICB9XG5cbiAgZ2V0IGxhc3RSZWFkVXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlPy5yZWFkQnkuZmlsdGVyKCh1KSA9PiB1LmlkICE9PSB0aGlzLnVzZXI/LmlkKVswXTtcbiAgfVxuXG4gIGdldCBpc09ubHlSZWFkQnlNZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IGlzUmVhZEJ5TXVsdGlwbGVVc2VycygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBpc01lc3NhZ2VEZWxpdmVyZWRBbmRSZWFkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1lc3NhZ2UgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBnZXQgcGFyc2VkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZSB8fCAhdGhpcy5tZXNzYWdlPy5jcmVhdGVkX2F0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBwYXJzZURhdGUodGhpcy5tZXNzYWdlLmNyZWF0ZWRfYXQpO1xuICB9XG5cbiAgZ2V0IGFyZU9wdGlvbnNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhKFxuICAgICAgIXRoaXMubWVzc2FnZS50eXBlIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2Vycm9yJyB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnR5cGUgPT09ICdzeXN0ZW0nIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2VwaGVtZXJhbCcgfHxcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdmYWlsZWQnIHx8XG4gICAgICB0aGlzLm1lc3NhZ2Uuc3RhdHVzID09PSAnc2VuZGluZydcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0F0dGFjaG1lbnQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5tZXNzYWdlPy5hdHRhY2htZW50cyAmJiAhIXRoaXMubWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGg7XG4gIH1cblxuICBnZXQgaGFzUmVhY3Rpb25zKCkge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMubWVzc2FnZT8ucmVhY3Rpb25fY291bnRzICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLm1lc3NhZ2UucmVhY3Rpb25fY291bnRzKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIHJlc2VuZE1lc3NhZ2UoKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnJlc2VuZE1lc3NhZ2UodGhpcy5tZXNzYWdlISk7XG4gIH1cblxuICB0ZXh0Q2xpY2tlZCgpIHtcbiAgICBpZiAoZ2V0RGV2aWNlV2lkdGgoKS5kZXZpY2UgIT09ICdtb2JpbGUnKSB7XG4gICAgICB0aGlzLmlzUHJlc3NlZE9uTW9iaWxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUHJlc3NlZE9uTW9iaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUgPSB0cnVlO1xuICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgIHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUgPSBmYWxzZTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50SGFuZGxlcik7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2NvbnRhaW5lclxuICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZSBzdHItY2hhdF9fbWVzc2FnZSBzdHItY2hhdF9fbWVzc2FnZS0te3tcbiAgICBtZXNzYWdlPy50eXBlXG4gIH19IHN0ci1jaGF0X19tZXNzYWdlLS17eyBtZXNzYWdlPy5zdGF0dXMgfX0ge3tcbiAgICBtZXNzYWdlPy50ZXh0ID8gJ3N0ci1jaGF0X19tZXNzYWdlLS1oYXMtdGV4dCcgOiAnaGFzLW5vLXRleHQnXG4gIH19XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS1tZV09XCJpc1NlbnRCeUN1cnJlbnRVc2VyXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS0tbWVdPVwiaXNTZW50QnlDdXJyZW50VXNlclwiXG4gIFtjbGFzcy5tb2JpbGUtcHJlc3NdPVwiaXNQcmVzc2VkT25Nb2JpbGVcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtLWhhcy1hdHRhY2htZW50XT1cImhhc0F0dGFjaG1lbnRcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtLXdpdGgtcmVhY3Rpb25zXT1cIlxuICAgIGFyZVJlYWN0aW9uc0VuYWJsZWQgJiYgaGFzUmVhY3Rpb25zXG4gIFwiXG4gIGRhdGEtdGVzdGlkPVwibWVzc2FnZS1jb250YWluZXJcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1lc3NhZ2U/LmRlbGV0ZWRfYXQ7IGVsc2UgZGVsZXRlZE1lc3NhZ2VcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZT8udHlwZSAhPT0gJ3N5c3RlbSc7IGVsc2Ugc3lzdGVtTWVzc2FnZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzU2VudEJ5Q3VycmVudFVzZXIgJiZcbiAgICAgICAgICAoKGlzTGFzdFNlbnRNZXNzYWdlICYmIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3JlY2VpdmVkJykgfHxcbiAgICAgICAgICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3NlbmRpbmcnKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZT8uc3RhdHVzID09PSAnc2VuZGluZyc7IGVsc2Ugc2VudFN0YXR1c1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZW5kaW5nU3RhdHVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NlbnRTdGF0dXM+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaXNNZXNzYWdlRGVsaXZlcmVkQW5kUmVhZCAmJiBjYW5SZWNlaXZlUmVhZEV2ZW50cztcbiAgICAgICAgICAgICAgZWxzZSBkZWxpdmVyZWRTdGF0dXNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlYWRTdGF0dXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHN0cmVhbS1hdmF0YXJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJhdmF0YXJcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgW2ltYWdlVXJsXT1cIm1lc3NhZ2U/LnVzZXI/LmltYWdlXCJcbiAgICAgICAgW25hbWVdPVwibWVzc2FnZT8udXNlcj8ubmFtZSB8fCBtZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICA+PC9zdHJlYW0tYXZhdGFyPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWlubmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc1wiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLW9wdGlvbnNcIlxuICAgICAgICAgICpuZ0lmPVwiYXJlT3B0aW9uc1Zpc2libGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWFjdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uLS1vcHRpb25zXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb24tLW9wdGlvbnMtLWVkaXRpbmddPVwiXG4gICAgICAgICAgICAgIGlzRWRpdGluZ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3hcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJpc0FjdGlvbkJveE9wZW5cIlxuICAgICAgICAgICAgICBbaXNNaW5lXT1cImlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICAgICAgICAgICAgICBbZW5hYmxlZEFjdGlvbnNdPVwiZW5hYmxlZE1lc3NhZ2VBY3Rpb25zXCJcbiAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgIChkaXNwbGF5ZWRBY3Rpb25zQ291bnQpPVwidmlzaWJsZU1lc3NhZ2VBY3Rpb25zQ291bnQgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAoaXNFZGl0aW5nKT1cImlzRWRpdGluZyA9ICRldmVudDsgaXNBY3Rpb25Cb3hPcGVuID0gIWlzRWRpdGluZ1wiXG4gICAgICAgICAgICAgIFttZXNzYWdlSW5wdXRUZW1wbGF0ZV09XCJtZXNzYWdlSW5wdXRUZW1wbGF0ZVwiXG4gICAgICAgICAgICA+PC9zdHJlYW0tbWVzc2FnZS1hY3Rpb25zLWJveD5cbiAgICAgICAgICAgIDxzdHJlYW0taWNvblxuICAgICAgICAgICAgICAqbmdJZj1cInZpc2libGVNZXNzYWdlQWN0aW9uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICBpY29uPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNBY3Rpb25Cb3hPcGVuID0gIWlzQWN0aW9uQm94T3BlblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpc0FjdGlvbkJveE9wZW4gPSAhaXNBY3Rpb25Cb3hPcGVuXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiYXJlUmVhY3Rpb25zRW5hYmxlZCAmJiBjYW5SZWFjdFRvTWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvblxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tcmVhY3Rpb25zXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpc1JlYWN0aW9uU2VsZWN0b3JPcGVuID0gIWlzUmVhY3Rpb25TZWxlY3Rvck9wZW5cIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSAhaXNSZWFjdGlvblNlbGVjdG9yT3BlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uIGljb249XCJyZWFjdGlvbi1pY29uXCI+PC9zdHJlYW0taWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzdHJlYW0tbWVzc2FnZS1yZWFjdGlvbnNcbiAgICAgICAgICAqbmdJZj1cImFyZVJlYWN0aW9uc0VuYWJsZWRcIlxuICAgICAgICAgIFttZXNzYWdlUmVhY3Rpb25Db3VudHNdPVwibWVzc2FnZT8ucmVhY3Rpb25fY291bnRzIHx8IHt9XCJcbiAgICAgICAgICBbbGF0ZXN0UmVhY3Rpb25zXT1cIm1lc3NhZ2U/LmxhdGVzdF9yZWFjdGlvbnMgfHwgW11cIlxuICAgICAgICAgIFsoaXNTZWxlY3Rvck9wZW4pXT1cImlzUmVhY3Rpb25TZWxlY3Rvck9wZW5cIlxuICAgICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZT8uaWRcIlxuICAgICAgICAgIFtvd25SZWFjdGlvbnNdPVwibWVzc2FnZT8ub3duX3JlYWN0aW9ucyB8fCBbXVwiXG4gICAgICAgID48L3N0cmVhbS1tZXNzYWdlLXJlYWN0aW9ucz5cbiAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LWxpc3RcbiAgICAgICAgICAqbmdJZj1cImhhc0F0dGFjaG1lbnRcIlxuICAgICAgICAgIFthdHRhY2htZW50c109XCJtZXNzYWdlIS5hdHRhY2htZW50cyFcIlxuICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtdGV4dFwiICpuZ0lmPVwibWVzc2FnZT8udGV4dFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaW5uZXItbWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZXh0LWlubmVyIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10ZXh0LWlubmVyXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLWxpZ2h0LXRleHQtaW5uZXItLWhhcy1hdHRhY2htZW50XT1cIlxuICAgICAgICAgICAgICBoYXNBdHRhY2htZW50XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnICYmIG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSAhPT0gNDAzXG4gICAgICAgICAgICAgICAgPyByZXNlbmRNZXNzYWdlKClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJcbiAgICAgICAgICAgICAgbWVzc2FnZT8uc3RhdHVzID09PSAnZmFpbGVkJyAmJiBtZXNzYWdlPy5lcnJvclN0YXR1c0NvZGUgIT09IDQwM1xuICAgICAgICAgICAgICAgID8gcmVzZW5kTWVzc2FnZSgpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNsaWVudC1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlPy50eXBlID09PSAnZXJyb3InXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2ltcGxlLW1lc3NhZ2UtLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBcInN0cmVhbUNoYXQuRXJyb3IgwrcgVW5zZW50XCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2U/LnN0YXR1cyA9PT0gJ2ZhaWxlZCdcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zaW1wbGUtbWVzc2FnZS0tZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSA9PT0gNDAzXG4gICAgICAgICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5NZXNzYWdlIEZhaWxlZCDCtyBVbmF1dGhvcml6ZWRcIlxuICAgICAgICAgICAgICAgICAgOiBcInN0cmVhbUNoYXQuTWVzc2FnZSBGYWlsZWQgwrcgQ2xpY2sgdG8gdHJ5IGFnYWluXCJcbiAgICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHRDbGlja2VkKClcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwidGV4dENsaWNrZWQoKVwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidGV4dFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS91c2UtdHJhY2stYnktZnVuY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFydCBvZiBtZXNzYWdlVGV4dFBhcnRzXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhcnQudHlwZSA9PT0gJ3RleHQnOyBlbHNlIG1lbnRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInBhcnQuY29udGVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtZW50aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudGlvblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRNZW50aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudGlvblRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHVzZXI6IHBhcnQudXNlciEgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNZW50aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxiPnt7IHBhcnQuY29udGVudCB9fTwvYj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWRhdGEgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLWRhdGFcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCIhaXNTZW50QnlDdXJyZW50VXNlclwiXG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1uYW1lXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBtZXNzYWdlPy51c2VyPy5uYW1lID8gbWVzc2FnZT8udXNlcj8ubmFtZSA6IG1lc3NhZ2U/LnVzZXI/LmlkIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGRhdGEtdGVzdGlkPVwiZGF0ZVwiIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXRpbWVzdGFtcFwiPlxuICAgICAgICAgICAge3sgcGFyc2VkRGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzZW5kaW5nU3RhdHVzPlxuICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXNcIiBkYXRhLXRlc3RpZD1cInNlbmRpbmctaW5kaWNhdG9yXCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICB7eyBcInN0cmVhbUNoYXQuU2VuZGluZy4uLlwiIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPHN0cmVhbS1sb2FkaW5nLWluZGljYXRvclxuICAgICAgZGF0YS10ZXN0aWQ9XCJsb2FkaW5nLWluZGljYXRvclwiXG4gICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZWFkU3RhdHVzPlxuICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXNcIiBkYXRhLXRlc3RpZD1cInJlYWQtaW5kaWNhdG9yXCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCIgZGF0YS10ZXN0aWQ9XCJyZWFkLWJ5LXRvb2x0aXBcIj5cbiAgICAgIHt7IHJlYWRCeVRleHQgfX1cbiAgICA8L2Rpdj5cbiAgICA8c3RyZWFtLWF2YXRhclxuICAgICAgY2xhc3M9XCJzdHItY2hhdC1hbmd1bGFyX19hdmF0YXItaG9zdFwiXG4gICAgICBkYXRhLXRlc3QtaWQ9XCJsYXN0LXJlYWQtdXNlci1hdmF0YXJcIlxuICAgICAgW3NpemVdPVwiMTVcIlxuICAgICAgW2ltYWdlVXJsXT1cImxhc3RSZWFkVXNlcj8uaW1hZ2VcIlxuICAgICAgW25hbWVdPVwibGFzdFJlYWRVc2VyPy5uYW1lIHx8IGxhc3RSZWFkVXNlcj8uaWRcIlxuICAgID48L3N0cmVhbS1hdmF0YXI+XG4gICAgPHNwYW5cbiAgICAgIGRhdGEtdGVzdC1pZD1cInJlYWQtYnktbGVuZ3RoXCJcbiAgICAgICpuZ0lmPVwiaXNSZWFkQnlNdWx0aXBsZVVzZXJzXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cy1udW1iZXJcIlxuICAgID5cbiAgICAgIHt7IChtZXNzYWdlPy5yZWFkQnkpIS5sZW5ndGggfX1cbiAgICA8L3NwYW4+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlbGl2ZXJlZFN0YXR1cz5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXNcIlxuICAgIGRhdGEtdGVzdGlkPVwiZGVsaXZlcmVkLWluZGljYXRvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3Rvb2x0aXBcIj5cbiAgICAgIHt7IFwic3RyZWFtQ2hhdC5EZWxpdmVyZWRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0taWNvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJkZWxpdmVyZWQtaWNvblwiXG4gICAgICBpY29uPVwiZGVsaXZlcmVkLWljb25cIlxuICAgID48L3N0cmVhbS1pY29uPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlbGV0ZWRNZXNzYWdlPlxuICA8ZGl2IGRhdGEtdGVzdGlkPVwibWVzc2FnZS1kZWxldGVkLWNvbXBvbmVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tZGVsZXRlZC1pbm5lclwiIHRyYW5zbGF0ZT5cbiAgICAgIHN0cmVhbUNoYXQuVGhpcyBtZXNzYWdlIHdhcyBkZWxldGVkLi4uXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzeXN0ZW1NZXNzYWdlPlxuICA8ZGl2IGRhdGEtdGVzdGlkPVwic3lzdGVtLW1lc3NhZ2VcIiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fdGV4dFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX2xpbmVcIj48L2Rpdj5cbiAgICAgIDxwPnt7IG1lc3NhZ2U/LnRleHQgfX08L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fbGluZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX19kYXRlXCI+XG4gICAgICB7eyBwYXJzZWREYXRlIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -21,6 +21,10 @@ export class MessageActionsBoxComponent {
21
21
  this.displayedActionsCount = new EventEmitter();
22
22
  this.isEditing = new EventEmitter();
23
23
  this.isEditModalOpen = false;
24
+ this.modalClosed = () => {
25
+ this.isEditModalOpen = false;
26
+ this.isEditing.emit(false);
27
+ };
24
28
  }
25
29
  ngOnChanges(changes) {
26
30
  if (changes.isMine || changes.enabledActions) {
@@ -94,10 +98,6 @@ export class MessageActionsBoxComponent {
94
98
  var _a;
95
99
  (_a = this.messageInput) === null || _a === void 0 ? void 0 : _a.messageSent();
96
100
  }
97
- modalClosed() {
98
- this.isEditModalOpen = false;
99
- this.isEditing.emit(false);
100
- }
101
101
  deleteClicked() {
102
102
  return __awaiter(this, void 0, void 0, function* () {
103
103
  try {
@@ -110,7 +110,7 @@ export class MessageActionsBoxComponent {
110
110
  }
111
111
  }
112
112
  MessageActionsBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageActionsBoxComponent, deps: [{ token: i1.ChatClientService }, { token: i2.NotificationService }, { token: i3.ChannelService }], target: i0.ɵɵFactoryTarget.Component });
113
- MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: MessageInputComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box\"\n [class.str-chat__message-actions-box--open]=\"isOpen\"\n [class.str-chat__message-actions-box--mine]=\"isMine\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <button\n data-testid=\"quote-action\"\n *ngIf=\"isQuoteVisible\"\n (click)=\"quoteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Reply\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"pin-action\"\n *ngIf=\"isPinVisible\"\n (click)=\"pinClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{\n (message?.pinned ? \"streamChat.Unpin\" : \"streamChat.Pin\") | translate\n }}\n </li>\n </button>\n <button\n data-testid=\"flag-action\"\n *ngIf=\"isFlagVisible\"\n (click)=\"flagClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Flag\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"mute-action\"\n *ngIf=\"isMuteVisible\"\n (click)=\"muteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Mute\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"edit-action\"\n *ngIf=\"isEditVisible\"\n (click)=\"editClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Edit Message\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"delete-action\"\n *ngIf=\"isDeleteVisible\"\n (click)=\"deleteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Delete\" | translate }}\n </li>\n </button>\n </ul>\n</div>\n\n<stream-modal\n [isOpen]=\"isEditModalOpen\"\n (isOpenChange)=\"\n isEditModalOpen = $event; isEditModalOpen ? '' : modalClosed()\n \"\n>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <stream-message-input\n [message]=\"message\"\n (messageUpdate)=\"modalClosed()\"\n ></stream-message-input>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__message-team-form-footer\">\n <div></div>\n <div>\n <button translate data-testid=\"cancel-button\" (click)=\"modalClosed()\">\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</stream-modal>\n", components: [{ type: i4.ModalComponent, selector: "stream-modal", inputs: ["isOpen"], outputs: ["isOpenChange"] }, { type: i5.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mentionAutocompleteItemTemplate", "acceptedFileTypes", "isMultipleFileUploadEnabled", "message"], outputs: ["messageUpdate"] }, { type: i6.NotificationListComponent, selector: "stream-notification-list" }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i8.TranslatePipe } });
113
+ MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { messageInputTemplate: "messageInputTemplate", isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: MessageInputComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box\"\n [class.str-chat__message-actions-box--open]=\"isOpen\"\n [class.str-chat__message-actions-box--mine]=\"isMine\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <button\n data-testid=\"quote-action\"\n *ngIf=\"isQuoteVisible\"\n (click)=\"quoteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Reply\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"pin-action\"\n *ngIf=\"isPinVisible\"\n (click)=\"pinClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{\n (message?.pinned ? \"streamChat.Unpin\" : \"streamChat.Pin\") | translate\n }}\n </li>\n </button>\n <button\n data-testid=\"flag-action\"\n *ngIf=\"isFlagVisible\"\n (click)=\"flagClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Flag\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"mute-action\"\n *ngIf=\"isMuteVisible\"\n (click)=\"muteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Mute\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"edit-action\"\n *ngIf=\"isEditVisible\"\n (click)=\"editClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Edit Message\" | translate }}\n </li>\n </button>\n <button\n data-testid=\"delete-action\"\n *ngIf=\"isDeleteVisible\"\n (click)=\"deleteClicked()\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ \"streamChat.Delete\" | translate }}\n </li>\n </button>\n </ul>\n</div>\n\n<stream-modal\n [isOpen]=\"isEditModalOpen\"\n (isOpenChange)=\"\n isEditModalOpen = $event; isEditModalOpen ? '' : modalClosed()\n \"\n>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-container *ngIf=\"messageInputTemplate; else defaultInput\">\n <ng-container\n *ngTemplateOutlet=\"\n messageInputTemplate;\n context: {\n message: message,\n messageUpdateHandler: modalClosed\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultInput>\n <stream-message-input\n [message]=\"message\"\n (messageUpdate)=\"modalClosed()\"\n ></stream-message-input>\n </ng-template>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__message-team-form-footer\">\n <div></div>\n <div>\n <button translate data-testid=\"cancel-button\" (click)=\"modalClosed()\">\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</stream-modal>\n", components: [{ type: i4.ModalComponent, selector: "stream-modal", inputs: ["isOpen"], outputs: ["isOpenChange"] }, { type: i5.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mentionAutocompleteItemTemplate", "acceptedFileTypes", "isMultipleFileUploadEnabled", "message"], outputs: ["messageUpdate"] }, { type: i6.NotificationListComponent, selector: "stream-notification-list" }], 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"] }], pipes: { "translate": i8.TranslatePipe } });
114
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageActionsBoxComponent, decorators: [{
115
115
  type: Component,
116
116
  args: [{
@@ -118,7 +118,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
118
118
  templateUrl: './message-actions-box.component.html',
119
119
  styles: [],
120
120
  }]
121
- }], ctorParameters: function () { return [{ type: i1.ChatClientService }, { type: i2.NotificationService }, { type: i3.ChannelService }]; }, propDecorators: { isOpen: [{
121
+ }], ctorParameters: function () { return [{ type: i1.ChatClientService }, { type: i2.NotificationService }, { type: i3.ChannelService }]; }, propDecorators: { messageInputTemplate: [{
122
+ type: Input
123
+ }], isOpen: [{
122
124
  type: Input
123
125
  }], isMine: [{
124
126
  type: Input
@@ -134,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
134
136
  type: ViewChild,
135
137
  args: [MessageInputComponent]
136
138
  }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7O0FBbUJqRixNQUFNLE9BQU8sMEJBQTBCO0lBWXJDLFlBQ1UsaUJBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxjQUE4QjtRQUY5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBZC9CLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWYsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBQzVCLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDM0Qsb0JBQWUsR0FBRyxLQUFLLENBQUM7SUFTckIsQ0FBQztJQUVKLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUM1QyxJQUFJLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hCLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFVBQVU7UUFDUixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUssV0FBVzs7WUFDZixJQUFJO2dCQUNGLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLGtEQUFrRCxFQUNsRCxTQUFTLENBQ1YsQ0FBQzthQUNIO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLG1CQUFtQixDQUFDLHdCQUF3QixDQUMvQyw4QkFBOEIsQ0FDL0IsQ0FBQzthQUNIO1FBQ0gsQ0FBQztLQUFBO0lBRUQsV0FBVztRQUNULEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUFZO1FBQ1YsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVzs7UUFDVCxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVLLGFBQWE7O1lBQ2pCLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLENBQUM7YUFDeEQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLG1DQUFtQyxDQUNwQyxDQUFDO2FBQ0g7UUFDSCxDQUFDO0tBQUE7O3VIQXpIVSwwQkFBMEI7MkdBQTFCLDBCQUEwQiwyU0FRMUIscUJBQXFCLHFFQ3RDbEMseXRGQWlHQTsyRkRuRWEsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFdBQVcsRUFBRSxzQ0FBc0M7b0JBQ25ELE1BQU0sRUFBRSxFQUFFO2lCQUNYO3VLQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ2EscUJBQXFCO3NCQUF2QyxNQUFNO2dCQUNZLFNBQVM7c0JBQTNCLE1BQU07Z0JBRW1DLFlBQVk7c0JBQXJELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBNZXNzYWdlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdHJlYW1NZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlQWN0aW9ucyA9XG4gIHwgJ2VkaXQnXG4gIHwgJ2RlbGV0ZSdcbiAgfCAnZWRpdC1hbnknXG4gIHwgJ2RlbGV0ZS1hbnknXG4gIHwgJ3BpbidcbiAgfCAncXVvdGUnXG4gIHwgJ2ZsYWcnXG4gIHwgJ211dGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1hY3Rpb25zLWJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpc09wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNNaW5lID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGVuYWJsZWRBY3Rpb25zOiBNZXNzYWdlQWN0aW9uc1tdID0gW107XG4gIEBPdXRwdXQoKSByZWFkb25seSBkaXNwbGF5ZWRBY3Rpb25zQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGlzRWRpdGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoTWVzc2FnZUlucHV0Q29tcG9uZW50KSBwcml2YXRlIG1lc3NhZ2VJbnB1dDpcbiAgICB8IE1lc3NhZ2VJbnB1dENvbXBvbmVudFxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmlzTWluZSB8fCBjaGFuZ2VzLmVuYWJsZWRBY3Rpb25zKSB7XG4gICAgICBsZXQgZGlzcGxheWVkQWN0aW9uc0NvdW50ID0gMDtcbiAgICAgIGlmICh0aGlzLmlzUXVvdGVWaXNpYmxlKSB7XG4gICAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNFZGl0VmlzaWJsZSkge1xuICAgICAgICBkaXNwbGF5ZWRBY3Rpb25zQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzRGVsZXRlVmlzaWJsZSkge1xuICAgICAgICBkaXNwbGF5ZWRBY3Rpb25zQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzTXV0ZVZpc2libGUpIHtcbiAgICAgICAgZGlzcGxheWVkQWN0aW9uc0NvdW50Kys7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ZsYWdWaXNpYmxlKSB7XG4gICAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNQaW5WaXNpYmxlKSB7XG4gICAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudCsrO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5ZWRBY3Rpb25zQ291bnQubmV4dChkaXNwbGF5ZWRBY3Rpb25zQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1F1b3RlVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdxdW90ZScpICE9PSAtMTtcbiAgfVxuXG4gIGdldCBpc0VkaXRWaXNpYmxlKCkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdlZGl0JykgIT09IC0xICYmIHRoaXMuaXNNaW5lKSB8fFxuICAgICAgdGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdlZGl0LWFueScpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBnZXQgaXNEZWxldGVWaXNpYmxlKCkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUnKSAhPT0gLTEgJiYgdGhpcy5pc01pbmUpIHx8XG4gICAgICB0aGlzLmVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2RlbGV0ZS1hbnknKSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzTXV0ZVZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignbXV0ZScpICE9PSAtMTtcbiAgfVxuXG4gIGdldCBpc0ZsYWdWaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2ZsYWcnKSAhPT0gLTEgJiYgIXRoaXMuaXNNaW5lO1xuICB9XG5cbiAgZ2V0IGlzUGluVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdwaW4nKSAhPT0gLTE7XG4gIH1cblxuICBwaW5DbGlja2VkKCkge1xuICAgIGFsZXJ0KCdGZWF0dXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGFzeW5jIGZsYWdDbGlja2VkKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmZsYWdNZXNzYWdlKHRoaXMubWVzc2FnZSEuaWQpO1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgJ3N0cmVhbUNoYXQuTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCcsXG4gICAgICAgICdzdWNjZXNzJ1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LkVycm9yIGFkZGluZyBmbGFnJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtdXRlQ2xpY2tlZCgpIHtcbiAgICBhbGVydCgnRmVhdHVyZSBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBxdW90ZUNsaWNrZWQoKSB7XG4gICAgYWxlcnQoJ0ZlYXR1cmUgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZWRpdENsaWNrZWQoKSB7XG4gICAgdGhpcy5pc0VkaXRpbmcuZW1pdCh0cnVlKTtcbiAgICB0aGlzLmlzRWRpdE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBzZW5kQ2xpY2tlZCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VJbnB1dD8ubWVzc2FnZVNlbnQoKTtcbiAgfVxuXG4gIG1vZGFsQ2xvc2VkKCkge1xuICAgIHRoaXMuaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRpbmcuZW1pdChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDbGlja2VkKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmRlbGV0ZU1lc3NhZ2UodGhpcy5tZXNzYWdlISk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LkVycm9yIGRlbGV0aW5nIG1lc3NhZ2UnXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBkYXRhLXRlc3RpZD1cImFjdGlvbi1ib3hcIlxuICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94LS1vcGVuXT1cImlzT3BlblwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWJveC0tbWluZV09XCJpc01pbmVcIlxuPlxuICA8dWwgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3RcIj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cInF1b3RlLWFjdGlvblwiXG4gICAgICAqbmdJZj1cImlzUXVvdGVWaXNpYmxlXCJcbiAgICAgIChjbGljayk9XCJxdW90ZUNsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LlJlcGx5XCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbGk+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJwaW4tYWN0aW9uXCJcbiAgICAgICpuZ0lmPVwiaXNQaW5WaXNpYmxlXCJcbiAgICAgIChjbGljayk9XCJwaW5DbGlja2VkKClcIlxuICAgID5cbiAgICAgIDxsaSBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgKG1lc3NhZ2U/LnBpbm5lZCA/IFwic3RyZWFtQ2hhdC5VbnBpblwiIDogXCJzdHJlYW1DaGF0LlBpblwiKSB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVxuICAgICAgPC9saT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cImZsYWctYWN0aW9uXCJcbiAgICAgICpuZ0lmPVwiaXNGbGFnVmlzaWJsZVwiXG4gICAgICAoY2xpY2spPVwiZmxhZ0NsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LkZsYWdcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9saT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cIm11dGUtYWN0aW9uXCJcbiAgICAgICpuZ0lmPVwiaXNNdXRlVmlzaWJsZVwiXG4gICAgICAoY2xpY2spPVwibXV0ZUNsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0Lk11dGVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9saT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cImVkaXQtYWN0aW9uXCJcbiAgICAgICpuZ0lmPVwiaXNFZGl0VmlzaWJsZVwiXG4gICAgICAoY2xpY2spPVwiZWRpdENsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LkVkaXQgTWVzc2FnZVwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xpPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwiZGVsZXRlLWFjdGlvblwiXG4gICAgICAqbmdJZj1cImlzRGVsZXRlVmlzaWJsZVwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlQ2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICA8bGkgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbVwiPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuRGVsZXRlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbGk+XG4gICAgPC9idXR0b24+XG4gIDwvdWw+XG48L2Rpdj5cblxuPHN0cmVhbS1tb2RhbFxuICBbaXNPcGVuXT1cImlzRWRpdE1vZGFsT3BlblwiXG4gIChpc09wZW5DaGFuZ2UpPVwiXG4gICAgaXNFZGl0TW9kYWxPcGVuID0gJGV2ZW50OyBpc0VkaXRNb2RhbE9wZW4gPyAnJyA6IG1vZGFsQ2xvc2VkKClcbiAgXCJcbj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2UtZm9ybVwiICpuZ0lmPVwiaXNFZGl0TW9kYWxPcGVuXCI+XG4gICAgPHN0cmVhbS1tZXNzYWdlLWlucHV0XG4gICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCJcbiAgICAgIChtZXNzYWdlVXBkYXRlKT1cIm1vZGFsQ2xvc2VkKClcIlxuICAgID48L3N0cmVhbS1tZXNzYWdlLWlucHV0PlxuICAgIDxzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+PC9zdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXRlYW0tZm9ybS1mb290ZXJcIj5cbiAgICAgIDxkaXY+PC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIHRyYW5zbGF0ZSBkYXRhLXRlc3RpZD1cImNhbmNlbC1idXR0b25cIiAoY2xpY2spPVwibW9kYWxDbG9zZWQoKVwiPlxuICAgICAgICAgIHN0cmVhbUNoYXQuQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbmRDbGlja2VkKClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZW5kQ2xpY2tlZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHN0cmVhbUNoYXQuU2VuZFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc3RyZWFtLW1vZGFsPlxuIl19
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7O0FBbUJqRixNQUFNLE9BQU8sMEJBQTBCO0lBYXJDLFlBQ1UsaUJBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxjQUE4QjtRQUY5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBZC9CLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWYsbUJBQWMsR0FBcUIsRUFBRSxDQUFDO1FBQzVCLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDM0Qsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFxR3hCLGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQztJQS9GQyxDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQzVDLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDdkIscUJBQXFCLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIscUJBQXFCLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIscUJBQXFCLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIscUJBQXFCLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIscUJBQXFCLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIscUJBQXFCLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsVUFBVTtRQUNSLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFSyxXQUFXOztZQUNmLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msa0RBQWtELEVBQ2xELFNBQVMsQ0FDVixDQUFDO2FBQ0g7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLDhCQUE4QixDQUMvQixDQUFDO2FBQ0g7UUFDSCxDQUFDO0tBQUE7SUFFRCxXQUFXO1FBQ1QsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQVk7UUFDVixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXOztRQUNULE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQU9LLGFBQWE7O1lBQ2pCLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLENBQUM7YUFDeEQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLG1DQUFtQyxDQUNwQyxDQUFDO2FBQ0g7UUFDSCxDQUFDO0tBQUE7O3VIQTFIVSwwQkFBMEI7MkdBQTFCLDBCQUEwQix5VkFTMUIscUJBQXFCLHFFQ3hDbEMsMGxHQThHQTsyRkQvRWEsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFdBQVcsRUFBRSxzQ0FBc0M7b0JBQ25ELE1BQU0sRUFBRSxFQUFFO2lCQUNYO3VLQUVVLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFDWSxTQUFTO3NCQUEzQixNQUFNO2dCQUVtQyxZQUFZO3NCQUFyRCxTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2VJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL21lc3NhZ2UtaW5wdXQvbWVzc2FnZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cmVhbU1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VBY3Rpb25zID1cbiAgfCAnZWRpdCdcbiAgfCAnZGVsZXRlJ1xuICB8ICdlZGl0LWFueSdcbiAgfCAnZGVsZXRlLWFueSdcbiAgfCAncGluJ1xuICB8ICdxdW90ZSdcbiAgfCAnZmxhZydcbiAgfCAnbXV0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlLWFjdGlvbnMtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1lc3NhZ2VJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBpc09wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNNaW5lID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGVuYWJsZWRBY3Rpb25zOiBNZXNzYWdlQWN0aW9uc1tdID0gW107XG4gIEBPdXRwdXQoKSByZWFkb25seSBkaXNwbGF5ZWRBY3Rpb25zQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGlzRWRpdGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoTWVzc2FnZUlucHV0Q29tcG9uZW50KSBwcml2YXRlIG1lc3NhZ2VJbnB1dDpcbiAgICB8IE1lc3NhZ2VJbnB1dENvbXBvbmVudFxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmlzTWluZSB8fCBjaGFuZ2VzLmVuYWJsZWRBY3Rpb25zKSB7XG4gICAgICBsZXQgZGlzcGxheWVkQWN0aW9uc0NvdW50ID0gMDtcbiAgICAgIGlmICh0aGlzLmlzUXVvdGVWaXNpYmxlKSB7XG4gICAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNFZGl0VmlzaWJsZSkge1xuICAgICAgICBkaXNwbGF5ZWRBY3Rpb25zQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzRGVsZXRlVmlzaWJsZSkge1xuICAgICAgICBkaXNwbGF5ZWRBY3Rpb25zQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzTXV0ZVZpc2libGUpIHtcbiAgICAgICAgZGlzcGxheWVkQWN0aW9uc0NvdW50Kys7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ZsYWdWaXNpYmxlKSB7XG4gICAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNQaW5WaXNpYmxlKSB7XG4gICAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudCsrO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5ZWRBY3Rpb25zQ291bnQubmV4dChkaXNwbGF5ZWRBY3Rpb25zQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1F1b3RlVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdxdW90ZScpICE9PSAtMTtcbiAgfVxuXG4gIGdldCBpc0VkaXRWaXNpYmxlKCkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdlZGl0JykgIT09IC0xICYmIHRoaXMuaXNNaW5lKSB8fFxuICAgICAgdGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdlZGl0LWFueScpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBnZXQgaXNEZWxldGVWaXNpYmxlKCkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUnKSAhPT0gLTEgJiYgdGhpcy5pc01pbmUpIHx8XG4gICAgICB0aGlzLmVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2RlbGV0ZS1hbnknKSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzTXV0ZVZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignbXV0ZScpICE9PSAtMTtcbiAgfVxuXG4gIGdldCBpc0ZsYWdWaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2ZsYWcnKSAhPT0gLTEgJiYgIXRoaXMuaXNNaW5lO1xuICB9XG5cbiAgZ2V0IGlzUGluVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkQWN0aW9ucy5pbmRleE9mKCdwaW4nKSAhPT0gLTE7XG4gIH1cblxuICBwaW5DbGlja2VkKCkge1xuICAgIGFsZXJ0KCdGZWF0dXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGFzeW5jIGZsYWdDbGlja2VkKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmZsYWdNZXNzYWdlKHRoaXMubWVzc2FnZSEuaWQpO1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgJ3N0cmVhbUNoYXQuTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCcsXG4gICAgICAgICdzdWNjZXNzJ1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LkVycm9yIGFkZGluZyBmbGFnJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBtdXRlQ2xpY2tlZCgpIHtcbiAgICBhbGVydCgnRmVhdHVyZSBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBxdW90ZUNsaWNrZWQoKSB7XG4gICAgYWxlcnQoJ0ZlYXR1cmUgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZWRpdENsaWNrZWQoKSB7XG4gICAgdGhpcy5pc0VkaXRpbmcuZW1pdCh0cnVlKTtcbiAgICB0aGlzLmlzRWRpdE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBzZW5kQ2xpY2tlZCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VJbnB1dD8ubWVzc2FnZVNlbnQoKTtcbiAgfVxuXG4gIG1vZGFsQ2xvc2VkID0gKCkgPT4ge1xuICAgIHRoaXMuaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRpbmcuZW1pdChmYWxzZSk7XG4gIH07XG5cbiAgYXN5bmMgZGVsZXRlQ2xpY2tlZCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVNZXNzYWdlKHRoaXMubWVzc2FnZSEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBkZWxldGluZyBtZXNzYWdlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgZGF0YS10ZXN0aWQ9XCJhY3Rpb24tYm94XCJcbiAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWJveFwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWJveC0tb3Blbl09XCJpc09wZW5cIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtLW1pbmVdPVwiaXNNaW5lXCJcbj5cbiAgPHVsIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0XCI+XG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJxdW90ZS1hY3Rpb25cIlxuICAgICAgKm5nSWY9XCJpc1F1b3RlVmlzaWJsZVwiXG4gICAgICAoY2xpY2spPVwicXVvdGVDbGlja2VkKClcIlxuICAgID5cbiAgICAgIDxsaSBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtXCI+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5SZXBseVwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xpPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwicGluLWFjdGlvblwiXG4gICAgICAqbmdJZj1cImlzUGluVmlzaWJsZVwiXG4gICAgICAoY2xpY2spPVwicGluQ2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICA8bGkgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbVwiPlxuICAgICAgICB7e1xuICAgICAgICAgIChtZXNzYWdlPy5waW5uZWQgPyBcInN0cmVhbUNoYXQuVW5waW5cIiA6IFwic3RyZWFtQ2hhdC5QaW5cIikgfCB0cmFuc2xhdGVcbiAgICAgICAgfX1cbiAgICAgIDwvbGk+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJmbGFnLWFjdGlvblwiXG4gICAgICAqbmdJZj1cImlzRmxhZ1Zpc2libGVcIlxuICAgICAgKGNsaWNrKT1cImZsYWdDbGlja2VkKClcIlxuICAgID5cbiAgICAgIDxsaSBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtXCI+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5GbGFnXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbGk+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtdXRlLWFjdGlvblwiXG4gICAgICAqbmdJZj1cImlzTXV0ZVZpc2libGVcIlxuICAgICAgKGNsaWNrKT1cIm11dGVDbGlja2VkKClcIlxuICAgID5cbiAgICAgIDxsaSBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtXCI+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5NdXRlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbGk+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJlZGl0LWFjdGlvblwiXG4gICAgICAqbmdJZj1cImlzRWRpdFZpc2libGVcIlxuICAgICAgKGNsaWNrKT1cImVkaXRDbGlja2VkKClcIlxuICAgID5cbiAgICAgIDxsaSBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtXCI+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5FZGl0IE1lc3NhZ2VcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9saT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cImRlbGV0ZS1hY3Rpb25cIlxuICAgICAgKm5nSWY9XCJpc0RlbGV0ZVZpc2libGVcIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZUNsaWNrZWQoKVwiXG4gICAgPlxuICAgICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LkRlbGV0ZVwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xpPlxuICAgIDwvYnV0dG9uPlxuICA8L3VsPlxuPC9kaXY+XG5cbjxzdHJlYW0tbW9kYWxcbiAgW2lzT3Blbl09XCJpc0VkaXRNb2RhbE9wZW5cIlxuICAoaXNPcGVuQ2hhbmdlKT1cIlxuICAgIGlzRWRpdE1vZGFsT3BlbiA9ICRldmVudDsgaXNFZGl0TW9kYWxPcGVuID8gJycgOiBtb2RhbENsb3NlZCgpXG4gIFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLWZvcm1cIiAqbmdJZj1cImlzRWRpdE1vZGFsT3BlblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlSW5wdXRUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0SW5wdXRcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBtZXNzYWdlSW5wdXRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgICAgbWVzc2FnZVVwZGF0ZUhhbmRsZXI6IG1vZGFsQ2xvc2VkXG4gICAgICAgICAgfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0PlxuICAgICAgPHN0cmVhbS1tZXNzYWdlLWlucHV0XG4gICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAobWVzc2FnZVVwZGF0ZSk9XCJtb2RhbENsb3NlZCgpXCJcbiAgICAgID48L3N0cmVhbS1tZXNzYWdlLWlucHV0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHN0cmVhbS1ub3RpZmljYXRpb24tbGlzdD48L3N0cmVhbS1ub3RpZmljYXRpb24tbGlzdD5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtdGVhbS1mb3JtLWZvb3RlclwiPlxuICAgICAgPGRpdj48L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gdHJhbnNsYXRlIGRhdGEtdGVzdGlkPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJtb2RhbENsb3NlZCgpXCI+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5DYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInNlbmQtYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VuZENsaWNrZWQoKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbmRDbGlja2VkKClcIlxuICAgICAgICA+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5TZW5kXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zdHJlYW0tbW9kYWw+XG4iXX0=
@@ -33,6 +33,7 @@ export class AutocompleteTextareaComponent {
33
33
  triggerChar: this.triggerChar,
34
34
  dropUp: true,
35
35
  labelKey: this.labelKey,
36
+ returnTrigger: true,
36
37
  mentionFilter: (searchString, items) => this.filter(searchString, items),
37
38
  mentionSelect: (item, triggerChar) => this.mentioned(item, triggerChar),
38
39
  };
@@ -70,7 +71,12 @@ export class AutocompleteTextareaComponent {
70
71
  return triggerChar + item.autocompleteLabel;
71
72
  }
72
73
  autcompleteSearchTermChanged(searchTerm) {
73
- this.searchTerm$.next(searchTerm);
74
+ if (searchTerm === this.triggerChar) {
75
+ void this.updateMentionOptions();
76
+ }
77
+ else {
78
+ this.searchTerm$.next(searchTerm.replace(this.triggerChar, ''));
79
+ }
74
80
  }
75
81
  inputChanged() {
76
82
  this.valueChange.emit(this.messageInput.nativeElement.value);
@@ -152,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
152
158
  type: ViewChild,
153
159
  args: ['input']
154
160
  }] } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtaW5wdXQvYXV0b2NvbXBsZXRlLXRleHRhcmVhL2F1dG9jb21wbGV0ZS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBS3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUXBFLE1BQU0sT0FBTyw2QkFBNkI7SUFpQ3hDLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLHNCQUE4QztRQUY5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBakN6QyxVQUFLLEdBQUcsb0JBQW9CLENBQUM7UUFDbkMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLHVCQUFrQixHQUF3QixJQUFJLENBQUM7UUFJL0MsaUJBQVksR0FBOEIsU0FBUyxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVEs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QUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUU7Z0JBQ3BELHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLHFCQUFxQixDQUFDO1NBQzdDO0lBQ0gsQ0FBQzs7MEhBOUlVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLDhlQy9CMUMsMjVDQTJDQTsyRkRaYSw2QkFBNkI7a0JBTHpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsV0FBVyxFQUFFLHdDQUF3QztvQkFDckQsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7MEtBSWdCLEtBQUs7c0JBQW5CLFdBQVc7Z0JBQ0gsS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDYSxXQUFXO3NCQUE3QixNQUFNO2dCQUNZLElBQUk7c0JBQXRCLE1BQU07Z0JBQ1ksWUFBWTtzQkFBOUIsTUFBTTtnQkFNcUIsWUFBWTtzQkFBdkMsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVudGlvbkNvbmZpZywgTWVudGlvbnMgfSBmcm9tICdhbmd1bGFyLW1lbnRpb25zJztcbmltcG9ydCB7XG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbiAgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0sXG59IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRleHRhcmVhSW50ZXJmYWNlIH0gZnJvbSAnLi4vdGV4dGFyZWEuaW50ZXJmYWNlJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsaXRlcmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RyYW5zbGl0ZXJhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF1dG9jb21wbGV0ZS10ZXh0YXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIFRleHRhcmVhSW50ZXJmYWNlLCBPbkNoYW5nZXNcbntcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPSAnc3RyLWNoYXRfX3RleHRhcmVhJztcbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgQElucHV0KCkgYXJlTWVudGlvbnNFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdHJ1ZTtcbiAgQElucHV0KCkgbWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgbWVudGlvblNjb3BlOiAnY2hhbm5lbCcgfCAnYXBwbGljYXRpb24nID0gJ2NoYW5uZWwnO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSB1c2VyTWVudGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXJSZXNwb25zZVtdPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVsS2V5ID0gJ2F1dG9jb21wbGV0ZUxhYmVsJztcbiAgcHJpdmF0ZSByZWFkb25seSB0cmlnZ2VyQ2hhciA9ICdAJztcbiAgYXV0b2NvbXBsZXRlQ29uZmlnOiBNZW50aW9uQ29uZmlnID0ge1xuICAgIG1lbnRpb25zOiBbXSxcbiAgfTtcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIG1lc3NhZ2VJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBtZW50aW9uZWRVc2VyczogVXNlclJlc3BvbnNlW10gPSBbXTtcbiAgcHJpdmF0ZSB1c2VyTWVudGlvbkNvbmZpZzogTWVudGlvbnMgPSB7XG4gICAgdHJpZ2dlckNoYXI6IHRoaXMudHJpZ2dlckNoYXIsXG4gICAgZHJvcFVwOiB0cnVlLFxuICAgIGxhYmVsS2V5OiB0aGlzLmxhYmVsS2V5LFxuICAgIG1lbnRpb25GaWx0ZXI6IChcbiAgICAgIHNlYXJjaFN0cmluZzogc3RyaW5nLFxuICAgICAgaXRlbXM6IHsgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZyB9W11cbiAgICApID0+IHRoaXMuZmlsdGVyKHNlYXJjaFN0cmluZywgaXRlbXMpLFxuICAgIG1lbnRpb25TZWxlY3Q6IChpdGVtLCB0cmlnZ2VyQ2hhcikgPT4gdGhpcy5tZW50aW9uZWQoaXRlbSwgdHJpZ2dlckNoYXIpLFxuICB9O1xuICBwcml2YXRlIHNlYXJjaFRlcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGl0ZXJhdGlvblNlcnZpY2U6IFRyYW5zbGl0ZXJhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWFyY2hUZXJtKSA9PiB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1lbnRpb25lZFVzZXJzID0gW107XG4gICAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnRoaXMubWVudGlvbmVkVXNlcnNdKTtcbiAgICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICBpZiAodGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbdGhpcy51c2VyTWVudGlvbkNvbmZpZ107XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnID0geyAuLi50aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKHNlYXJjaFN0cmluZzogc3RyaW5nLCBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXSkge1xuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICB0aGlzLnRyYW5zbGl0ZXJhdGUoaXRlbS5hdXRvY29tcGxldGVMYWJlbC50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy50cmFuc2xpdGVyYXRlKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBtZW50aW9uZWQoaXRlbTogTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0sIHRyaWdnZXJDaGFyID0gJycpIHtcbiAgICB0aGlzLm1lbnRpb25lZFVzZXJzLnB1c2goKGl0ZW0udXNlciA/IGl0ZW0udXNlciA6IGl0ZW0pIGFzIFVzZXJSZXNwb25zZSk7XG4gICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udGhpcy5tZW50aW9uZWRVc2Vyc10pO1xuICAgIHJldHVybiB0cmlnZ2VyQ2hhciArIGl0ZW0uYXV0b2NvbXBsZXRlTGFiZWw7XG4gIH1cblxuICBhdXRjb21wbGV0ZVNlYXJjaFRlcm1DaGFuZ2VkKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChzZWFyY2hUZXJtKTtcbiAgfVxuXG4gIGlucHV0Q2hhbmdlZCgpIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICBpbnB1dExlZnQoKSB7XG4gICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gIH1cblxuICBzZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gICAgdGhpcy5zZW5kLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsaXRlcmF0ZShzOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlLnRyYW5zbGl0ZXJhdGUocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdCA9XG4gICAgICB0aGlzLm1lbnRpb25TY29wZSA9PT0gJ2FwcGxpY2F0aW9uJ1xuICAgICAgICA/IChzOiBzdHJpbmcpID0+IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuYXV0b2NvbXBsZXRlVXNlcnMocylcbiAgICAgICAgOiAoczogc3RyaW5nKSA9PiB0aGlzLmNoYW5uZWxTZXJ2aWNlLmF1dG9jb21wbGV0ZU1lbWJlcnMocyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdChzZWFyY2hUZXJtIHx8ICcnKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmlsdGVyKFxuICAgICAgc2VhcmNoVGVybSB8fCAnJyxcbiAgICAgIHJlc3VsdC5tYXAoKGkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IChpLnVzZXIgPyBpLnVzZXIgOiBpKSBhcyBVc2VyUmVzcG9uc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaSxcbiAgICAgICAgICBhdXRvY29tcGxldGVMYWJlbDogdXNlci5uYW1lIHx8IHVzZXIuaWQsXG4gICAgICAgICAgdHlwZTogJ21lbnRpb24nLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudXNlck1lbnRpb25Db25maWcuaXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFt0aGlzLnVzZXJNZW50aW9uQ29uZmlnXTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpIHtcbiAgICBjb25zdCB1cGRhdGVkTWVudGlvbmVkVXNlcnM6IFVzZXJSZXNwb25zZVtdID0gW107XG4gICAgdGhpcy5tZW50aW9uZWRVc2Vycy5mb3JFYWNoKCh1KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1Lm5hbWUgfHwgdS5pZDtcbiAgICAgIGlmICh0aGlzLnZhbHVlLmluY2x1ZGVzKGAke3RoaXMudHJpZ2dlckNoYXJ9JHtrZXl9YCkpIHtcbiAgICAgICAgdXBkYXRlZE1lbnRpb25lZFVzZXJzLnB1c2godSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHVwZGF0ZWRNZW50aW9uZWRVc2Vycy5sZW5ndGggIT09IHRoaXMubWVudGlvbmVkVXNlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnVzZXJNZW50aW9ucy5uZXh0KFsuLi51cGRhdGVkTWVudGlvbmVkVXNlcnNdKTtcbiAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMgPSB1cGRhdGVkTWVudGlvbmVkVXNlcnM7XG4gICAgfVxuICB9XG59XG4iLCI8dGV4dGFyZWFcbiAgW3ZhbHVlXT1cInZhbHVlIHx8ICcnXCJcbiAgYXV0b2ZvY3VzXG4gIGRhdGEtdGVzdGlkPVwidGV4dGFyZWFcIlxuICAjaW5wdXRcbiAgcGxhY2Vob2xkZXI9XCJ7eyAnc3RyZWFtQ2hhdC5UeXBlIHlvdXIgbWVzc2FnZScgfCB0cmFuc2xhdGUgfX1cIlxuICBjbGFzcz1cInJ0YV9fdGV4dGFyZWEgc3RyLWNoYXRfX3RleHRhcmVhX190ZXh0YXJlYVwiXG4gIHJvd3M9XCIxXCJcbiAgKGlucHV0KT1cImlucHV0Q2hhbmdlZCgpXCJcbiAgKGtleWRvd24uZW50ZXIpPVwic2VudCgkZXZlbnQpXCJcbiAgW21lbnRpb25Db25maWddPVwiYXV0b2NvbXBsZXRlQ29uZmlnXCJcbiAgKHNlYXJjaFRlcm0pPVwiYXV0Y29tcGxldGVTZWFyY2hUZXJtQ2hhbmdlZCgkZXZlbnQpXCJcbiAgW21lbnRpb25MaXN0VGVtcGxhdGVdPVwiYXV0b2NvbXBsZXRlSXRlbVwiXG4gIChibHVyKT1cImlucHV0TGVmdCgpXCJcbj48L3RleHRhcmVhPlxuPG5nLXRlbXBsYXRlICNhdXRvY29tcGxldGVJdGVtIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwicnRhIHJ0YV9faXRlbSBzdHItY2hhdF9fZW1vamlzZWFyY2hfX2l0ZW1cIiBbbmdTd2l0Y2hdPVwiaXRlbS50eXBlXCI+XG4gICAgPGRpdiBjbGFzcz1cInJ0YV9fZW50aXR5XCIgKm5nU3dpdGNoQ2FzZT1cIidtZW50aW9uJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIG1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGUgfHwgZGVmYXVsdE1lbnRpb25UZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lbnRpb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X191c2VyLWl0ZW1cIj5cbiAgICA8c3RyZWFtLWF2YXRhclxuICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdmF0YXJcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyIHN0ci1jaGF0X19hdmF0YXItLWNpcmNsZVwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMjBweFwiXG4gICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZSB8fCBpdGVtLnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cIml0ZW0uYXV0b2NvbXBsZXRlTGFiZWxcIlxuICAgID48L3N0cmVhbS1hdmF0YXI+XG4gICAgPHNwYW4gZGF0YS10ZXN0Y2xhc3M9XCJ1c2VybmFtZVwiIGNsYXNzPVwic3RyLWNoYXRfX3VzZXItaXRlbS0tbmFtZVwiPnt7XG4gICAgICBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtaW5wdXQvYXV0b2NvbXBsZXRlLXRleHRhcmVhL2F1dG9jb21wbGV0ZS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBS3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUXBFLE1BQU0sT0FBTyw2QkFBNkI7SUFrQ3hDLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLHNCQUE4QztRQUY5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBbEN6QyxVQUFLLEdBQUcsb0JBQW9CLENBQUM7UUFDbkMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLHVCQUFrQixHQUF3QixJQUFJLENBQUM7UUFJL0MsaUJBQVksR0FBOEIsU0FBUyxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVEs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bWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lbnRpb25Db25maWcsIE1lbnRpb25zIH0gZnJvbSAnYW5ndWxhci1tZW50aW9ucyc7XG5pbXBvcnQge1xuICBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbUNvbnRleHQsXG4gIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uLy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0YXJlYUludGVyZmFjZSB9IGZyb20gJy4uL3RleHRhcmVhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGl0ZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi90cmFuc2xpdGVyYXRpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1hdXRvY29tcGxldGUtdGV4dGFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlVGV4dGFyZWFDb21wb25lbnRcbiAgaW1wbGVtZW50cyBUZXh0YXJlYUludGVyZmFjZSwgT25DaGFuZ2VzXG57XG4gIEBIb3N0QmluZGluZygpIGNsYXNzID0gJ3N0ci1jaGF0X190ZXh0YXJlYSc7XG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIEBJbnB1dCgpIGFyZU1lbnRpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG4gIEBJbnB1dCgpIG1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGU6XG4gICAgfCBUZW1wbGF0ZVJlZjxNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbUNvbnRleHQ+XG4gICAgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyA9ICdjaGFubmVsJztcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBzZW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdXNlck1lbnRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxVc2VyUmVzcG9uc2VbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsYWJlbEtleSA9ICdhdXRvY29tcGxldGVMYWJlbCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJpZ2dlckNoYXIgPSAnQCc7XG4gIGF1dG9jb21wbGV0ZUNvbmZpZzogTWVudGlvbkNvbmZpZyA9IHtcbiAgICBtZW50aW9uczogW10sXG4gIH07XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgcHJpdmF0ZSBtZXNzYWdlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbWVudGlvbmVkVXNlcnM6IFVzZXJSZXNwb25zZVtdID0gW107XG4gIHByaXZhdGUgdXNlck1lbnRpb25Db25maWc6IE1lbnRpb25zID0ge1xuICAgIHRyaWdnZXJDaGFyOiB0aGlzLnRyaWdnZXJDaGFyLFxuICAgIGRyb3BVcDogdHJ1ZSxcbiAgICBsYWJlbEtleTogdGhpcy5sYWJlbEtleSxcbiAgICByZXR1cm5UcmlnZ2VyOiB0cnVlLFxuICAgIG1lbnRpb25GaWx0ZXI6IChcbiAgICAgIHNlYXJjaFN0cmluZzogc3RyaW5nLFxuICAgICAgaXRlbXM6IHsgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZyB9W11cbiAgICApID0+IHRoaXMuZmlsdGVyKHNlYXJjaFN0cmluZywgaXRlbXMpLFxuICAgIG1lbnRpb25TZWxlY3Q6IChpdGVtLCB0cmlnZ2VyQ2hhcikgPT4gdGhpcy5tZW50aW9uZWQoaXRlbSwgdHJpZ2dlckNoYXIpLFxuICB9O1xuICBwcml2YXRlIHNlYXJjaFRlcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGl0ZXJhdGlvblNlcnZpY2U6IFRyYW5zbGl0ZXJhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWFyY2hUZXJtKSA9PiB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm1lbnRpb25lZFVzZXJzID0gW107XG4gICAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnRoaXMubWVudGlvbmVkVXNlcnNdKTtcbiAgICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICBpZiAodGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbdGhpcy51c2VyTWVudGlvbkNvbmZpZ107XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnID0geyAuLi50aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKHNlYXJjaFN0cmluZzogc3RyaW5nLCBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXSkge1xuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICB0aGlzLnRyYW5zbGl0ZXJhdGUoaXRlbS5hdXRvY29tcGxldGVMYWJlbC50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy50cmFuc2xpdGVyYXRlKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBtZW50aW9uZWQoaXRlbTogTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW0sIHRyaWdnZXJDaGFyID0gJycpIHtcbiAgICB0aGlzLm1lbnRpb25lZFVzZXJzLnB1c2goKGl0ZW0udXNlciA/IGl0ZW0udXNlciA6IGl0ZW0pIGFzIFVzZXJSZXNwb25zZSk7XG4gICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udGhpcy5tZW50aW9uZWRVc2Vyc10pO1xuICAgIHJldHVybiB0cmlnZ2VyQ2hhciArIGl0ZW0uYXV0b2NvbXBsZXRlTGFiZWw7XG4gIH1cblxuICBhdXRjb21wbGV0ZVNlYXJjaFRlcm1DaGFuZ2VkKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIGlmIChzZWFyY2hUZXJtID09PSB0aGlzLnRyaWdnZXJDaGFyKSB7XG4gICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KHNlYXJjaFRlcm0ucmVwbGFjZSh0aGlzLnRyaWdnZXJDaGFyLCAnJykpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlZCgpIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICBpbnB1dExlZnQoKSB7XG4gICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gIH1cblxuICBzZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gICAgdGhpcy5zZW5kLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsaXRlcmF0ZShzOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlLnRyYW5zbGl0ZXJhdGUocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdCA9XG4gICAgICB0aGlzLm1lbnRpb25TY29wZSA9PT0gJ2FwcGxpY2F0aW9uJ1xuICAgICAgICA/IChzOiBzdHJpbmcpID0+IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuYXV0b2NvbXBsZXRlVXNlcnMocylcbiAgICAgICAgOiAoczogc3RyaW5nKSA9PiB0aGlzLmNoYW5uZWxTZXJ2aWNlLmF1dG9jb21wbGV0ZU1lbWJlcnMocyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdChzZWFyY2hUZXJtIHx8ICcnKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmlsdGVyKFxuICAgICAgc2VhcmNoVGVybSB8fCAnJyxcbiAgICAgIHJlc3VsdC5tYXAoKGkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IChpLnVzZXIgPyBpLnVzZXIgOiBpKSBhcyBVc2VyUmVzcG9uc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaSxcbiAgICAgICAgICBhdXRvY29tcGxldGVMYWJlbDogdXNlci5uYW1lIHx8IHVzZXIuaWQsXG4gICAgICAgICAgdHlwZTogJ21lbnRpb24nLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudXNlck1lbnRpb25Db25maWcuaXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFt0aGlzLnVzZXJNZW50aW9uQ29uZmlnXTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpIHtcbiAgICBjb25zdCB1cGRhdGVkTWVudGlvbmVkVXNlcnM6IFVzZXJSZXNwb25zZVtdID0gW107XG4gICAgdGhpcy5tZW50aW9uZWRVc2Vycy5mb3JFYWNoKCh1KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1Lm5hbWUgfHwgdS5pZDtcbiAgICAgIGlmICh0aGlzLnZhbHVlLmluY2x1ZGVzKGAke3RoaXMudHJpZ2dlckNoYXJ9JHtrZXl9YCkpIHtcbiAgICAgICAgdXBkYXRlZE1lbnRpb25lZFVzZXJzLnB1c2godSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHVwZGF0ZWRNZW50aW9uZWRVc2Vycy5sZW5ndGggIT09IHRoaXMubWVudGlvbmVkVXNlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnVzZXJNZW50aW9ucy5uZXh0KFsuLi51cGRhdGVkTWVudGlvbmVkVXNlcnNdKTtcbiAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMgPSB1cGRhdGVkTWVudGlvbmVkVXNlcnM7XG4gICAgfVxuICB9XG59XG4iLCI8dGV4dGFyZWFcbiAgW3ZhbHVlXT1cInZhbHVlIHx8ICcnXCJcbiAgYXV0b2ZvY3VzXG4gIGRhdGEtdGVzdGlkPVwidGV4dGFyZWFcIlxuICAjaW5wdXRcbiAgcGxhY2Vob2xkZXI9XCJ7eyAnc3RyZWFtQ2hhdC5UeXBlIHlvdXIgbWVzc2FnZScgfCB0cmFuc2xhdGUgfX1cIlxuICBjbGFzcz1cInJ0YV9fdGV4dGFyZWEgc3RyLWNoYXRfX3RleHRhcmVhX190ZXh0YXJlYVwiXG4gIHJvd3M9XCIxXCJcbiAgKGlucHV0KT1cImlucHV0Q2hhbmdlZCgpXCJcbiAgKGtleWRvd24uZW50ZXIpPVwic2VudCgkZXZlbnQpXCJcbiAgW21lbnRpb25Db25maWddPVwiYXV0b2NvbXBsZXRlQ29uZmlnXCJcbiAgKHNlYXJjaFRlcm0pPVwiYXV0Y29tcGxldGVTZWFyY2hUZXJtQ2hhbmdlZCgkZXZlbnQpXCJcbiAgW21lbnRpb25MaXN0VGVtcGxhdGVdPVwiYXV0b2NvbXBsZXRlSXRlbVwiXG4gIChibHVyKT1cImlucHV0TGVmdCgpXCJcbj48L3RleHRhcmVhPlxuPG5nLXRlbXBsYXRlICNhdXRvY29tcGxldGVJdGVtIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwicnRhIHJ0YV9faXRlbSBzdHItY2hhdF9fZW1vamlzZWFyY2hfX2l0ZW1cIiBbbmdTd2l0Y2hdPVwiaXRlbS50eXBlXCI+XG4gICAgPGRpdiBjbGFzcz1cInJ0YV9fZW50aXR5XCIgKm5nU3dpdGNoQ2FzZT1cIidtZW50aW9uJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIG1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGUgfHwgZGVmYXVsdE1lbnRpb25UZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lbnRpb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X191c2VyLWl0ZW1cIj5cbiAgICA8c3RyZWFtLWF2YXRhclxuICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdmF0YXJcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyIHN0ci1jaGF0X19hdmF0YXItLWNpcmNsZVwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMjBweFwiXG4gICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZSB8fCBpdGVtLnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cIml0ZW0uYXV0b2NvbXBsZXRlTGFiZWxcIlxuICAgID48L3N0cmVhbS1hdmF0YXI+XG4gICAgPHNwYW4gZGF0YS10ZXN0Y2xhc3M9XCJ1c2VybmFtZVwiIGNsYXNzPVwic3RyLWNoYXRfX3VzZXItaXRlbS0tbmFtZVwiPnt7XG4gICAgICBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==