stream-chat-angular 3.7.1 → 3.7.2

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.
@@ -127,10 +127,19 @@ export class MessageComponent {
127
127
  : [];
128
128
  }
129
129
  getAttachmentListContext() {
130
- var _a, _b;
130
+ var _a, _b, _c;
131
131
  return {
132
132
  messageId: ((_a = this.message) === null || _a === void 0 ? void 0 : _a.id) || '',
133
133
  attachments: ((_b = this.message) === null || _b === void 0 ? void 0 : _b.attachments) || [],
134
+ parentMessageId: (_c = this.message) === null || _c === void 0 ? void 0 : _c.parent_id,
135
+ };
136
+ }
137
+ getQuotedMessageAttachmentListContext() {
138
+ var _a, _b, _c, _d;
139
+ return {
140
+ messageId: ((_b = (_a = this.message) === null || _a === void 0 ? void 0 : _a.quoted_message) === null || _b === void 0 ? void 0 : _b.id) || '',
141
+ attachments: this.quotedMessageAttachments,
142
+ parentMessageId: (_d = (_c = this === null || this === void 0 ? void 0 : this.message) === null || _c === void 0 ? void 0 : _c.quoted_message) === null || _d === void 0 ? void 0 : _d.parent_id,
134
143
  };
135
144
  }
136
145
  getMessageReactionsContext() {
@@ -242,7 +251,7 @@ export class MessageComponent {
242
251
  }
243
252
  }
244
253
  MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageComponent, deps: [{ token: i1.ChatClientService }, { token: i2.ChannelService }, { token: i3.CustomTemplatesService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
245
- MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageComponent, selector: "stream-message", inputs: { message: "message", enabledMessageActions: "enabledMessageActions", isLastSentMessage: "isLastSentMessage", mode: "mode" }, 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]=\"hasReactions\"\n data-testid=\"message-container\"\n (mouseleave)=\"isActionBoxOpen = false\"\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 mode === 'main' &&\n isMessageDeliveredAndRead &&\n canDisplayReadStatus;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <stream-avatar-placeholder\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 type=\"user\"\n location=\"message-sender\"\n [user]=\"message?.user || undefined\"\n ></stream-avatar-placeholder>\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 <ng-template\n #defaultMessageActionsBox\n let-isOpen=\"isOpen\"\n let-isMine=\"isMine\"\n let-enabledActions=\"enabledActions\"\n let-messageInput=\"message\"\n let-displayedActionsCountChaneHanler=\"displayedActionsCountChaneHanler\"\n let-isEditingChangeHandler=\"isEditingChangeHandler\"\n >\n <stream-message-actions-box\n [isOpen]=\"isOpen\"\n [isMine]=\"isMine\"\n [enabledActions]=\"enabledActions\"\n [message]=\"messageInput\"\n (displayedActionsCount)=\"\n displayedActionsCountChaneHanler($event)\n \"\n (isEditing)=\"isEditingChangeHandler($event)\"\n ></stream-message-actions-box>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageActionsBoxTemplate || defaultMessageActionsBox;\n context: getMessageActionsBoxContext()\n \"\n ></ng-container>\n <stream-icon-placeholder\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-placeholder>\n </div>\n <!-- eslint-disable @angular-eslint/template/conditional-complexity -->\n <div\n *ngIf=\"\n enabledMessageActions.indexOf('send-reply') !== -1 &&\n mode === 'main'\n \"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--thread\n \"\n data-testid=\"reply-in-thread\"\n (click)=\"setAsActiveParentMessage()\"\n (keyup.enter)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder\n icon=\"reply-in-thread\"\n ></stream-icon-placeholder>\n </div>\n <div\n *ngIf=\"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-placeholder\n icon=\"reaction-icon\"\n ></stream-icon-placeholder>\n </div>\n </div>\n <!-- eslint-enable @angular-eslint/template/conditional-complexity -->\n <ng-template\n #defaultMessageReactions\n let-messageReactionCounts=\"messageReactionCounts\"\n let-latestReactions=\"latestReactions\"\n let-isSelectorOpen=\"isSelectorOpen\"\n let-isSelectorOpenChangeHandler=\"isSelectorOpenChangeHandler\"\n let-messageId=\"messageId\"\n let-ownReactions=\"ownReactions\"\n >\n <stream-message-reactions\n [messageReactionCounts]=\"messageReactionCounts\"\n [latestReactions]=\"latestReactions\"\n [isSelectorOpen]=\"isSelectorOpen\"\n (isSelectorOpenChange)=\"isSelectorOpenChangeHandler($event)\"\n [messageId]=\"messageId\"\n [ownReactions]=\"ownReactions\"\n ></stream-message-reactions>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageReactionsTemplate || defaultMessageReactions;\n context: getMessageReactionsContext()\n \"\n ></ng-container>\n <ng-container *ngIf=\"hasAttachment && !message?.quoted_message\">\n <ng-template\n #defaultAttachments\n let-messageId=\"messageId\"\n let-attachments=\"attachments\"\n >\n <stream-attachment-list\n [messageId]=\"messageId\"\n [attachments]=\"attachments\"\n ></stream-attachment-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentListTemplate || defaultAttachments;\n context: getAttachmentListContext()\n \"\n ></ng-container>\n </ng-container>\n <div\n class=\"str-chat__message-text\"\n *ngIf=\"message?.text || (message?.quoted_message && hasAttachment)\"\n >\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 <ng-container *ngTemplateOutlet=\"quotedMessage\"></ng-container>\n <stream-attachment-list\n *ngIf=\"hasAttachment && message?.quoted_message\"\n [attachments]=\"message!.attachments!\"\n [messageId]=\"message!.id\"\n ></stream-attachment-list>\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-template #defaultMention let-content=\"content\">\n <b>{{ content }}</b>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n mentionTemplate || defaultMention;\n context: getMentionContext(part)\n \"\n ></ng-container>\n </ng-template>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"str-chat__message-simple-reply-button\">\n <button\n *ngIf=\"\n !!message?.reply_count &&\n mode !== 'thread' &&\n enabledMessageActions.indexOf('send-reply') !== -1\n \"\n class=\"str-chat__message-replies-count-button\"\n data-testid=\"reply-count-button\"\n (click)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder icon=\"reply\"></stream-icon-placeholder>\n {{message?.reply_count === 1 ? ('streamChat.1 reply' | translate) : ('streamChat.{{ replyCount }}\n replies' | translate:replyCountParam)}}\n </button>\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\n class=\"\n str-chat__message-simple-status str-chat__message-simple-status-angular\n \"\n data-testid=\"sending-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n <stream-loading-indicator-placeholder\n data-testid=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </span>\n</ng-template>\n<ng-template #readStatus>\n <span\n class=\"\n str-chat__message-simple-status str-chat__message-simple-status-angular\n \"\n data-testid=\"read-indicator\"\n >\n <div class=\"str-chat__tooltip\" data-testid=\"read-by-tooltip\">\n {{ readByText }}\n </div>\n <stream-avatar-placeholder\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 type=\"user\"\n location=\"message-reader\"\n [user]=\"lastReadUser\"\n ></stream-avatar-placeholder>\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 *ngIf=\"mode === 'main'\"\n class=\"\n str-chat__message-simple-status str-chat__message-simple-status-angular\n \"\n data-testid=\"delivered-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n <stream-icon-placeholder\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon-placeholder>\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\n<ng-template #quotedMessage>\n <div\n *ngIf=\"message?.quoted_message\"\n class=\"quoted-message\"\n data-testid=\"quoted-message-container\"\n [class.mine]=\"isSentByCurrentUser\"\n >\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"message?.quoted_message?.user?.image\"\n [name]=\"\n message?.quoted_message?.user?.name || message?.quoted_message?.user?.id\n \"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"message?.quoted_message?.user || undefined\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-inner\">\n <stream-attachment-list\n *ngIf=\"\n message?.quoted_message?.attachments &&\n message?.quoted_message?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"message?.quoted_message?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"\n message?.quoted_message?.html || message?.quoted_message?.text\n \"\n ></div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i4.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i5.MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: ["isOpen", "isMine", "message", "enabledActions"], outputs: ["displayedActionsCount", "isEditing"] }, { type: i6.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i7.MessageReactionsComponent, selector: "stream-message-reactions", inputs: ["messageId", "messageReactionCounts", "isSelectorOpen", "latestReactions", "ownReactions"], outputs: ["isSelectorOpenChange"] }, { type: i8.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: i9.LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder", inputs: ["size", "color"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i11.TranslatePipe } });
254
+ MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageComponent, selector: "stream-message", inputs: { message: "message", enabledMessageActions: "enabledMessageActions", isLastSentMessage: "isLastSentMessage", mode: "mode" }, 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]=\"hasReactions\"\n data-testid=\"message-container\"\n (mouseleave)=\"isActionBoxOpen = false\"\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 mode === 'main' &&\n isMessageDeliveredAndRead &&\n canDisplayReadStatus;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <stream-avatar-placeholder\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 type=\"user\"\n location=\"message-sender\"\n [user]=\"message?.user || undefined\"\n ></stream-avatar-placeholder>\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 <ng-template\n #defaultMessageActionsBox\n let-isOpen=\"isOpen\"\n let-isMine=\"isMine\"\n let-enabledActions=\"enabledActions\"\n let-messageInput=\"message\"\n let-displayedActionsCountChaneHanler=\"displayedActionsCountChaneHanler\"\n let-isEditingChangeHandler=\"isEditingChangeHandler\"\n >\n <stream-message-actions-box\n [isOpen]=\"isOpen\"\n [isMine]=\"isMine\"\n [enabledActions]=\"enabledActions\"\n [message]=\"messageInput\"\n (displayedActionsCount)=\"\n displayedActionsCountChaneHanler($event)\n \"\n (isEditing)=\"isEditingChangeHandler($event)\"\n ></stream-message-actions-box>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageActionsBoxTemplate || defaultMessageActionsBox;\n context: getMessageActionsBoxContext()\n \"\n ></ng-container>\n <stream-icon-placeholder\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-placeholder>\n </div>\n <!-- eslint-disable @angular-eslint/template/conditional-complexity -->\n <div\n *ngIf=\"\n enabledMessageActions.indexOf('send-reply') !== -1 &&\n mode === 'main'\n \"\n class=\"\n str-chat__message-simple__actions__action\n str-chat__message-simple__actions__action--thread\n \"\n data-testid=\"reply-in-thread\"\n (click)=\"setAsActiveParentMessage()\"\n (keyup.enter)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder\n icon=\"reply-in-thread\"\n ></stream-icon-placeholder>\n </div>\n <div\n *ngIf=\"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-placeholder\n icon=\"reaction-icon\"\n ></stream-icon-placeholder>\n </div>\n </div>\n <!-- eslint-enable @angular-eslint/template/conditional-complexity -->\n <ng-template\n #defaultMessageReactions\n let-messageReactionCounts=\"messageReactionCounts\"\n let-latestReactions=\"latestReactions\"\n let-isSelectorOpen=\"isSelectorOpen\"\n let-isSelectorOpenChangeHandler=\"isSelectorOpenChangeHandler\"\n let-messageId=\"messageId\"\n let-ownReactions=\"ownReactions\"\n >\n <stream-message-reactions\n [messageReactionCounts]=\"messageReactionCounts\"\n [latestReactions]=\"latestReactions\"\n [isSelectorOpen]=\"isSelectorOpen\"\n (isSelectorOpenChange)=\"isSelectorOpenChangeHandler($event)\"\n [messageId]=\"messageId\"\n [ownReactions]=\"ownReactions\"\n ></stream-message-reactions>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageReactionsTemplate || defaultMessageReactions;\n context: getMessageReactionsContext()\n \"\n ></ng-container>\n <ng-container *ngIf=\"hasAttachment && !message?.quoted_message\">\n <ng-template\n #defaultAttachments\n let-messageId=\"messageId\"\n let-attachments=\"attachments\"\n let-parentMessageId=\"parentMessageId\"\n >\n <stream-attachment-list\n [messageId]=\"messageId\"\n [attachments]=\"attachments\"\n [parentMessageId]=\"parentMessageId\"\n ></stream-attachment-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentListTemplate || defaultAttachments;\n context: getAttachmentListContext()\n \"\n ></ng-container>\n </ng-container>\n <div\n class=\"str-chat__message-text\"\n *ngIf=\"message?.text || (message?.quoted_message && hasAttachment)\"\n >\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 <ng-container *ngTemplateOutlet=\"quotedMessage\"></ng-container>\n <stream-attachment-list\n *ngIf=\"hasAttachment && message?.quoted_message\"\n [attachments]=\"message!.attachments!\"\n [messageId]=\"message!.id\"\n ></stream-attachment-list>\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-template #defaultMention let-content=\"content\">\n <b>{{ content }}</b>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n mentionTemplate || defaultMention;\n context: getMentionContext(part)\n \"\n ></ng-container>\n </ng-template>\n </ng-container>\n </p>\n </div>\n </div>\n </div>\n <div class=\"str-chat__message-simple-reply-button\">\n <button\n *ngIf=\"\n !!message?.reply_count &&\n mode !== 'thread' &&\n enabledMessageActions.indexOf('send-reply') !== -1\n \"\n class=\"str-chat__message-replies-count-button\"\n data-testid=\"reply-count-button\"\n (click)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder icon=\"reply\"></stream-icon-placeholder>\n {{message?.reply_count === 1 ? ('streamChat.1 reply' | translate) : ('streamChat.{{ replyCount }}\n replies' | translate:replyCountParam)}}\n </button>\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\n class=\"\n str-chat__message-simple-status str-chat__message-simple-status-angular\n \"\n data-testid=\"sending-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n <stream-loading-indicator-placeholder\n data-testid=\"loading-indicator\"\n ></stream-loading-indicator-placeholder>\n </span>\n</ng-template>\n<ng-template #readStatus>\n <span\n class=\"\n str-chat__message-simple-status str-chat__message-simple-status-angular\n \"\n data-testid=\"read-indicator\"\n >\n <div class=\"str-chat__tooltip\" data-testid=\"read-by-tooltip\">\n {{ readByText }}\n </div>\n <stream-avatar-placeholder\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 type=\"user\"\n location=\"message-reader\"\n [user]=\"lastReadUser\"\n ></stream-avatar-placeholder>\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 *ngIf=\"mode === 'main'\"\n class=\"\n str-chat__message-simple-status str-chat__message-simple-status-angular\n \"\n data-testid=\"delivered-indicator\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n <stream-icon-placeholder\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon-placeholder>\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\n<ng-template #quotedMessage>\n <div\n *ngIf=\"message?.quoted_message\"\n class=\"quoted-message\"\n data-testid=\"quoted-message-container\"\n [class.mine]=\"isSentByCurrentUser\"\n >\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"message?.quoted_message?.user?.image\"\n [name]=\"\n message?.quoted_message?.user?.name || message?.quoted_message?.user?.id\n \"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"message?.quoted_message?.user || undefined\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-inner\">\n <ng-container\n *ngIf=\"\n message?.quoted_message?.attachments &&\n message?.quoted_message?.attachments?.length\n \"\n >\n <ng-template\n #defaultAttachments\n let-messageId=\"messageId\"\n let-attachments=\"attachments\"\n let-parentMessageId=\"parentMessageId\"\n >\n <stream-attachment-list\n [messageId]=\"messageId\"\n [attachments]=\"attachments\"\n [parentMessageId]=\"parentMessageId\"\n ></stream-attachment-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentListTemplate || defaultAttachments;\n context: getQuotedMessageAttachmentListContext()\n \"\n ></ng-container>\n </ng-container>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"\n message?.quoted_message?.html || message?.quoted_message?.text\n \"\n ></div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i4.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i5.MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: ["isOpen", "isMine", "message", "enabledActions"], outputs: ["displayedActionsCount", "isEditing"] }, { type: i6.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i7.MessageReactionsComponent, selector: "stream-message-reactions", inputs: ["messageId", "messageReactionCounts", "isSelectorOpen", "latestReactions", "ownReactions"], outputs: ["isSelectorOpenChange"] }, { type: i8.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "parentMessageId", "attachments"] }, { type: i9.LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder", inputs: ["size", "color"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i11.TranslatePipe } });
246
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageComponent, decorators: [{
247
256
  type: Component,
248
257
  args: [{
@@ -262,4 +271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
262
271
  type: ViewChild,
263
272
  args: ['container']
264
273
  }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUdyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7O0FBUTFDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGdCQUFnQjtJQW1DM0IsWUFDVSxpQkFBb0MsRUFDcEMsY0FBOEIsRUFDOUIsc0JBQThDLEVBQzlDLEtBQXdCO1FBSHhCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFsQ2xDOztXQUVHO1FBQ00sMEJBQXFCLEdBQWEsRUFBRSxDQUFDO1FBSzlDOztXQUVHO1FBQ00sU0FBSSxHQUFzQixNQUFNLENBQUM7UUFJMUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQiwrQkFBMEIsR0FBRyxDQUFDLENBQUM7UUFDL0IscUJBQWdC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QUFJO3NCQUFaLEtBQUs7Z0JBZTBCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXREZXZpY2VXaWR0aCB9IGZyb20gJy4uL2RldmljZS13aWR0aCc7XG5pbXBvcnQge1xuICBBdHRhY2htZW50TGlzdENvbnRleHQsXG4gIE1lbnRpb25UZW1wbGF0ZUNvbnRleHQsXG4gIE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCxcbiAgTWVzc2FnZVJlYWN0aW9uc0NvbnRleHQsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHBhcnNlRGF0ZSB9IGZyb20gJy4vcGFyc2UtZGF0ZSc7XG5pbXBvcnQgZW1vamlSZWdleCBmcm9tICdlbW9qaS1yZWdleCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgbGlzdFVzZXJzIH0gZnJvbSAnLi4vbGlzdC11c2Vycyc7XG5cbnR5cGUgTWVzc2FnZVBhcnQgPSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgdHlwZTogJ3RleHQnIHwgJ21lbnRpb24nO1xuICB1c2VyPzogVXNlclJlc3BvbnNlO1xufTtcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VgIGNvbXBvbmVudCBkaXNwbGF5cyBhIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgc2VuZGVyIGFuZCBkYXRlLCBhbmQgZW5hYmxlcyBbaW50ZXJhY3Rpb24gd2l0aCB0aGUgbWVzc2FnZSAoaS5lLiBlZGl0IG9yIHJlYWN0KV0oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZFxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIFtjaGFubmVsIGNhcGFiaWxpdGllc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpIHRoYXQgYXJlIGVuYWJsZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIsIHRoZSBsaXN0IG9mIFtzdXBwb3J0ZWQgaW50ZXJhY3Rpb25zXSguLi9jb25jZXB0cy9tZXNzYWdlLWludGVyYWN0aW9ucy5tZHgpIGNhbiBiZSBmb3VuZCBpbiBvdXIgbWVzc2FnZSBpbnRlcmFjdGlvbiBndWlkZS4gVW5hdGhvcml6ZWQgYWN0aW9ucyB3b24ndCBiZSBkaXNwbGF5ZWQgb24gdGhlIFVJLiBUaGUgW2BNZXNzYWdlTGlzdGBdKC4vTWVzc2FnZUxpc3RDb21wb25lbnQubWR4KSBjb21wb25lbnQgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgYmFzZWQgb24gW2NoYW5uZWwgY2FwYWJpbGl0aWVzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtZXNzYWdlIHN0YXR1cyAoc2VuZGluZywgc2VudCwgd2hvIHJlYWQgdGhlIG1lc3NhZ2UpIGlzIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGlzTGFzdFNlbnRNZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbWVzc2FnZSBpcyBiZWluZyBkaXNwYWx5ZWQgaW4gYSBjaGFubmVsIG9yIGluIGEgW3RocmVhZF0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvdGhyZWFkcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlOiAndGhyZWFkJyB8ICdtYWluJyA9ICdtYWluJztcbiAgY2FuUmVjZWl2ZVJlYWRFdmVudHM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNhblJlYWN0VG9NZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0VkaXRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzQWN0aW9uQm94T3BlbiA9IGZhbHNlO1xuICBpc1JlYWN0aW9uU2VsZWN0b3JPcGVuID0gZmFsc2U7XG4gIGlzUHJlc3NlZE9uTW9iaWxlID0gZmFsc2U7XG4gIHZpc2libGVNZXNzYWdlQWN0aW9uc0NvdW50ID0gMDtcbiAgbWVzc2FnZVRleHRQYXJ0czogTWVzc2FnZVBhcnRbXSA9IFtdO1xuICBtZW50aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lbnRpb25UZW1wbGF0ZUNvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50TGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxBdHRhY2htZW50TGlzdENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlQWN0aW9uc0JveENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB1c2VyOiBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHJpdmF0ZSBjb250YWluZXI6XG4gICAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnVzZXIgPSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQudXNlcjtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lbnRpb25UZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLm1lbnRpb25UZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuYXR0YWNobWVudExpc3RUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLmF0dGFjaG1lbnRMaXN0VGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuY3JlYXRlTWVzc2FnZVBhcnRzKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucykge1xuICAgICAgdGhpcy5jYW5SZWFjdFRvTWVzc2FnZSA9XG4gICAgICAgIHRoaXMuZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLmluZGV4T2YoJ3NlbmQtcmVhY3Rpb24nKSAhPT0gLTE7XG4gICAgICB0aGlzLmNhblJlY2VpdmVSZWFkRXZlbnRzID1cbiAgICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMuaW5kZXhPZigncmVhZC1ldmVudHMnKSAhPT0gLTE7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXQgaXNTZW50QnlDdXJyZW50VXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlPy51c2VyPy5pZCA9PT0gdGhpcy51c2VyPy5pZDtcbiAgfVxuXG4gIGdldCByZWFkQnlUZXh0KCkge1xuICAgIHJldHVybiBsaXN0VXNlcnModGhpcy5tZXNzYWdlIS5yZWFkQnkpO1xuICB9XG5cbiAgZ2V0IGxhc3RSZWFkVXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlPy5yZWFkQnkuZmlsdGVyKCh1KSA9PiB1LmlkICE9PSB0aGlzLnVzZXI/LmlkKVswXTtcbiAgfVxuXG4gIGdldCBpc09ubHlSZWFkQnlNZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IGlzUmVhZEJ5TXVsdGlwbGVVc2VycygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBpc01lc3NhZ2VEZWxpdmVyZWRBbmRSZWFkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1lc3NhZ2UgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBnZXQgcGFyc2VkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZSB8fCAhdGhpcy5tZXNzYWdlPy5jcmVhdGVkX2F0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBwYXJzZURhdGUodGhpcy5tZXNzYWdlLmNyZWF0ZWRfYXQpO1xuICB9XG5cbiAgZ2V0IGFyZU9wdGlvbnNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhKFxuICAgICAgIXRoaXMubWVzc2FnZS50eXBlIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2Vycm9yJyB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnR5cGUgPT09ICdzeXN0ZW0nIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2VwaGVtZXJhbCcgfHxcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdmYWlsZWQnIHx8XG4gICAgICB0aGlzLm1lc3NhZ2Uuc3RhdHVzID09PSAnc2VuZGluZycgfHxcbiAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmICF0aGlzLm1lc3NhZ2UucGFyZW50X2lkKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzQXR0YWNobWVudCgpIHtcbiAgICByZXR1cm4gISF0aGlzLm1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmICEhdGhpcy5tZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBoYXNSZWFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5tZXNzYWdlPy5yZWFjdGlvbl9jb3VudHMgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubWVzc2FnZS5yZWFjdGlvbl9jb3VudHMpLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgZ2V0IHJlcGx5Q291bnRQYXJhbSgpIHtcbiAgICByZXR1cm4geyByZXBseUNvdW50OiB0aGlzLm1lc3NhZ2U/LnJlcGx5X2NvdW50IH07XG4gIH1cblxuICBnZXQgY2FuRGlzcGxheVJlYWRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2FuUmVjZWl2ZVJlYWRFdmVudHMgIT09IGZhbHNlICYmXG4gICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucy5pbmRleE9mKCdyZWFkLWV2ZW50cycpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBnZXQgcXVvdGVkTWVzc2FnZUF0dGFjaG1lbnRzKCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXR0YWNobWVudHMgPSB0aGlzLm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5hdHRhY2htZW50cztcbiAgICByZXR1cm4gb3JpZ2luYWxBdHRhY2htZW50cyAmJiBvcmlnaW5hbEF0dGFjaG1lbnRzLmxlbmd0aFxuICAgICAgPyBbb3JpZ2luYWxBdHRhY2htZW50c1swXV1cbiAgICAgIDogW107XG4gIH1cblxuICBnZXRBdHRhY2htZW50TGlzdENvbnRleHQoKTogQXR0YWNobWVudExpc3RDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZUlkOiB0aGlzLm1lc3NhZ2U/LmlkIHx8ICcnLFxuICAgICAgYXR0YWNobWVudHM6IHRoaXMubWVzc2FnZT8uYXR0YWNobWVudHMgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0KCk6IE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZVJlYWN0aW9uQ291bnRzOiB0aGlzLm1lc3NhZ2U/LnJlYWN0aW9uX2NvdW50cyB8fCB7fSxcbiAgICAgIGxhdGVzdFJlYWN0aW9uczogdGhpcy5tZXNzYWdlPy5sYXRlc3RfcmVhY3Rpb25zIHx8IFtdLFxuICAgICAgaXNTZWxlY3Rvck9wZW46IHRoaXMuaXNSZWFjdGlvblNlbGVjdG9yT3BlbixcbiAgICAgIGlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbikgPT5cbiAgICAgICAgKHRoaXMuaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9IGlzT3BlbiksXG4gICAgICBtZXNzYWdlSWQ6IHRoaXMubWVzc2FnZT8uaWQsXG4gICAgICBvd25SZWFjdGlvbnM6IHRoaXMubWVzc2FnZT8ub3duX3JlYWN0aW9ucyB8fCBbXSxcbiAgICB9O1xuICB9XG5cbiAgcmVzZW5kTWVzc2FnZSgpIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UucmVzZW5kTWVzc2FnZSh0aGlzLm1lc3NhZ2UhKTtcbiAgfVxuXG4gIHRleHRDbGlja2VkKCkge1xuICAgIGlmIChnZXREZXZpY2VXaWR0aCgpLmRldmljZSAhPT0gJ21vYmlsZScpIHtcbiAgICAgIHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc1ByZXNzZWRPbk1vYmlsZSA9IHRydWU7XG4gICAgY29uc3QgZXZlbnRIYW5kbGVyID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgdGhpcy5pc1ByZXNzZWRPbk1vYmlsZSA9IGZhbHNlO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudEhhbmRsZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnRIYW5kbGVyKTtcbiAgfVxuXG4gIHNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSgpIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKHRoaXMubWVzc2FnZSk7XG4gIH1cblxuICBnZXRNZW50aW9uQ29udGV4dChtZXNzYWdlUGFydDogTWVzc2FnZVBhcnQpOiBNZW50aW9uVGVtcGxhdGVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogbWVzc2FnZVBhcnQuY29udGVudCxcbiAgICAgIHVzZXI6IG1lc3NhZ2VQYXJ0LnVzZXIhLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQWN0aW9uc0JveENvbnRleHQoKTogTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmlzQWN0aW9uQm94T3BlbixcbiAgICAgIGlzTWluZTogdGhpcy5pc1NlbnRCeUN1cnJlbnRVc2VyLFxuICAgICAgZW5hYmxlZEFjdGlvbnM6IHRoaXMuZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXI6IChjb3VudCkgPT4ge1xuICAgICAgICB0aGlzLnZpc2libGVNZXNzYWdlQWN0aW9uc0NvdW50ID0gY291bnQ7XG4gICAgICAgIC8vIG1lc3NhZ2UgYWN0aW9uIGJveCBjaGFuZ2VzIFVJIGJpbmRpbmdzIGluIHBhcmVudCwgc28gd2UnbGwgaGF2ZSB0byByZXJ1biBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGlzRWRpdGluZ0NoYW5nZUhhbmRsZXI6IChpc0VkaXRpbmcpID0+IHtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBpc0VkaXRpbmc7XG4gICAgICAgIHRoaXMuaXNBY3Rpb25Cb3hPcGVuID0gIXRoaXMuaXNFZGl0aW5nO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZXNzYWdlUGFydHMoKSB7XG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLm1lc3NhZ2U/Lmh0bWwgfHwgdGhpcy5tZXNzYWdlPy50ZXh0O1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJhY2tlbmQgd2lsbCB3cmFwIEhUTUwgY29udGVudCB3aXRoIDxwPjwvcD5cXG5cbiAgICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJzxwPicpKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoJzxwPicsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50LmVuZHNXaXRoKCc8L3A+XFxuJykpIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgnPC9wPlxcbicsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzIHx8XG4gICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIC8vIFdyYXAgZW1vamlzIGluIHNwYW4gdG8gZGlzcGxheSBlbW9qaXMgY29ycmVjdGx5IGluIENocm9tZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01OTYyMjNcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgJ2cnKTtcbiAgICAgICAgLy8gQmFzZWQgb24gdGhpczogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDU2NTExMi9qYXZhc2NyaXB0LWhvdy10by1maW5kLW91dC1pZi10aGUtdXNlci1icm93c2VyLWlzLWNocm9tZVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICAgICAgY29uc3QgaXNDaHJvbWUgPVxuICAgICAgICAgICEhKHdpbmRvdyBhcyBhbnkpLmNocm9tZSAmJlxuICAgICAgICAgIHR5cGVvZiAod2luZG93IGFzIGFueSkub3ByID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICByZWdleCxcbiAgICAgICAgICAobWF0Y2gpID0+XG4gICAgICAgICAgICBgPHNwYW4gJHtcbiAgICAgICAgICAgICAgaXNDaHJvbWUgPyAnY2xhc3M9XCJzdHItY2hhdF9fZW1vamktZGlzcGxheS1maXhcIicgOiAnJ1xuICAgICAgICAgICAgfT4ke21hdGNofTwvc3Bhbj5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cyA9IFt7IGNvbnRlbnQsIHR5cGU6ICd0ZXh0JyB9XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgdGV4dCA9IGNvbnRlbnQ7XG4gICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmZvckVhY2goKHVzZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBtZW50aW9uID0gYEAke3VzZXIubmFtZSB8fCB1c2VyLmlkfWA7XG4gICAgICAgICAgY29uc3QgcHJlY2VkaW5nVGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQuaW5kZXhPZihtZW50aW9uKSk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgY29udGVudDogcHJlY2VkaW5nVGV4dCxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMucHVzaCh7XG4gICAgICAgICAgICBjb250ZW50OiBtZW50aW9uLFxuICAgICAgICAgICAgdHlwZTogJ21lbnRpb24nLFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHByZWNlZGluZ1RleHQgKyBtZW50aW9uLCAnJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cy5wdXNoKHsgY29udGVudDogdGV4dCwgdHlwZTogJ3RleHQnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUgc3RyLWNoYXRfX21lc3NhZ2Ugc3RyLWNoYXRfX21lc3NhZ2UtLXt7XG4gICAgbWVzc2FnZT8udHlwZVxuICB9fSBzdHItY2hhdF9fbWVzc2FnZS0te3sgbWVzc2FnZT8uc3RhdHVzIH19IHt7XG4gICAgbWVzc2FnZT8udGV4dCA/ICdzdHItY2hhdF9fbWVzc2FnZS0taGFzLXRleHQnIDogJ2hhcy1uby10ZXh0J1xuICB9fVwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS0tbWVdPVwiaXNTZW50QnlDdXJyZW50VXNlclwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtLW1lXT1cImlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICBbY2xhc3MubW9iaWxlLXByZXNzXT1cImlzUHJlc3NlZE9uTW9iaWxlXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS1oYXMtYXR0YWNobWVudF09XCJoYXNBdHRhY2htZW50XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS13aXRoLXJlYWN0aW9uc109XCJoYXNSZWFjdGlvbnNcIlxuICBkYXRhLXRlc3RpZD1cIm1lc3NhZ2UtY29udGFpbmVyXCJcbiAgKG1vdXNlbGVhdmUpPVwiaXNBY3Rpb25Cb3hPcGVuID0gZmFsc2VcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1lc3NhZ2U/LmRlbGV0ZWRfYXQ7IGVsc2UgZGVsZXRlZE1lc3NhZ2VcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZT8udHlwZSAhPT0gJ3N5c3RlbSc7IGVsc2Ugc3lzdGVtTWVzc2FnZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzU2VudEJ5Q3VycmVudFVzZXIgJiZcbiAgICAgICAgICAoKGlzTGFzdFNlbnRNZXNzYWdlICYmIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3JlY2VpdmVkJykgfHxcbiAgICAgICAgICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3NlbmRpbmcnKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZT8uc3RhdHVzID09PSAnc2VuZGluZyc7IGVsc2Ugc2VudFN0YXR1c1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZW5kaW5nU3RhdHVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NlbnRTdGF0dXM+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgbW9kZSA9PT0gJ21haW4nICYmXG4gICAgICAgICAgICAgICAgaXNNZXNzYWdlRGVsaXZlcmVkQW5kUmVhZCAmJlxuICAgICAgICAgICAgICAgIGNhbkRpc3BsYXlSZWFkU3RhdHVzO1xuICAgICAgICAgICAgICBlbHNlIGRlbGl2ZXJlZFN0YXR1c1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVhZFN0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICBkYXRhLXRlc3RpZD1cImF2YXRhclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3RcIlxuICAgICAgICBbaW1hZ2VVcmxdPVwibWVzc2FnZT8udXNlcj8uaW1hZ2VcIlxuICAgICAgICBbbmFtZV09XCJtZXNzYWdlPy51c2VyPy5uYW1lIHx8IG1lc3NhZ2U/LnVzZXI/LmlkXCJcbiAgICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgICBsb2NhdGlvbj1cIm1lc3NhZ2Utc2VuZGVyXCJcbiAgICAgICAgW3VzZXJdPVwibWVzc2FnZT8udXNlciB8fCB1bmRlZmluZWRcIlxuICAgICAgPjwvc3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1pbm5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibWVzc2FnZS1vcHRpb25zXCJcbiAgICAgICAgICAqbmdJZj1cImFyZU9wdGlvbnNWaXNpYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibWVzc2FnZS1hY3Rpb25zLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvblxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tb3B0aW9uc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdC1hbmd1bGFyX19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uLS1vcHRpb25zLS1lZGl0aW5nXT1cIlxuICAgICAgICAgICAgICBpc0VkaXRpbmdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICNkZWZhdWx0TWVzc2FnZUFjdGlvbnNCb3hcbiAgICAgICAgICAgICAgbGV0LWlzT3Blbj1cImlzT3BlblwiXG4gICAgICAgICAgICAgIGxldC1pc01pbmU9XCJpc01pbmVcIlxuICAgICAgICAgICAgICBsZXQtZW5hYmxlZEFjdGlvbnM9XCJlbmFibGVkQWN0aW9uc1wiXG4gICAgICAgICAgICAgIGxldC1tZXNzYWdlSW5wdXQ9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgbGV0LWRpc3BsYXllZEFjdGlvbnNDb3VudENoYW5lSGFubGVyPVwiZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXJcIlxuICAgICAgICAgICAgICBsZXQtaXNFZGl0aW5nQ2hhbmdlSGFuZGxlcj1cImlzRWRpdGluZ0NoYW5nZUhhbmRsZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3hcbiAgICAgICAgICAgICAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgICAgICAgICAgICAgW2lzTWluZV09XCJpc01pbmVcIlxuICAgICAgICAgICAgICAgIFtlbmFibGVkQWN0aW9uc109XCJlbmFibGVkQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUlucHV0XCJcbiAgICAgICAgICAgICAgICAoZGlzcGxheWVkQWN0aW9uc0NvdW50KT1cIlxuICAgICAgICAgICAgICAgICAgZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXIoJGV2ZW50KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGlzRWRpdGluZyk9XCJpc0VkaXRpbmdDaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9zdHJlYW0tbWVzc2FnZS1hY3Rpb25zLWJveD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgbWVzc2FnZUFjdGlvbnNCb3hUZW1wbGF0ZSB8fCBkZWZhdWx0TWVzc2FnZUFjdGlvbnNCb3g7XG4gICAgICAgICAgICAgICAgY29udGV4dDogZ2V0TWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0KClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAqbmdJZj1cInZpc2libGVNZXNzYWdlQWN0aW9uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICBpY29uPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNBY3Rpb25Cb3hPcGVuID0gIWlzQWN0aW9uQm94T3BlblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpc0FjdGlvbkJveE9wZW4gPSAhaXNBY3Rpb25Cb3hPcGVuXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2NvbmRpdGlvbmFsLWNvbXBsZXhpdHkgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLmluZGV4T2YoJ3NlbmQtcmVwbHknKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgbW9kZSA9PT0gJ21haW4nXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb25cbiAgICAgICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb24tLXRocmVhZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVwbHktaW4tdGhyZWFkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBc0FjdGl2ZVBhcmVudE1lc3NhZ2UoKVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICBpY29uPVwicmVwbHktaW4tdGhyZWFkXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuUmVhY3RUb01lc3NhZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb25cbiAgICAgICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb24tLXJlYWN0aW9uc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVhY3Rpb24taWNvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9ICFpc1JlYWN0aW9uU2VsZWN0b3JPcGVuXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJpc1JlYWN0aW9uU2VsZWN0b3JPcGVuID0gIWlzUmVhY3Rpb25TZWxlY3Rvck9wZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICBpY29uPVwicmVhY3Rpb24taWNvblwiXG4gICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gZXNsaW50LWVuYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvY29uZGl0aW9uYWwtY29tcGxleGl0eSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2RlZmF1bHRNZXNzYWdlUmVhY3Rpb25zXG4gICAgICAgICAgbGV0LW1lc3NhZ2VSZWFjdGlvbkNvdW50cz1cIm1lc3NhZ2VSZWFjdGlvbkNvdW50c1wiXG4gICAgICAgICAgbGV0LWxhdGVzdFJlYWN0aW9ucz1cImxhdGVzdFJlYWN0aW9uc1wiXG4gICAgICAgICAgbGV0LWlzU2VsZWN0b3JPcGVuPVwiaXNTZWxlY3Rvck9wZW5cIlxuICAgICAgICAgIGxldC1pc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXI9XCJpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXJcIlxuICAgICAgICAgIGxldC1tZXNzYWdlSWQ9XCJtZXNzYWdlSWRcIlxuICAgICAgICAgIGxldC1vd25SZWFjdGlvbnM9XCJvd25SZWFjdGlvbnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN0cmVhbS1tZXNzYWdlLXJlYWN0aW9uc1xuICAgICAgICAgICAgW21lc3NhZ2VSZWFjdGlvbkNvdW50c109XCJtZXNzYWdlUmVhY3Rpb25Db3VudHNcIlxuICAgICAgICAgICAgW2xhdGVzdFJlYWN0aW9uc109XCJsYXRlc3RSZWFjdGlvbnNcIlxuICAgICAgICAgICAgW2lzU2VsZWN0b3JPcGVuXT1cImlzU2VsZWN0b3JPcGVuXCJcbiAgICAgICAgICAgIChpc1NlbGVjdG9yT3BlbkNoYW5nZSk9XCJpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbWVzc2FnZUlkXT1cIm1lc3NhZ2VJZFwiXG4gICAgICAgICAgICBbb3duUmVhY3Rpb25zXT1cIm93blJlYWN0aW9uc1wiXG4gICAgICAgICAgPjwvc3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VSZWFjdGlvbnNUZW1wbGF0ZSB8fCBkZWZhdWx0TWVzc2FnZVJlYWN0aW9ucztcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0KClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNBdHRhY2htZW50ICYmICFtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1xuICAgICAgICAgICAgbGV0LW1lc3NhZ2VJZD1cIm1lc3NhZ2VJZFwiXG4gICAgICAgICAgICBsZXQtYXR0YWNobWVudHM9XCJhdHRhY2htZW50c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LWxpc3RcbiAgICAgICAgICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlSWRcIlxuICAgICAgICAgICAgICBbYXR0YWNobWVudHNdPVwiYXR0YWNobWVudHNcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWF0dGFjaG1lbnQtbGlzdD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50TGlzdENvbnRleHQoKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS10ZXh0XCJcbiAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2U/LnRleHQgfHwgKG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlICYmIGhhc0F0dGFjaG1lbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaW5uZXItbWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZXh0LWlubmVyIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10ZXh0LWlubmVyXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLWxpZ2h0LXRleHQtaW5uZXItLWhhcy1hdHRhY2htZW50XT1cIlxuICAgICAgICAgICAgICBoYXNBdHRhY2htZW50XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnICYmIG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSAhPT0gNDAzXG4gICAgICAgICAgICAgICAgPyByZXNlbmRNZXNzYWdlKClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJcbiAgICAgICAgICAgICAgbWVzc2FnZT8uc3RhdHVzID09PSAnZmFpbGVkJyAmJiBtZXNzYWdlPy5lcnJvclN0YXR1c0NvZGUgIT09IDQwM1xuICAgICAgICAgICAgICAgID8gcmVzZW5kTWVzc2FnZSgpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInF1b3RlZE1lc3NhZ2VcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzQXR0YWNobWVudCAmJiBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZVwiXG4gICAgICAgICAgICAgIFthdHRhY2htZW50c109XCJtZXNzYWdlIS5hdHRhY2htZW50cyFcIlxuICAgICAgICAgICAgICBbbWVzc2FnZUlkXT1cIm1lc3NhZ2UhLmlkXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY2xpZW50LWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2U/LnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zaW1wbGUtbWVzc2FnZS0tZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5FcnJvciDCtyBVbnNlbnRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZT8uc3RhdHVzID09PSAnZmFpbGVkJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NpbXBsZS1tZXNzYWdlLS1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAobWVzc2FnZT8uZXJyb3JTdGF0dXNDb2RlID09PSA0MDNcbiAgICAgICAgICAgICAgICAgID8gXCJzdHJlYW1DaGF0Lk1lc3NhZ2UgRmFpbGVkIMK3IFVuYXV0aG9yaXplZFwiXG4gICAgICAgICAgICAgICAgICA6IFwic3RyZWFtQ2hhdC5NZXNzYWdlIEZhaWxlZCDCtyBDbGljayB0byB0cnkgYWdhaW5cIlxuICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAoY2xpY2spPVwidGV4dENsaWNrZWQoKVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ0ZXh0Q2xpY2tlZCgpXCJcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgPCEtLSBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL3VzZS10cmFjay1ieS1mdW5jdGlvbiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYXJ0IG9mIG1lc3NhZ2VUZXh0UGFydHNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFydC50eXBlID09PSAndGV4dCc7IGVsc2UgbWVudGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicGFydC5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21lbnRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lbnRpb24gbGV0LWNvbnRlbnQ9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGI+e3sgY29udGVudCB9fTwvYj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtZW50aW9uVGVtcGxhdGUgfHwgZGVmYXVsdE1lbnRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBnZXRNZW50aW9uQ29udGV4dChwYXJ0KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1yZXBseS1idXR0b25cIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhIW1lc3NhZ2U/LnJlcGx5X2NvdW50ICYmXG4gICAgICAgICAgICAgIG1vZGUgIT09ICd0aHJlYWQnICYmXG4gICAgICAgICAgICAgIGVuYWJsZWRNZXNzYWdlQWN0aW9ucy5pbmRleE9mKCdzZW5kLXJlcGx5JykgIT09IC0xXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZXBsaWVzLWNvdW50LWJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlcGx5LWNvdW50LWJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwicmVwbHlcIj48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAge3ttZXNzYWdlPy5yZXBseV9jb3VudCA9PT0gMSA/ICgnc3RyZWFtQ2hhdC4xIHJlcGx5JyB8IHRyYW5zbGF0ZSkgOiAoJ3N0cmVhbUNoYXQue3sgcmVwbHlDb3VudCB9fVxuICAgICAgICAgICAgcmVwbGllcycgfCB0cmFuc2xhdGU6cmVwbHlDb3VudFBhcmFtKX19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtZGF0YSBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtZGF0YVwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInNlbmRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIiFpc1NlbnRCeUN1cnJlbnRVc2VyXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLW5hbWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG1lc3NhZ2U/LnVzZXI/Lm5hbWUgPyBtZXNzYWdlPy51c2VyPy5uYW1lIDogbWVzc2FnZT8udXNlcj8uaWQgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gZGF0YS10ZXN0aWQ9XCJkYXRlXCIgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtdGltZXN0YW1wXCI+XG4gICAgICAgICAgICB7eyBwYXJzZWREYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NlbmRpbmdTdGF0dXM+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJcbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXMgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cy1hbmd1bGFyXG4gICAgXCJcbiAgICBkYXRhLXRlc3RpZD1cInNlbmRpbmctaW5kaWNhdG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdG9vbHRpcFwiPlxuICAgICAge3sgXCJzdHJlYW1DaGF0LlNlbmRpbmcuLi5cIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0tbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXJcbiAgICAgIGRhdGEtdGVzdGlkPVwibG9hZGluZy1pbmRpY2F0b3JcIlxuICAgID48L3N0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlcj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVhZFN0YXR1cz5cbiAgPHNwYW5cbiAgICBjbGFzcz1cIlxuICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cyBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLWFuZ3VsYXJcbiAgICBcIlxuICAgIGRhdGEtdGVzdGlkPVwicmVhZC1pbmRpY2F0b3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCIgZGF0YS10ZXN0aWQ9XCJyZWFkLWJ5LXRvb2x0aXBcIj5cbiAgICAgIHt7IHJlYWRCeVRleHQgfX1cbiAgICA8L2Rpdj5cbiAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgY2xhc3M9XCJzdHItY2hhdC1hbmd1bGFyX19hdmF0YXItaG9zdFwiXG4gICAgICBkYXRhLXRlc3QtaWQ9XCJsYXN0LXJlYWQtdXNlci1hdmF0YXJcIlxuICAgICAgW3NpemVdPVwiMTVcIlxuICAgICAgW2ltYWdlVXJsXT1cImxhc3RSZWFkVXNlcj8uaW1hZ2VcIlxuICAgICAgW25hbWVdPVwibGFzdFJlYWRVc2VyPy5uYW1lIHx8IGxhc3RSZWFkVXNlcj8uaWRcIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgbG9jYXRpb249XCJtZXNzYWdlLXJlYWRlclwiXG4gICAgICBbdXNlcl09XCJsYXN0UmVhZFVzZXJcIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgPHNwYW5cbiAgICAgIGRhdGEtdGVzdC1pZD1cInJlYWQtYnktbGVuZ3RoXCJcbiAgICAgICpuZ0lmPVwiaXNSZWFkQnlNdWx0aXBsZVVzZXJzXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cy1udW1iZXJcIlxuICAgID5cbiAgICAgIHt7IChtZXNzYWdlPy5yZWFkQnkpIS5sZW5ndGggfX1cbiAgICA8L3NwYW4+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlbGl2ZXJlZFN0YXR1cz5cbiAgPHNwYW5cbiAgICAqbmdJZj1cIm1vZGUgPT09ICdtYWluJ1wiXG4gICAgY2xhc3M9XCJcbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXMgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cy1hbmd1bGFyXG4gICAgXCJcbiAgICBkYXRhLXRlc3RpZD1cImRlbGl2ZXJlZC1pbmRpY2F0b3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICB7eyBcInN0cmVhbUNoYXQuRGVsaXZlcmVkXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGVsaXZlcmVkLWljb25cIlxuICAgICAgaWNvbj1cImRlbGl2ZXJlZC1pY29uXCJcbiAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWxldGVkTWVzc2FnZT5cbiAgPGRpdiBkYXRhLXRlc3RpZD1cIm1lc3NhZ2UtZGVsZXRlZC1jb21wb25lbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLWRlbGV0ZWQtaW5uZXJcIiB0cmFuc2xhdGU+XG4gICAgICBzdHJlYW1DaGF0LlRoaXMgbWVzc2FnZSB3YXMgZGVsZXRlZC4uLlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3lzdGVtTWVzc2FnZT5cbiAgPGRpdiBkYXRhLXRlc3RpZD1cInN5c3RlbS1tZXNzYWdlXCIgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX3RleHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX19saW5lXCI+PC9kaXY+XG4gICAgICA8cD57eyBtZXNzYWdlPy50ZXh0IH19PC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX2xpbmVcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fZGF0ZVwiPlxuICAgICAge3sgcGFyc2VkRGF0ZSB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcXVvdGVkTWVzc2FnZT5cbiAgPGRpdlxuICAgICpuZ0lmPVwibWVzc2FnZT8ucXVvdGVkX21lc3NhZ2VcIlxuICAgIGNsYXNzPVwicXVvdGVkLW1lc3NhZ2VcIlxuICAgIGRhdGEtdGVzdGlkPVwicXVvdGVkLW1lc3NhZ2UtY29udGFpbmVyXCJcbiAgICBbY2xhc3MubWluZV09XCJpc1NlbnRCeUN1cnJlbnRVc2VyXCJcbiAgPlxuICAgIDxzdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyXG4gICAgICBkYXRhLXRlc3RpZD1cInFvdXRlZC1tZXNzYWdlLWF2YXRhclwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgIFtpbWFnZVVybF09XCJtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8udXNlcj8uaW1hZ2VcIlxuICAgICAgW25hbWVdPVwiXG4gICAgICAgIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy51c2VyPy5uYW1lIHx8IG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy51c2VyPy5pZFxuICAgICAgXCJcbiAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgIHR5cGU9XCJ1c2VyXCJcbiAgICAgIGxvY2F0aW9uPVwicXVvdGVkLW1lc3NhZ2Utc2VuZGVyXCJcbiAgICAgIFt1c2VyXT1cIm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy51c2VyIHx8IHVuZGVmaW5lZFwiXG4gICAgPjwvc3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlcj5cbiAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtaW5uZXJcIj5cbiAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmF0dGFjaG1lbnRzICYmXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dGFjaG1lbnRzXT1cInF1b3RlZE1lc3NhZ2VBdHRhY2htZW50c1wiXG4gICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmlkXCJcbiAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwicXVvdGVkLW1lc3NhZ2UtdGV4dFwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/Lmh0bWwgfHwgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnRleHRcbiAgICAgICAgXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUdyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7O0FBUTFDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGdCQUFnQjtJQW1DM0IsWUFDVSxpQkFBb0MsRUFDcEMsY0FBOEIsRUFDOUIsc0JBQThDLEVBQzlDLEtBQXdCO1FBSHhCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFsQ2xDOztXQUVHO1FBQ00sMEJBQXFCLEdBQWEsRUFBRSxDQUFDO1FBSzlDOztXQUVHO1FBQ00sU0FBSSxHQUFzQixNQUFNLENBQUM7UUFJMUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQiwrQkFBMEIsR0FBRyxDQUFDLENBQUM7UUFDL0IscUJBQWdC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QUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUM3RDthQUNGO1NBQ0Y7SUFDSCxDQUFDOzs2R0F4U1UsZ0JBQWdCO2lHQUFoQixnQkFBZ0IseVRDNUM3QixtM2VBdWFBOzJGRDNYYSxnQkFBZ0I7a0JBTDVCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7ME1BS1UsT0FBTztzQkFBZixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFJRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQWUwQixTQUFTO3NCQUF4QyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0RGV2aWNlV2lkdGggfSBmcm9tICcuLi9kZXZpY2Utd2lkdGgnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudExpc3RDb250ZXh0LFxuICBNZW50aW9uVGVtcGxhdGVDb250ZXh0LFxuICBNZXNzYWdlQWN0aW9uc0JveENvbnRleHQsXG4gIE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0LFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBTdHJlYW1NZXNzYWdlLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuL3BhcnNlLWRhdGUnO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSAnZW1vamktcmVnZXgnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IGxpc3RVc2VycyB9IGZyb20gJy4uL2xpc3QtdXNlcnMnO1xuXG50eXBlIE1lc3NhZ2VQYXJ0ID0ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHR5cGU6ICd0ZXh0JyB8ICdtZW50aW9uJztcbiAgdXNlcj86IFVzZXJSZXNwb25zZTtcbn07XG5cbi8qKlxuICogVGhlIGBNZXNzYWdlYCBjb21wb25lbnQgZGlzcGxheXMgYSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNlbmRlciBhbmQgZGF0ZSwgYW5kIGVuYWJsZXMgW2ludGVyYWN0aW9uIHdpdGggdGhlIG1lc3NhZ2UgKGkuZS4gZWRpdCBvciByZWFjdCldKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBbY2hhbm5lbCBjYXBhYmlsaXRpZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSB0aGF0IGFyZSBlbmFibGVkIGZvciB0aGUgY3VycmVudCB1c2VyLCB0aGUgbGlzdCBvZiBbc3VwcG9ydGVkIGludGVyYWN0aW9uc10oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KSBjYW4gYmUgZm91bmQgaW4gb3VyIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuIFVuYXRob3JpemVkIGFjdGlvbnMgd29uJ3QgYmUgZGlzcGxheWVkIG9uIHRoZSBVSS4gVGhlIFtgTWVzc2FnZUxpc3RgXSguL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keCkgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIGJhc2VkIG9uIFtjaGFubmVsIGNhcGFiaWxpdGllc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVzc2FnZSBzdGF0dXMgKHNlbmRpbmcsIHNlbnQsIHdobyByZWFkIHRoZSBtZXNzYWdlKSBpcyBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpc0xhc3RTZW50TWVzc2FnZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZGlzcGFseWVkIGluIGEgY2hhbm5lbCBvciBpbiBhIFt0aHJlYWRdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgPSAnbWFpbic7XG4gIGNhblJlY2VpdmVSZWFkRXZlbnRzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjYW5SZWFjdFRvTWVzc2FnZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNFZGl0aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0FjdGlvbkJveE9wZW4gPSBmYWxzZTtcbiAgaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9IGZhbHNlO1xuICBpc1ByZXNzZWRPbk1vYmlsZSA9IGZhbHNlO1xuICB2aXNpYmxlTWVzc2FnZUFjdGlvbnNDb3VudCA9IDA7XG4gIG1lc3NhZ2VUZXh0UGFydHM6IE1lc3NhZ2VQYXJ0W10gPSBbXTtcbiAgbWVudGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZW50aW9uVGVtcGxhdGVDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgYXR0YWNobWVudExpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8QXR0YWNobWVudExpc3RDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZUFjdGlvbnNCb3hUZW1wbGF0ZTogVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlUmVhY3Rpb25zQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlcjogVXNlclJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHByaXZhdGUgY29udGFpbmVyOlxuICAgIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgICB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy51c2VyID0gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5jaGF0Q2xpZW50LnVzZXI7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZW50aW9uVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZW50aW9uVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmF0dGFjaG1lbnRMaXN0VGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5hdHRhY2htZW50TGlzdFRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMubWVzc2FnZUFjdGlvbnNCb3hUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMubWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLmNyZWF0ZU1lc3NhZ2VQYXJ0cygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMpIHtcbiAgICAgIHRoaXMuY2FuUmVhY3RUb01lc3NhZ2UgPVxuICAgICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucy5pbmRleE9mKCdzZW5kLXJlYWN0aW9uJykgIT09IC0xO1xuICAgICAgdGhpcy5jYW5SZWNlaXZlUmVhZEV2ZW50cyA9XG4gICAgICAgIHRoaXMuZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLmluZGV4T2YoJ3JlYWQtZXZlbnRzJykgIT09IC0xO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgZ2V0IGlzU2VudEJ5Q3VycmVudFVzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZT8udXNlcj8uaWQgPT09IHRoaXMudXNlcj8uaWQ7XG4gIH1cblxuICBnZXQgcmVhZEJ5VGV4dCgpIHtcbiAgICByZXR1cm4gbGlzdFVzZXJzKHRoaXMubWVzc2FnZSEucmVhZEJ5KTtcbiAgfVxuXG4gIGdldCBsYXN0UmVhZFVzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZT8ucmVhZEJ5LmZpbHRlcigodSkgPT4gdS5pZCAhPT0gdGhpcy51c2VyPy5pZClbMF07XG4gIH1cblxuICBnZXQgaXNPbmx5UmVhZEJ5TWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2UucmVhZEJ5Lmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGdldCBpc1JlYWRCeU11bHRpcGxlVXNlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2UucmVhZEJ5Lmxlbmd0aCA+IDE7XG4gIH1cblxuICBnZXQgaXNNZXNzYWdlRGVsaXZlcmVkQW5kUmVhZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tZXNzYWdlICYmXG4gICAgICB0aGlzLm1lc3NhZ2UucmVhZEJ5ICYmXG4gICAgICB0aGlzLm1lc3NhZ2Uuc3RhdHVzID09PSAncmVjZWl2ZWQnICYmXG4gICAgICB0aGlzLm1lc3NhZ2UucmVhZEJ5Lmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgZ2V0IHBhcnNlZERhdGUoKSB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2UgfHwgIXRoaXMubWVzc2FnZT8uY3JlYXRlZF9hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VEYXRlKHRoaXMubWVzc2FnZS5jcmVhdGVkX2F0KTtcbiAgfVxuXG4gIGdldCBhcmVPcHRpb25zVmlzaWJsZSgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gIShcbiAgICAgICF0aGlzLm1lc3NhZ2UudHlwZSB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnR5cGUgPT09ICdlcnJvcicgfHxcbiAgICAgIHRoaXMubWVzc2FnZS50eXBlID09PSAnc3lzdGVtJyB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnR5cGUgPT09ICdlcGhlbWVyYWwnIHx8XG4gICAgICB0aGlzLm1lc3NhZ2Uuc3RhdHVzID09PSAnZmFpbGVkJyB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnN0YXR1cyA9PT0gJ3NlbmRpbmcnIHx8XG4gICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiAhdGhpcy5tZXNzYWdlLnBhcmVudF9pZClcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0F0dGFjaG1lbnQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5tZXNzYWdlPy5hdHRhY2htZW50cyAmJiAhIXRoaXMubWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGg7XG4gIH1cblxuICBnZXQgaGFzUmVhY3Rpb25zKCkge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMubWVzc2FnZT8ucmVhY3Rpb25fY291bnRzICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLm1lc3NhZ2UucmVhY3Rpb25fY291bnRzKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGdldCByZXBseUNvdW50UGFyYW0oKSB7XG4gICAgcmV0dXJuIHsgcmVwbHlDb3VudDogdGhpcy5tZXNzYWdlPy5yZXBseV9jb3VudCB9O1xuICB9XG5cbiAgZ2V0IGNhbkRpc3BsYXlSZWFkU3RhdHVzKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNhblJlY2VpdmVSZWFkRXZlbnRzICE9PSBmYWxzZSAmJlxuICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMuaW5kZXhPZigncmVhZC1ldmVudHMnKSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1b3RlZE1lc3NhZ2VBdHRhY2htZW50cygpIHtcbiAgICBjb25zdCBvcmlnaW5hbEF0dGFjaG1lbnRzID0gdGhpcy5tZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8uYXR0YWNobWVudHM7XG4gICAgcmV0dXJuIG9yaWdpbmFsQXR0YWNobWVudHMgJiYgb3JpZ2luYWxBdHRhY2htZW50cy5sZW5ndGhcbiAgICAgID8gW29yaWdpbmFsQXR0YWNobWVudHNbMF1dXG4gICAgICA6IFtdO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudExpc3RDb250ZXh0KCk6IEF0dGFjaG1lbnRMaXN0Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VJZDogdGhpcy5tZXNzYWdlPy5pZCB8fCAnJyxcbiAgICAgIGF0dGFjaG1lbnRzOiB0aGlzLm1lc3NhZ2U/LmF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgcGFyZW50TWVzc2FnZUlkOiB0aGlzLm1lc3NhZ2U/LnBhcmVudF9pZCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UXVvdGVkTWVzc2FnZUF0dGFjaG1lbnRMaXN0Q29udGV4dCgpOiBBdHRhY2htZW50TGlzdENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlSWQ6IHRoaXMubWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmlkIHx8ICcnLFxuICAgICAgYXR0YWNobWVudHM6IHRoaXMucXVvdGVkTWVzc2FnZUF0dGFjaG1lbnRzLFxuICAgICAgcGFyZW50TWVzc2FnZUlkOiB0aGlzPy5tZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8ucGFyZW50X2lkLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCgpOiBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VSZWFjdGlvbkNvdW50czogdGhpcy5tZXNzYWdlPy5yZWFjdGlvbl9jb3VudHMgfHwge30sXG4gICAgICBsYXRlc3RSZWFjdGlvbnM6IHRoaXMubWVzc2FnZT8ubGF0ZXN0X3JlYWN0aW9ucyB8fCBbXSxcbiAgICAgIGlzU2VsZWN0b3JPcGVuOiB0aGlzLmlzUmVhY3Rpb25TZWxlY3Rvck9wZW4sXG4gICAgICBpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+XG4gICAgICAgICh0aGlzLmlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSBpc09wZW4pLFxuICAgICAgbWVzc2FnZUlkOiB0aGlzLm1lc3NhZ2U/LmlkLFxuICAgICAgb3duUmVhY3Rpb25zOiB0aGlzLm1lc3NhZ2U/Lm93bl9yZWFjdGlvbnMgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIHJlc2VuZE1lc3NhZ2UoKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnJlc2VuZE1lc3NhZ2UodGhpcy5tZXNzYWdlISk7XG4gIH1cblxuICB0ZXh0Q2xpY2tlZCgpIHtcbiAgICBpZiAoZ2V0RGV2aWNlV2lkdGgoKS5kZXZpY2UgIT09ICdtb2JpbGUnKSB7XG4gICAgICB0aGlzLmlzUHJlc3NlZE9uTW9iaWxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUHJlc3NlZE9uTW9iaWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUgPSB0cnVlO1xuICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgIHRoaXMuaXNQcmVzc2VkT25Nb2JpbGUgPSBmYWxzZTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50SGFuZGxlcik7XG4gIH1cblxuICBzZXRBc0FjdGl2ZVBhcmVudE1lc3NhZ2UoKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSh0aGlzLm1lc3NhZ2UpO1xuICB9XG5cbiAgZ2V0TWVudGlvbkNvbnRleHQobWVzc2FnZVBhcnQ6IE1lc3NhZ2VQYXJ0KTogTWVudGlvblRlbXBsYXRlQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IG1lc3NhZ2VQYXJ0LmNvbnRlbnQsXG4gICAgICB1c2VyOiBtZXNzYWdlUGFydC51c2VyISxcbiAgICB9O1xuICB9XG5cbiAgZ2V0TWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0KCk6IE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzT3BlbjogdGhpcy5pc0FjdGlvbkJveE9wZW4sXG4gICAgICBpc01pbmU6IHRoaXMuaXNTZW50QnlDdXJyZW50VXNlcixcbiAgICAgIGVuYWJsZWRBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudENoYW5lSGFubGVyOiAoY291bnQpID0+IHtcbiAgICAgICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbnNDb3VudCA9IGNvdW50O1xuICAgICAgICAvLyBtZXNzYWdlIGFjdGlvbiBib3ggY2hhbmdlcyBVSSBiaW5kaW5ncyBpbiBwYXJlbnQsIHNvIHdlJ2xsIGhhdmUgdG8gcmVydW4gY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBpc0VkaXRpbmdDaGFuZ2VIYW5kbGVyOiAoaXNFZGl0aW5nKSA9PiB7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nID0gaXNFZGl0aW5nO1xuICAgICAgICB0aGlzLmlzQWN0aW9uQm94T3BlbiA9ICF0aGlzLmlzRWRpdGluZztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVzc2FnZVBhcnRzKCkge1xuICAgIGxldCBjb250ZW50ID0gdGhpcy5tZXNzYWdlPy5odG1sIHx8IHRoaXMubWVzc2FnZT8udGV4dDtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrZW5kIHdpbGwgd3JhcCBIVE1MIGNvbnRlbnQgd2l0aCA8cD48L3A+XFxuXG4gICAgICBpZiAoY29udGVudC5zdGFydHNXaXRoKCc8cD4nKSkge1xuICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKCc8cD4nLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGVudC5lbmRzV2l0aCgnPC9wPlxcbicpKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoJzwvcD5cXG4nLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLm1lc3NhZ2UhLm1lbnRpb25lZF91c2VycyB8fFxuICAgICAgICB0aGlzLm1lc3NhZ2UhLm1lbnRpb25lZF91c2Vycy5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICAvLyBXcmFwIGVtb2ppcyBpbiBzcGFuIHRvIGRpc3BsYXkgZW1vamlzIGNvcnJlY3RseSBpbiBDaHJvbWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTk2MjIzXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksICdnJyk7XG4gICAgICAgIC8vIEJhc2VkIG9uIHRoaXM6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ1NjUxMTIvamF2YXNjcmlwdC1ob3ctdG8tZmluZC1vdXQtaWYtdGhlLXVzZXItYnJvd3Nlci1pcy1jaHJvbWVcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gICAgICAgIGNvbnN0IGlzQ2hyb21lID1cbiAgICAgICAgICAhISh3aW5kb3cgYXMgYW55KS5jaHJvbWUgJiZcbiAgICAgICAgICB0eXBlb2YgKHdpbmRvdyBhcyBhbnkpLm9wciA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgcmVnZXgsXG4gICAgICAgICAgKG1hdGNoKSA9PlxuICAgICAgICAgICAgYDxzcGFuICR7XG4gICAgICAgICAgICAgIGlzQ2hyb21lID8gJ2NsYXNzPVwic3RyLWNoYXRfX2Vtb2ppLWRpc3BsYXktZml4XCInIDogJydcbiAgICAgICAgICAgIH0+JHttYXRjaH08L3NwYW4+YFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMgPSBbeyBjb250ZW50LCB0eXBlOiAndGV4dCcgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMgPSBbXTtcbiAgICAgICAgbGV0IHRleHQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLm1lc3NhZ2UhLm1lbnRpb25lZF91c2Vycy5mb3JFYWNoKCh1c2VyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWVudGlvbiA9IGBAJHt1c2VyLm5hbWUgfHwgdXNlci5pZH1gO1xuICAgICAgICAgIGNvbnN0IHByZWNlZGluZ1RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0LmluZGV4T2YobWVudGlvbikpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cy5wdXNoKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHByZWNlZGluZ1RleHQsXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgY29udGVudDogbWVudGlvbixcbiAgICAgICAgICAgIHR5cGU6ICdtZW50aW9uJyxcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShwcmVjZWRpbmdUZXh0ICsgbWVudGlvbiwgJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMucHVzaCh7IGNvbnRlbnQ6IHRleHQsIHR5cGU6ICd0ZXh0JyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlIHN0ci1jaGF0X19tZXNzYWdlIHN0ci1jaGF0X19tZXNzYWdlLS17e1xuICAgIG1lc3NhZ2U/LnR5cGVcbiAgfX0gc3RyLWNoYXRfX21lc3NhZ2UtLXt7IG1lc3NhZ2U/LnN0YXR1cyB9fSB7e1xuICAgIG1lc3NhZ2U/LnRleHQgPyAnc3RyLWNoYXRfX21lc3NhZ2UtLWhhcy10ZXh0JyA6ICdoYXMtbm8tdGV4dCdcbiAgfX1cIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtLW1lXT1cImlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLS1tZV09XCJpc1NlbnRCeUN1cnJlbnRVc2VyXCJcbiAgW2NsYXNzLm1vYmlsZS1wcmVzc109XCJpc1ByZXNzZWRPbk1vYmlsZVwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS0taGFzLWF0dGFjaG1lbnRdPVwiaGFzQXR0YWNobWVudFwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS0td2l0aC1yZWFjdGlvbnNdPVwiaGFzUmVhY3Rpb25zXCJcbiAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWNvbnRhaW5lclwiXG4gIChtb3VzZWxlYXZlKT1cImlzQWN0aW9uQm94T3BlbiA9IGZhbHNlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtZXNzYWdlPy5kZWxldGVkX2F0OyBlbHNlIGRlbGV0ZWRNZXNzYWdlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2U/LnR5cGUgIT09ICdzeXN0ZW0nOyBlbHNlIHN5c3RlbU1lc3NhZ2VcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBpc1NlbnRCeUN1cnJlbnRVc2VyICYmXG4gICAgICAgICAgKChpc0xhc3RTZW50TWVzc2FnZSAmJiBtZXNzYWdlPy5zdGF0dXMgPT09ICdyZWNlaXZlZCcpIHx8XG4gICAgICAgICAgICBtZXNzYWdlPy5zdGF0dXMgPT09ICdzZW5kaW5nJylcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3NlbmRpbmcnOyBlbHNlIHNlbnRTdGF0dXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VuZGluZ1N0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzZW50U3RhdHVzPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIG1vZGUgPT09ICdtYWluJyAmJlxuICAgICAgICAgICAgICAgIGlzTWVzc2FnZURlbGl2ZXJlZEFuZFJlYWQgJiZcbiAgICAgICAgICAgICAgICBjYW5EaXNwbGF5UmVhZFN0YXR1cztcbiAgICAgICAgICAgICAgZWxzZSBkZWxpdmVyZWRTdGF0dXNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlYWRTdGF0dXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJhdmF0YXJcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgW2ltYWdlVXJsXT1cIm1lc3NhZ2U/LnVzZXI/LmltYWdlXCJcbiAgICAgICAgW25hbWVdPVwibWVzc2FnZT8udXNlcj8ubmFtZSB8fCBtZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICAgIHR5cGU9XCJ1c2VyXCJcbiAgICAgICAgbG9jYXRpb249XCJtZXNzYWdlLXNlbmRlclwiXG4gICAgICAgIFt1c2VyXT1cIm1lc3NhZ2U/LnVzZXIgfHwgdW5kZWZpbmVkXCJcbiAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtaW5uZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1lc3NhZ2Utb3B0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCJhcmVPcHRpb25zVmlzaWJsZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1lc3NhZ2UtYWN0aW9ucy1jb250YWluZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb25cbiAgICAgICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb24tLW9wdGlvbnNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3Muc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tb3B0aW9ucy0tZWRpdGluZ109XCJcbiAgICAgICAgICAgICAgaXNFZGl0aW5nXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAjZGVmYXVsdE1lc3NhZ2VBY3Rpb25zQm94XG4gICAgICAgICAgICAgIGxldC1pc09wZW49XCJpc09wZW5cIlxuICAgICAgICAgICAgICBsZXQtaXNNaW5lPVwiaXNNaW5lXCJcbiAgICAgICAgICAgICAgbGV0LWVuYWJsZWRBY3Rpb25zPVwiZW5hYmxlZEFjdGlvbnNcIlxuICAgICAgICAgICAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgIGxldC1kaXNwbGF5ZWRBY3Rpb25zQ291bnRDaGFuZUhhbmxlcj1cImRpc3BsYXllZEFjdGlvbnNDb3VudENoYW5lSGFubGVyXCJcbiAgICAgICAgICAgICAgbGV0LWlzRWRpdGluZ0NoYW5nZUhhbmRsZXI9XCJpc0VkaXRpbmdDaGFuZ2VIYW5kbGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHN0cmVhbS1tZXNzYWdlLWFjdGlvbnMtYm94XG4gICAgICAgICAgICAgICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICAgICAgICAgICAgIFtpc01pbmVdPVwiaXNNaW5lXCJcbiAgICAgICAgICAgICAgICBbZW5hYmxlZEFjdGlvbnNdPVwiZW5hYmxlZEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICAgICAgICAgICAgKGRpc3BsYXllZEFjdGlvbnNDb3VudCk9XCJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudENoYW5lSGFubGVyKCRldmVudClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChpc0VkaXRpbmcpPVwiaXNFZGl0aW5nQ2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvc3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3g+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGUgfHwgZGVmYXVsdE1lc3NhZ2VBY3Rpb25zQm94O1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGdldE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCgpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ2aXNpYmxlTWVzc2FnZUFjdGlvbnNDb3VudCA+IDBcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgaWNvbj1cImFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImlzQWN0aW9uQm94T3BlbiA9ICFpc0FjdGlvbkJveE9wZW5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaXNBY3Rpb25Cb3hPcGVuID0gIWlzQWN0aW9uQm94T3BlblwiXG4gICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGVuYWJsZWRNZXNzYWdlQWN0aW9ucy5pbmRleE9mKCdzZW5kLXJlcGx5JykgIT09IC0xICYmXG4gICAgICAgICAgICAgIG1vZGUgPT09ICdtYWluJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uLS10aHJlYWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlcGx5LWluLXRocmVhZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgaWNvbj1cInJlcGx5LWluLXRocmVhZFwiXG4gICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNhblJlYWN0VG9NZXNzYWdlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uLS1yZWFjdGlvbnNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSAhaXNSZWFjdGlvblNlbGVjdG9yT3BlblwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9ICFpc1JlYWN0aW9uU2VsZWN0b3JPcGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgaWNvbj1cInJlYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIGVzbGludC1lbmFibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2NvbmRpdGlvbmFsLWNvbXBsZXhpdHkgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICNkZWZhdWx0TWVzc2FnZVJlYWN0aW9uc1xuICAgICAgICAgIGxldC1tZXNzYWdlUmVhY3Rpb25Db3VudHM9XCJtZXNzYWdlUmVhY3Rpb25Db3VudHNcIlxuICAgICAgICAgIGxldC1sYXRlc3RSZWFjdGlvbnM9XCJsYXRlc3RSZWFjdGlvbnNcIlxuICAgICAgICAgIGxldC1pc1NlbGVjdG9yT3Blbj1cImlzU2VsZWN0b3JPcGVuXCJcbiAgICAgICAgICBsZXQtaXNTZWxlY3Rvck9wZW5DaGFuZ2VIYW5kbGVyPVwiaXNTZWxlY3Rvck9wZW5DaGFuZ2VIYW5kbGVyXCJcbiAgICAgICAgICBsZXQtbWVzc2FnZUlkPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICBsZXQtb3duUmVhY3Rpb25zPVwib3duUmVhY3Rpb25zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdHJlYW0tbWVzc2FnZS1yZWFjdGlvbnNcbiAgICAgICAgICAgIFttZXNzYWdlUmVhY3Rpb25Db3VudHNdPVwibWVzc2FnZVJlYWN0aW9uQ291bnRzXCJcbiAgICAgICAgICAgIFtsYXRlc3RSZWFjdGlvbnNdPVwibGF0ZXN0UmVhY3Rpb25zXCJcbiAgICAgICAgICAgIFtpc1NlbGVjdG9yT3Blbl09XCJpc1NlbGVjdG9yT3BlblwiXG4gICAgICAgICAgICAoaXNTZWxlY3Rvck9wZW5DaGFuZ2UpPVwiaXNTZWxlY3Rvck9wZW5DaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlSWRcIlxuICAgICAgICAgICAgW293blJlYWN0aW9uc109XCJvd25SZWFjdGlvbnNcIlxuICAgICAgICAgID48L3N0cmVhbS1tZXNzYWdlLXJlYWN0aW9ucz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGUgfHwgZGVmYXVsdE1lc3NhZ2VSZWFjdGlvbnM7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCgpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQXR0YWNobWVudCAmJiAhbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2VcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICNkZWZhdWx0QXR0YWNobWVudHNcbiAgICAgICAgICAgIGxldC1tZXNzYWdlSWQ9XCJtZXNzYWdlSWRcIlxuICAgICAgICAgICAgbGV0LWF0dGFjaG1lbnRzPVwiYXR0YWNobWVudHNcIlxuICAgICAgICAgICAgbGV0LXBhcmVudE1lc3NhZ2VJZD1cInBhcmVudE1lc3NhZ2VJZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LWxpc3RcbiAgICAgICAgICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlSWRcIlxuICAgICAgICAgICAgICBbYXR0YWNobWVudHNdPVwiYXR0YWNobWVudHNcIlxuICAgICAgICAgICAgICBbcGFyZW50TWVzc2FnZUlkXT1cInBhcmVudE1lc3NhZ2VJZFwiXG4gICAgICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgYXR0YWNobWVudExpc3RUZW1wbGF0ZSB8fCBkZWZhdWx0QXR0YWNobWVudHM7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRMaXN0Q29udGV4dCgpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXRleHRcIlxuICAgICAgICAgICpuZ0lmPVwibWVzc2FnZT8udGV4dCB8fCAobWVzc2FnZT8ucXVvdGVkX21lc3NhZ2UgJiYgaGFzQXR0YWNobWVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbm5lci1tZXNzYWdlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXRleHQtaW5uZXIgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXRleHQtaW5uZXJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtbGlnaHQtdGV4dC1pbm5lci0taGFzLWF0dGFjaG1lbnRdPVwiXG4gICAgICAgICAgICAgIGhhc0F0dGFjaG1lbnRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgbWVzc2FnZT8uZXJyb3JTdGF0dXNDb2RlICE9PSA0MDNcbiAgICAgICAgICAgICAgICA/IHJlc2VuZE1lc3NhZ2UoKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIlxuICAgICAgICAgICAgICBtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnICYmIG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSAhPT0gNDAzXG4gICAgICAgICAgICAgICAgPyByZXNlbmRNZXNzYWdlKClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVvdGVkTWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LWxpc3RcbiAgICAgICAgICAgICAgKm5nSWY9XCJoYXNBdHRhY2htZW50ICYmIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlXCJcbiAgICAgICAgICAgICAgW2F0dGFjaG1lbnRzXT1cIm1lc3NhZ2UhLmF0dGFjaG1lbnRzIVwiXG4gICAgICAgICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZSEuaWRcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWF0dGFjaG1lbnQtbGlzdD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjbGllbnQtZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZT8udHlwZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NpbXBsZS1tZXNzYWdlLS1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0LkVycm9yIMK3IFVuc2VudFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2ltcGxlLW1lc3NhZ2UtLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChtZXNzYWdlPy5lcnJvclN0YXR1c0NvZGUgPT09IDQwM1xuICAgICAgICAgICAgICAgICAgPyBcInN0cmVhbUNoYXQuTWVzc2FnZSBGYWlsZWQgwrcgVW5hdXRob3JpemVkXCJcbiAgICAgICAgICAgICAgICAgIDogXCJzdHJlYW1DaGF0Lk1lc3NhZ2UgRmFpbGVkIMK3IENsaWNrIHRvIHRyeSBhZ2FpblwiXG4gICAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIChjbGljayk9XCJ0ZXh0Q2xpY2tlZCgpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInRleHRDbGlja2VkKClcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRleHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvdXNlLXRyYWNrLWJ5LWZ1bmN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhcnQgb2YgbWVzc2FnZVRleHRQYXJ0c1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYXJ0LnR5cGUgPT09ICd0ZXh0JzsgZWxzZSBtZW50aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJwYXJ0LmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWVudGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TWVudGlvbiBsZXQtY29udGVudD1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Yj57eyBjb250ZW50IH19PC9iPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnRpb25UZW1wbGF0ZSB8fCBkZWZhdWx0TWVudGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGdldE1lbnRpb25Db250ZXh0KHBhcnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXJlcGx5LWJ1dHRvblwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICEhbWVzc2FnZT8ucmVwbHlfY291bnQgJiZcbiAgICAgICAgICAgICAgbW9kZSAhPT0gJ3RocmVhZCcgJiZcbiAgICAgICAgICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLmluZGV4T2YoJ3NlbmQtcmVwbHknKSAhPT0gLTFcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlcGxpZXMtY291bnQtYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVwbHktY291bnQtYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBc0FjdGl2ZVBhcmVudE1lc3NhZ2UoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJyZXBseVwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgICB7e21lc3NhZ2U/LnJlcGx5X2NvdW50ID09PSAxID8gKCdzdHJlYW1DaGF0LjEgcmVwbHknIHwgdHJhbnNsYXRlKSA6ICgnc3RyZWFtQ2hhdC57eyByZXBseUNvdW50IH19XG4gICAgICAgICAgICByZXBsaWVzJyB8IHRyYW5zbGF0ZTpyZXBseUNvdW50UGFyYW0pfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1kYXRhIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1kYXRhXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtbmFtZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgbWVzc2FnZT8udXNlcj8ubmFtZSA/IG1lc3NhZ2U/LnVzZXI/Lm5hbWUgOiBtZXNzYWdlPy51c2VyPy5pZCB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBkYXRhLXRlc3RpZD1cImRhdGVcIiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10aW1lc3RhbXBcIj5cbiAgICAgICAgICAgIHt7IHBhcnNlZERhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2VuZGluZ1N0YXR1cz5cbiAgPHNwYW5cbiAgICBjbGFzcz1cIlxuICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cyBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLWFuZ3VsYXJcbiAgICBcIlxuICAgIGRhdGEtdGVzdGlkPVwic2VuZGluZy1pbmRpY2F0b3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICB7eyBcInN0cmVhbUNoYXQuU2VuZGluZy4uLlwiIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPHN0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlclxuICAgICAgZGF0YS10ZXN0aWQ9XCJsb2FkaW5nLWluZGljYXRvclwiXG4gICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZWFkU3RhdHVzPlxuICA8c3BhblxuICAgIGNsYXNzPVwiXG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXMtYW5ndWxhclxuICAgIFwiXG4gICAgZGF0YS10ZXN0aWQ9XCJyZWFkLWluZGljYXRvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3Rvb2x0aXBcIiBkYXRhLXRlc3RpZD1cInJlYWQtYnktdG9vbHRpcFwiPlxuICAgICAge3sgcmVhZEJ5VGV4dCB9fVxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyXG4gICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgIGRhdGEtdGVzdC1pZD1cImxhc3QtcmVhZC11c2VyLWF2YXRhclwiXG4gICAgICBbc2l6ZV09XCIxNVwiXG4gICAgICBbaW1hZ2VVcmxdPVwibGFzdFJlYWRVc2VyPy5pbWFnZVwiXG4gICAgICBbbmFtZV09XCJsYXN0UmVhZFVzZXI/Lm5hbWUgfHwgbGFzdFJlYWRVc2VyPy5pZFwiXG4gICAgICB0eXBlPVwidXNlclwiXG4gICAgICBsb2NhdGlvbj1cIm1lc3NhZ2UtcmVhZGVyXCJcbiAgICAgIFt1c2VyXT1cImxhc3RSZWFkVXNlclwiXG4gICAgPjwvc3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlcj5cbiAgICA8c3BhblxuICAgICAgZGF0YS10ZXN0LWlkPVwicmVhZC1ieS1sZW5ndGhcIlxuICAgICAgKm5nSWY9XCJpc1JlYWRCeU11bHRpcGxlVXNlcnNcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLW51bWJlclwiXG4gICAgPlxuICAgICAge3sgKG1lc3NhZ2U/LnJlYWRCeSkhLmxlbmd0aCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVsaXZlcmVkU3RhdHVzPlxuICA8c3BhblxuICAgICpuZ0lmPVwibW9kZSA9PT0gJ21haW4nXCJcbiAgICBjbGFzcz1cIlxuICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cyBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLWFuZ3VsYXJcbiAgICBcIlxuICAgIGRhdGEtdGVzdGlkPVwiZGVsaXZlcmVkLWluZGljYXRvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3Rvb2x0aXBcIj5cbiAgICAgIHt7IFwic3RyZWFtQ2hhdC5EZWxpdmVyZWRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgZGF0YS10ZXN0aWQ9XCJkZWxpdmVyZWQtaWNvblwiXG4gICAgICBpY29uPVwiZGVsaXZlcmVkLWljb25cIlxuICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlbGV0ZWRNZXNzYWdlPlxuICA8ZGl2IGRhdGEtdGVzdGlkPVwibWVzc2FnZS1kZWxldGVkLWNvbXBvbmVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tZGVsZXRlZC1pbm5lclwiIHRyYW5zbGF0ZT5cbiAgICAgIHN0cmVhbUNoYXQuVGhpcyBtZXNzYWdlIHdhcyBkZWxldGVkLi4uXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzeXN0ZW1NZXNzYWdlPlxuICA8ZGl2IGRhdGEtdGVzdGlkPVwic3lzdGVtLW1lc3NhZ2VcIiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fdGV4dFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX2xpbmVcIj48L2Rpdj5cbiAgICAgIDxwPnt7IG1lc3NhZ2U/LnRleHQgfX08L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fbGluZVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX19kYXRlXCI+XG4gICAgICB7eyBwYXJzZWREYXRlIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNxdW90ZWRNZXNzYWdlPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZVwiXG4gICAgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZVwiXG4gICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS1jb250YWluZXJcIlxuICAgIFtjbGFzcy5taW5lXT1cImlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICA+XG4gICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgIGRhdGEtdGVzdGlkPVwicW91dGVkLW1lc3NhZ2UtYXZhdGFyXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3RcIlxuICAgICAgW2ltYWdlVXJsXT1cIm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy51c2VyPy5pbWFnZVwiXG4gICAgICBbbmFtZV09XCJcbiAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXI/Lm5hbWUgfHwgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXI/LmlkXG4gICAgICBcIlxuICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgbG9jYXRpb249XCJxdW90ZWQtbWVzc2FnZS1zZW5kZXJcIlxuICAgICAgW3VzZXJdPVwibWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXIgfHwgdW5kZWZpbmVkXCJcbiAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1pbm5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5hdHRhY2htZW50cyAmJlxuICAgICAgICAgIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5hdHRhY2htZW50cz8ubGVuZ3RoXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICNkZWZhdWx0QXR0YWNobWVudHNcbiAgICAgICAgICBsZXQtbWVzc2FnZUlkPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICBsZXQtYXR0YWNobWVudHM9XCJhdHRhY2htZW50c1wiXG4gICAgICAgICAgbGV0LXBhcmVudE1lc3NhZ2VJZD1cInBhcmVudE1lc3NhZ2VJZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtbGlzdFxuICAgICAgICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlSWRcIlxuICAgICAgICAgICAgW2F0dGFjaG1lbnRzXT1cImF0dGFjaG1lbnRzXCJcbiAgICAgICAgICAgIFtwYXJlbnRNZXNzYWdlSWRdPVwicGFyZW50TWVzc2FnZUlkXCJcbiAgICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGF0dGFjaG1lbnRMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0UXVvdGVkTWVzc2FnZUF0dGFjaG1lbnRMaXN0Q29udGV4dCgpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwicXVvdGVkLW1lc3NhZ2UtdGV4dFwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/Lmh0bWwgfHwgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnRleHRcbiAgICAgICAgXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -373,7 +373,7 @@ export class MessageInputComponent {
373
373
  }
374
374
  }
375
375
  MessageInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, deps: [{ token: i1.ChannelService }, { token: i2.NotificationService }, { token: i3.AttachmentService }, { token: i4.MessageInputConfigService }, { token: textareaInjectionToken }, { token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i5.ChatClientService }, { token: i6.EmojiInputService }, { token: i7.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
376
- MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message", sendMessage$: "sendMessage$" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"quotedMessage?.user || undefined\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n </div>\n</div>\n", components: [{ type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: i11.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i12.AsyncPipe, "translate": i14.TranslatePipe } });
376
+ MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message", sendMessage$: "sendMessage$" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"quotedMessage?.user || undefined\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n </div>\n</div>\n", components: [{ type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "parentMessageId", "attachments"] }, { type: i11.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i12.AsyncPipe, "translate": i14.TranslatePipe } });
377
377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, decorators: [{
378
378
  type: Component,
379
379
  args: [{
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dGFjaG1lbnQsXG4gIENoYW5uZWwsXG4gIENoYW5uZWxNZW1iZXJSZXNwb25zZSxcbiAgQ29tbWFuZFJlc3BvbnNlLFxuICBFdmVudCxcbiAgRXh0ZW5kYWJsZUdlbmVyaWNzLFxuICBGb3JtYXRNZXNzYWdlUmVzcG9uc2UsXG4gIExpdGVyYWxTdHJpbmdGb3JVbmlvbixcbiAgTXV0ZSxcbiAgUmVhY3Rpb25SZXNwb25zZSxcbiAgVXNlcixcbiAgVXNlclJlc3BvbnNlLFxufSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi9pY29uL2ljb24uY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgVW5rbm93blR5cGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVHJpZ2dlciA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIGNvbXBvbmVudFByb3BzOiBVbmtub3duVHlwZTtcbiAgICBkYXRhOiBVbmtub3duVHlwZTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBFeHRlbmRhYmxlR2VuZXJpY3MgJiB7XG4gIGF0dGFjaG1lbnRUeXBlOiBEZWZhdWx0QXR0YWNobWVudFR5cGU7XG4gIGNoYW5uZWxUeXBlOiBEZWZhdWx0Q2hhbm5lbFR5cGU7XG4gIGNvbW1hbmRUeXBlOiBMaXRlcmFsU3RyaW5nRm9yVW5pb247XG4gIGV2ZW50VHlwZTogVW5rbm93blR5cGU7XG4gIG1lc3NhZ2VUeXBlOiBEZWZhdWx0TWVzc2FnZVR5cGU7XG4gIHJlYWN0aW9uVHlwZTogVW5rbm93blR5cGU7XG4gIHVzZXJUeXBlOiBEZWZhdWx0VXNlclR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0QXR0YWNobWVudFR5cGUgPSBVbmtub3duVHlwZSAmIHtcbiAgYXNzZXRfdXJsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgaW1hZ2VzPzogQXJyYXk8QXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPj47XG4gIG1pbWVfdHlwZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRDaGFubmVsVHlwZSA9IFVua25vd25UeXBlICYge1xuICBpbWFnZT86IHN0cmluZztcbiAgbWVtYmVyX2NvdW50PzogbnVtYmVyO1xuICBzdWJ0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRDb21tYW5kVHlwZSA9IExpdGVyYWxTdHJpbmdGb3JVbmlvbjtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdE1lc3NhZ2VUeXBlID0gVW5rbm93blR5cGUgJiB7XG4gIGN1c3RvbVR5cGU/OiAnY2hhbm5lbC5pbnRybycgfCAnbWVzc2FnZS5kYXRlJztcbiAgZGF0ZT86IHN0cmluZyB8IERhdGU7XG4gIGVycm9yU3RhdHVzQ29kZT86IG51bWJlcjtcbiAgZXZlbnQ/OiBFdmVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbiAgdW5yZWFkPzogYm9vbGVhbjtcbiAgcmVhZEJ5OiBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRVc2VyVHlwZUludGVybmFsID0ge1xuICBpbWFnZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFVzZXJUeXBlID0gVW5rbm93blR5cGUgJlxuICBEZWZhdWx0VXNlclR5cGVJbnRlcm5hbCAmIHtcbiAgICBtdXRlcz86IEFycmF5PE11dGU8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4+O1xuICB9O1xuXG5leHBvcnQgdHlwZSBTdHJlYW1NZXNzYWdlPFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSBGb3JtYXRNZXNzYWdlUmVzcG9uc2U8VD47XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRVcGxvYWQgPSB7XG4gIGZpbGU6IEZpbGU7XG4gIHN0YXRlOiAnZXJyb3InIHwgJ3N1Y2Nlc3MnIHwgJ3VwbG9hZGluZyc7XG4gIHVybD86IHN0cmluZztcbiAgdHlwZTogJ2ltYWdlJyB8ICdmaWxlJyB8ICd2aWRlbyc7XG4gIHByZXZpZXdVcmk/OiBzdHJpbmcgfCBBcnJheUJ1ZmZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCA9IHtcbiAgaXRlbTogTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW07XG59O1xuXG5leHBvcnQgdHlwZSBDb21tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW1Db250ZXh0ID0ge1xuICBpdGVtOiBDb21hbmRBdXRvY29tcGxldGVMaXN0SXRlbTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtID0gKFxuICB8IENoYW5uZWxNZW1iZXJSZXNwb25zZVxuICB8IFVzZXJSZXNwb25zZVxuKSAmIHtcbiAgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtID0gQ29tbWFuZFJlc3BvbnNlICYge1xuICBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uVHlwZSA9ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnaW5mbyc7XG5cbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblBheWxvYWQ8VCA9IHt9PiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcbiAgdGV4dD86IHN0cmluZztcbiAgdHJhbnNsYXRlUGFyYW1zPzogT2JqZWN0O1xuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFQ+O1xuICB0ZW1wbGF0ZUNvbnRleHQ/OiBUO1xuICBkaXNtaXNzRm46IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbFByZXZpZXdDb250ZXh0PFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSB7XG4gIGNoYW5uZWw6IENoYW5uZWw8VD47XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlSW5wdXRDb250ZXh0ID0ge1xuICBpc0ZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhcmVNZW50aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyB8IHVuZGVmaW5lZDtcbiAgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgfCB1bmRlZmluZWQ7XG4gIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVVwZGF0ZUhhbmRsZXI6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBzZW5kTWVzc2FnZSQ6IE9ic2VydmFibGU8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBNZW50aW9uVGVtcGxhdGVDb250ZXh0ID0ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHVzZXI6IFVzZXJSZXNwb25zZTtcbn07XG5cbmV4cG9ydCB0eXBlIEVtb2ppUGlja2VyQ29udGV4dCA9IHtcbiAgZW1vamlJbnB1dCQ6IFN1YmplY3Q8c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFR5cGluZ0luZGljYXRvckNvbnRleHQgPSB7XG4gIHVzZXJzVHlwaW5nJDogT2JzZXJ2YWJsZTxVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXT47XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlQ29udGV4dCA9IHtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXTtcbiAgaXNMYXN0U2VudE1lc3NhZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1vZGU6ICd0aHJlYWQnIHwgJ21haW4nO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbEFjdGlvbnNDb250ZXh0PFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSB7IGNoYW5uZWw6IENoYW5uZWw8VD4gfTtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudExpc3RDb250ZXh0ID0ge1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEF2YXRhclR5cGUgPSAnY2hhbm5lbCcgfCAndXNlcic7XG5cbmV4cG9ydCB0eXBlIEF2YXRhckxvY2F0aW9uID1cbiAgfCAnY2hhbm5lbC1wcmV2aWV3J1xuICB8ICdjaGFubmVsLWhlYWRlcidcbiAgfCAnbWVzc2FnZS1zZW5kZXInXG4gIHwgJ21lc3NhZ2UtcmVhZGVyJ1xuICB8ICdxdW90ZWQtbWVzc2FnZS1zZW5kZXInXG4gIHwgJ2F1dG9jb21wbGV0ZS1pdGVtJ1xuICB8ICd0eXBpbmctaW5kaWNhdG9yJ1xuICB8ICdyZWFjdGlvbic7XG5cbmV4cG9ydCB0eXBlIEF2YXRhckNvbnRleHQgPSB7XG4gIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICB0eXBlOiBBdmF0YXJUeXBlIHwgdW5kZWZpbmVkO1xuICBsb2NhdGlvbjogQXZhdGFyTG9jYXRpb24gfCB1bmRlZmluZWQ7XG4gIGNoYW5uZWw/OiBDaGFubmVsPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICB1c2VyPzogVXNlcjxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbn07XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQgPSB7XG4gIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+IHwgdW5kZWZpbmVkO1xuICByZXRyeVVwbG9hZEhhbmRsZXI6IChmOiBGaWxlKSA9PiBhbnk7XG4gIGRlbGV0ZVVwbG9hZEhhbmRsZXI6ICh1OiBBdHRhY2htZW50VXBsb2FkKSA9PiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBJY29uQ29udGV4dCA9IHtcbiAgaWNvbjogSWNvbiB8IHVuZGVmaW5lZDtcbiAgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgTG9hZGluZ0luZGljYXRvckNvbnRleHQgPSB7XG4gIHNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCA9IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBpc01pbmU6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXTtcbiAgZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXI6IChjb3VudDogbnVtYmVyKSA9PiBhbnk7XG4gIGlzRWRpdGluZ0NoYW5nZUhhbmRsZXI6IChpc0VkaXRpbmc6IGJvb2xlYW4pID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCA9IHtcbiAgYWN0aW9uTmFtZTogJ3F1b3RlJyB8ICdwaW4nIHwgJ2ZsYWcnIHwgJ2VkaXQnIHwgJ2RlbGV0ZSc7XG4gIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogKCgpID0+IHN0cmluZykgfCBzdHJpbmc7XG4gIGFjdGlvbkhhbmRsZXI6ICgpID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VBY3Rpb25JdGVtID0ge1xuICBhY3Rpb25OYW1lOiAncXVvdGUnIHwgJ3BpbicgfCAnZmxhZycgfCAnZWRpdCcgfCAnZGVsZXRlJztcbiAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAoKCkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgaXNWaXNpYmxlOiAoXG4gICAgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLFxuICAgIGlzTWluZTogYm9vbGVhbixcbiAgICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlXG4gICkgPT4gYm9vbGVhbjtcbiAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UsIGlzTWluZTogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVJlYWN0aW9uc0NvbnRleHQgPSB7XG4gIG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlUmVhY3Rpb25Db3VudHM6IHsgW2tleSBpbiBNZXNzYWdlUmVhY3Rpb25UeXBlXT86IG51bWJlciB9O1xuICBpc1NlbGVjdG9yT3BlbjogYm9vbGVhbjtcbiAgbGF0ZXN0UmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W107XG4gIG93blJlYWN0aW9uczogUmVhY3Rpb25SZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdO1xuICBpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBpc09wZW5DaGFuZ2VIYW5kbGVyOiAoaXNPcGVuOiBib29sZWFuKSA9PiBhbnk7XG4gIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPHZvaWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uQ29udGV4dCA9IHtcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZSB8IHVuZGVmaW5lZDtcbiAgY29udGVudDogVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBUaHJlYWRIZWFkZXJDb250ZXh0ID0ge1xuICBwYXJlbnRNZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBjbG9zZVRocmVhZEhhbmRsZXI6IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVJlYWN0aW9uVHlwZSA9XG4gIHwgJ2FuZ3J5J1xuICB8ICdoYWhhJ1xuICB8ICdsaWtlJ1xuICB8ICdsb3ZlJ1xuICB8ICdzYWQnXG4gIHwgJ3dvdyc7XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dGFjaG1lbnQsXG4gIENoYW5uZWwsXG4gIENoYW5uZWxNZW1iZXJSZXNwb25zZSxcbiAgQ29tbWFuZFJlc3BvbnNlLFxuICBFdmVudCxcbiAgRXh0ZW5kYWJsZUdlbmVyaWNzLFxuICBGb3JtYXRNZXNzYWdlUmVzcG9uc2UsXG4gIExpdGVyYWxTdHJpbmdGb3JVbmlvbixcbiAgTXV0ZSxcbiAgUmVhY3Rpb25SZXNwb25zZSxcbiAgVXNlcixcbiAgVXNlclJlc3BvbnNlLFxufSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi9pY29uL2ljb24uY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgVW5rbm93blR5cGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVHJpZ2dlciA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIGNvbXBvbmVudFByb3BzOiBVbmtub3duVHlwZTtcbiAgICBkYXRhOiBVbmtub3duVHlwZTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBFeHRlbmRhYmxlR2VuZXJpY3MgJiB7XG4gIGF0dGFjaG1lbnRUeXBlOiBEZWZhdWx0QXR0YWNobWVudFR5cGU7XG4gIGNoYW5uZWxUeXBlOiBEZWZhdWx0Q2hhbm5lbFR5cGU7XG4gIGNvbW1hbmRUeXBlOiBMaXRlcmFsU3RyaW5nRm9yVW5pb247XG4gIGV2ZW50VHlwZTogVW5rbm93blR5cGU7XG4gIG1lc3NhZ2VUeXBlOiBEZWZhdWx0TWVzc2FnZVR5cGU7XG4gIHJlYWN0aW9uVHlwZTogVW5rbm93blR5cGU7XG4gIHVzZXJUeXBlOiBEZWZhdWx0VXNlclR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0QXR0YWNobWVudFR5cGUgPSBVbmtub3duVHlwZSAmIHtcbiAgYXNzZXRfdXJsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgaW1hZ2VzPzogQXJyYXk8QXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPj47XG4gIG1pbWVfdHlwZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRDaGFubmVsVHlwZSA9IFVua25vd25UeXBlICYge1xuICBpbWFnZT86IHN0cmluZztcbiAgbWVtYmVyX2NvdW50PzogbnVtYmVyO1xuICBzdWJ0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRDb21tYW5kVHlwZSA9IExpdGVyYWxTdHJpbmdGb3JVbmlvbjtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdE1lc3NhZ2VUeXBlID0gVW5rbm93blR5cGUgJiB7XG4gIGN1c3RvbVR5cGU/OiAnY2hhbm5lbC5pbnRybycgfCAnbWVzc2FnZS5kYXRlJztcbiAgZGF0ZT86IHN0cmluZyB8IERhdGU7XG4gIGVycm9yU3RhdHVzQ29kZT86IG51bWJlcjtcbiAgZXZlbnQ/OiBFdmVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbiAgdW5yZWFkPzogYm9vbGVhbjtcbiAgcmVhZEJ5OiBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRVc2VyVHlwZUludGVybmFsID0ge1xuICBpbWFnZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFVzZXJUeXBlID0gVW5rbm93blR5cGUgJlxuICBEZWZhdWx0VXNlclR5cGVJbnRlcm5hbCAmIHtcbiAgICBtdXRlcz86IEFycmF5PE11dGU8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4+O1xuICB9O1xuXG5leHBvcnQgdHlwZSBTdHJlYW1NZXNzYWdlPFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSBGb3JtYXRNZXNzYWdlUmVzcG9uc2U8VD47XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRVcGxvYWQgPSB7XG4gIGZpbGU6IEZpbGU7XG4gIHN0YXRlOiAnZXJyb3InIHwgJ3N1Y2Nlc3MnIHwgJ3VwbG9hZGluZyc7XG4gIHVybD86IHN0cmluZztcbiAgdHlwZTogJ2ltYWdlJyB8ICdmaWxlJyB8ICd2aWRlbyc7XG4gIHByZXZpZXdVcmk/OiBzdHJpbmcgfCBBcnJheUJ1ZmZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCA9IHtcbiAgaXRlbTogTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW07XG59O1xuXG5leHBvcnQgdHlwZSBDb21tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW1Db250ZXh0ID0ge1xuICBpdGVtOiBDb21hbmRBdXRvY29tcGxldGVMaXN0SXRlbTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtID0gKFxuICB8IENoYW5uZWxNZW1iZXJSZXNwb25zZVxuICB8IFVzZXJSZXNwb25zZVxuKSAmIHtcbiAgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtID0gQ29tbWFuZFJlc3BvbnNlICYge1xuICBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uVHlwZSA9ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnaW5mbyc7XG5cbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblBheWxvYWQ8VCA9IHt9PiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcbiAgdGV4dD86IHN0cmluZztcbiAgdHJhbnNsYXRlUGFyYW1zPzogT2JqZWN0O1xuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFQ+O1xuICB0ZW1wbGF0ZUNvbnRleHQ/OiBUO1xuICBkaXNtaXNzRm46IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbFByZXZpZXdDb250ZXh0PFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSB7XG4gIGNoYW5uZWw6IENoYW5uZWw8VD47XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlSW5wdXRDb250ZXh0ID0ge1xuICBpc0ZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhcmVNZW50aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyB8IHVuZGVmaW5lZDtcbiAgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgfCB1bmRlZmluZWQ7XG4gIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVVwZGF0ZUhhbmRsZXI6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBzZW5kTWVzc2FnZSQ6IE9ic2VydmFibGU8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBNZW50aW9uVGVtcGxhdGVDb250ZXh0ID0ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHVzZXI6IFVzZXJSZXNwb25zZTtcbn07XG5cbmV4cG9ydCB0eXBlIEVtb2ppUGlja2VyQ29udGV4dCA9IHtcbiAgZW1vamlJbnB1dCQ6IFN1YmplY3Q8c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFR5cGluZ0luZGljYXRvckNvbnRleHQgPSB7XG4gIHVzZXJzVHlwaW5nJDogT2JzZXJ2YWJsZTxVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXT47XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlQ29udGV4dCA9IHtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXTtcbiAgaXNMYXN0U2VudE1lc3NhZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1vZGU6ICd0aHJlYWQnIHwgJ21haW4nO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbEFjdGlvbnNDb250ZXh0PFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSB7IGNoYW5uZWw6IENoYW5uZWw8VD4gfTtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudExpc3RDb250ZXh0ID0ge1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbiAgcGFyZW50TWVzc2FnZUlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQXZhdGFyVHlwZSA9ICdjaGFubmVsJyB8ICd1c2VyJztcblxuZXhwb3J0IHR5cGUgQXZhdGFyTG9jYXRpb24gPVxuICB8ICdjaGFubmVsLXByZXZpZXcnXG4gIHwgJ2NoYW5uZWwtaGVhZGVyJ1xuICB8ICdtZXNzYWdlLXNlbmRlcidcbiAgfCAnbWVzc2FnZS1yZWFkZXInXG4gIHwgJ3F1b3RlZC1tZXNzYWdlLXNlbmRlcidcbiAgfCAnYXV0b2NvbXBsZXRlLWl0ZW0nXG4gIHwgJ3R5cGluZy1pbmRpY2F0b3InXG4gIHwgJ3JlYWN0aW9uJztcblxuZXhwb3J0IHR5cGUgQXZhdGFyQ29udGV4dCA9IHtcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHR5cGU6IEF2YXRhclR5cGUgfCB1bmRlZmluZWQ7XG4gIGxvY2F0aW9uOiBBdmF0YXJMb2NhdGlvbiB8IHVuZGVmaW5lZDtcbiAgY2hhbm5lbD86IENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz47XG4gIHVzZXI/OiBVc2VyPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xufTtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCA9IHtcbiAgYXR0YWNobWVudFVwbG9hZHMkOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnRVcGxvYWRbXT4gfCB1bmRlZmluZWQ7XG4gIHJldHJ5VXBsb2FkSGFuZGxlcjogKGY6IEZpbGUpID0+IGFueTtcbiAgZGVsZXRlVXBsb2FkSGFuZGxlcjogKHU6IEF0dGFjaG1lbnRVcGxvYWQpID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEljb25Db250ZXh0ID0ge1xuICBpY29uOiBJY29uIHwgdW5kZWZpbmVkO1xuICBzaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nSW5kaWNhdG9yQ29udGV4dCA9IHtcbiAgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0ID0ge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGlzTWluZTogYm9vbGVhbjtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdO1xuICBkaXNwbGF5ZWRBY3Rpb25zQ291bnRDaGFuZUhhbmxlcjogKGNvdW50OiBudW1iZXIpID0+IGFueTtcbiAgaXNFZGl0aW5nQ2hhbmdlSGFuZGxlcjogKGlzRWRpdGluZzogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0ID0ge1xuICBhY3Rpb25OYW1lOiAncXVvdGUnIHwgJ3BpbicgfCAnZmxhZycgfCAnZWRpdCcgfCAnZGVsZXRlJztcbiAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAoKCkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgYWN0aW9uSGFuZGxlcjogKCkgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUFjdGlvbkl0ZW0gPSB7XG4gIGFjdGlvbk5hbWU6ICdxdW90ZScgfCAncGluJyB8ICdmbGFnJyB8ICdlZGl0JyB8ICdkZWxldGUnO1xuICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICgoKSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICBpc1Zpc2libGU6IChcbiAgICBlbmFibGVkQWN0aW9uczogc3RyaW5nW10sXG4gICAgaXNNaW5lOiBib29sZWFuLFxuICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2VcbiAgKSA9PiBib29sZWFuO1xuICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZSwgaXNNaW5lOiBib29sZWFuKSA9PiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCA9IHtcbiAgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VSZWFjdGlvbkNvdW50czogeyBba2V5IGluIE1lc3NhZ2VSZWFjdGlvblR5cGVdPzogbnVtYmVyIH07XG4gIGlzU2VsZWN0b3JPcGVuOiBib29sZWFuO1xuICBsYXRlc3RSZWFjdGlvbnM6IFJlYWN0aW9uUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbiAgb3duUmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W107XG4gIGlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbjogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTW9kYWxDb250ZXh0ID0ge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IGFueTtcbiAgY29udGVudDogVGVtcGxhdGVSZWY8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25Db250ZXh0ID0ge1xuICB0eXBlOiBOb3RpZmljYXRpb25UeXBlIHwgdW5kZWZpbmVkO1xuICBjb250ZW50OiBUZW1wbGF0ZVJlZjx2b2lkPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFRocmVhZEhlYWRlckNvbnRleHQgPSB7XG4gIHBhcmVudE1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIGNsb3NlVGhyZWFkSGFuZGxlcjogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlUmVhY3Rpb25UeXBlID1cbiAgfCAnYW5ncnknXG4gIHwgJ2hhaGEnXG4gIHwgJ2xpa2UnXG4gIHwgJ2xvdmUnXG4gIHwgJ3NhZCdcbiAgfCAnd293JztcbiJdfQ==