stream-chat-angular 4.9.1 → 4.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/version.d.ts +1 -1
- package/bundles/stream-chat-angular.umd.js +34 -3
- package/bundles/stream-chat-angular.umd.js.map +1 -1
- package/esm2015/assets/version.js +2 -2
- package/esm2015/lib/custom-templates.service.js +13 -1
- package/esm2015/lib/message/message.component.js +21 -2
- package/esm2015/lib/message-list/message-list.component.js +2 -2
- package/esm2015/lib/types.js +1 -1
- package/fesm2015/stream-chat-angular.js +34 -3
- package/fesm2015/stream-chat-angular.js.map +1 -1
- package/lib/custom-templates.service.d.ts +13 -1
- package/lib/message/message.component.d.ts +7 -1
- package/lib/types.d.ts +10 -0
- package/package.json +1 -1
- package/src/assets/version.ts +1 -1
|
@@ -58,6 +58,9 @@ export class MessageComponent {
|
|
|
58
58
|
this.subscriptions.push(this.customTemplatesService.attachmentListTemplate$.subscribe((template) => (this.attachmentListTemplate = template)));
|
|
59
59
|
this.subscriptions.push(this.customTemplatesService.messageActionsBoxTemplate$.subscribe((template) => (this.messageActionsBoxTemplate = template)));
|
|
60
60
|
this.subscriptions.push(this.customTemplatesService.messageReactionsTemplate$.subscribe((template) => (this.messageReactionsTemplate = template)));
|
|
61
|
+
this.subscriptions.push(this.customTemplatesService.deliveredStatusTemplate$.subscribe((template) => (this.customDeliveredStatusTemplate = template)));
|
|
62
|
+
this.subscriptions.push(this.customTemplatesService.sendingStatusTemplate$.subscribe((template) => (this.customSendingStatusTemplate = template)));
|
|
63
|
+
this.subscriptions.push(this.customTemplatesService.readStatusTemplate$.subscribe((template) => (this.customReadStatusTemplate = template)));
|
|
61
64
|
}
|
|
62
65
|
ngOnChanges(changes) {
|
|
63
66
|
var _a, _b;
|
|
@@ -202,6 +205,22 @@ export class MessageComponent {
|
|
|
202
205
|
},
|
|
203
206
|
};
|
|
204
207
|
}
|
|
208
|
+
getDeliveredStatusContext() {
|
|
209
|
+
return {
|
|
210
|
+
message: this.message,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
getSendingStatusContext() {
|
|
214
|
+
return {
|
|
215
|
+
message: this.message,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
getReadStatusContext() {
|
|
219
|
+
return {
|
|
220
|
+
message: this.message,
|
|
221
|
+
readByText: this.readByText,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
205
224
|
jumpToMessage(messageId, parentMessageId) {
|
|
206
225
|
void this.channelService.jumpToMessage(messageId, parentMessageId);
|
|
207
226
|
}
|
|
@@ -299,7 +318,7 @@ export class MessageComponent {
|
|
|
299
318
|
}
|
|
300
319
|
}
|
|
301
320
|
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 }, { token: i4.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
302
|
-
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", isHighlighted: "isHighlighted" }, 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--other]=\"!isSentByCurrentUser\"\n [class.str-chat__message-simple--me]=\"isSentByCurrentUser\"\n [class.str-chat__message--has-attachment]=\"hasAttachment\"\n [class.str-chat__message--with-reactions]=\"hasReactions\"\n [class.str-chat__message--highlighted]=\"isHighlighted\"\n [class.str-chat__message-with-thread-link]=\"shouldDisplayThreadLink\"\n [class.str-chat__message-send-can-be-retried]=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n \"\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 *ngIf=\"themeVersion === '1'\">\n <ng-container *ngTemplateOutlet=\"messageStatus\"></ng-container>\n </ng-container>\n <stream-avatar-placeholder\n data-testid=\"avatar\"\n class=\"str-chat-angular__avatar-host str-chat__message-sender-avatar\"\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 str-chat__message-options\"\n data-testid=\"message-options\"\n [class.str-chat__message-edit-in-progress]=\"isEditing\"\n *ngIf=\"areOptionsVisible\"\n >\n <div\n data-testid=\"message-actions-container\"\n #messageActionsToggle\n class=\"\n str-chat__message-actions-container\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 [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerClick\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"true\"\n [popperHideOnClickOutside]=\"true\"\n [popperHideOnMouseLeave]=\"false\"\n >\n <popper-content #popperContent>\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 >\n </ng-container>\n </popper-content>\n <div\n class=\"str-chat__message-actions-box-button\"\n *ngIf=\"visibleMessageActionsCount > 0\"\n data-testid=\"action-icon\"\n (click)=\"isActionBoxOpen = !isActionBoxOpen\"\n (keyup.enter)=\"isActionBoxOpen = !isActionBoxOpen\"\n >\n <stream-icon-placeholder\n icon=\"action-icon\"\n class=\"str-chat__message-action-icon\"\n ></stream-icon-placeholder>\n </div>\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 str-chat__message-reply-in-thread-button\n \"\n data-testid=\"reply-in-thread\"\n (click)=\"setAsActiveParentMessage()\"\n (keyup.enter)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-action-icon\"\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 str-chat__message-reactions-button\n \"\n data-testid=\"reaction-icon\"\n (click)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n (keyup.enter)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-action-icon\"\n icon=\"reaction-icon\"\n ></stream-icon-placeholder>\n </div>\n </div>\n <div class=\"str-chat__message-reactions-host\">\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 </div>\n <div class=\"str-chat__message-bubble\">\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 tabindex=\"0\"\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=\"\n str-chat__simple-message--error-message\n str-chat__message--error-message\n \"\n >\n {{ \"streamChat.Error \u00B7 Unsent\" | translate }}\n </div>\n <div\n data-testid=\"error-message\"\n *ngIf=\"message?.status === 'failed'\"\n class=\"\n str-chat__simple-message--error-message\n str-chat__message--error-message\n \"\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 data-testid=\"text\">\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 <span class=\"str-chat__message-mention\">{{\n content\n }}</span>\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 <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n class=\"str-chat__message-error-icon\"\n icon=\"error\"\n ></stream-icon-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n replyCountButton;\n context: { position: 'inside-message-bubble' }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n messageDateAndSender;\n context: { position: 'inside-message-bubble' }\n \"\n ></ng-container>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n replyCountButton;\n context: { position: 'outside-message-bubble', message: message }\n \"\n ></ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n messageDateAndSender;\n context: { position: 'outside-message-bubble' }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n</div>\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 str-chat__quoted-message-preview\"\n data-testid=\"quoted-message-container\"\n [class.mine]=\"isSentByCurrentUser\"\n (click)=\"\n jumpToMessage(\n (message?.quoted_message)!.id,\n message?.quoted_message?.parent_id\n )\n \"\n (keyup.enter)=\"\n jumpToMessage(\n (message?.quoted_message)!.id,\n message?.quoted_message?.parent_id\n )\n \"\n >\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host str-chat__message-sender-avatar\"\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 str-chat__quoted-message-bubble\">\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?.translation ||\n message?.quoted_message?.html ||\n message?.quoted_message?.text\n \"\n ></div>\n </div>\n </div>\n</ng-template>\n\n<!-- We need these markups in slightly different positions in theme-v1 and theme-v2, this soultion makes that possible without duplicating the code -->\n<ng-template #messageDateAndSender let-position=\"position\">\n <!-- eslint-disable @angular-eslint/template/conditional-complexity -->\n <ng-container\n *ngIf=\"\n (position === 'inside-message-bubble' && themeVersion === '1') ||\n (position === 'outside-message-bubble' && themeVersion === '2')\n \"\n >\n <div\n class=\"str-chat__translation-notice\"\n *ngIf=\"shouldDisplayTranslationNotice\"\n data-testid=\"translation-notice\"\n >\n <button\n data-testid=\"see-original\"\n *ngIf=\"displayedMessageTextContent === 'translation'\"\n (click)=\"displayOriginalMessage()\"\n (keyup.enter)=\"displayOriginalMessage()\"\n translate\n >\n streamChat.See original (automatically translated)\n </button>\n <button\n data-testid=\"see-translation\"\n *ngIf=\"displayedMessageTextContent === 'original'\"\n (click)=\"displayTranslatedMessage()\"\n (keyup.enter)=\"displayTranslatedMessage()\"\n translate\n >\n streamChat.See translation\n </button>\n </div>\n <div\n class=\"\n str-chat__message-data\n str-chat__message-simple-data\n str-chat__message-metadata\n \"\n >\n <!-- eslint-enable @angular-eslint/template/conditional-complexity -->\n <ng-container *ngIf=\"themeVersion === '2'\">\n <ng-container *ngTemplateOutlet=\"messageStatus\"></ng-container>\n </ng-container>\n <span\n data-testid=\"sender\"\n *ngIf=\"!isSentByCurrentUser\"\n class=\"str-chat__message-simple-name str-chat__message-sender-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 </ng-container>\n</ng-template>\n\n<ng-template #messageStatus>\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' && isMessageDeliveredAndRead && canDisplayReadStatus;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n <ng-template #deliveredStatus>\n <span\n *ngIf=\"mode === 'main'\"\n class=\"\n str-chat__message-simple-status\n str-chat__message-simple-status-angular\n str-chat__message-status\n \"\n data-testid=\"delivered-indicator\"\n tabindex=\"0\"\n [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerHover\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"false\"\n [popperHideOnClickOutside]=\"false\"\n (hover)=\"$event.stopPropagation()\"\n >\n <popper-content #popperContent>\n <div class=\"str-chat__tooltip str-chat__tooltip-angular\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n </popper-content>\n <stream-icon-placeholder\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon-placeholder>\n </span>\n </ng-template>\n <ng-template #sendingStatus>\n <span\n class=\"\n str-chat__message-simple-status\n str-chat__message-simple-status-angular\n str-chat__message-status\n \"\n data-testid=\"sending-indicator\"\n tabindex=\"0\"\n [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerHover\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"false\"\n [popperHideOnClickOutside]=\"false\"\n (hover)=\"$event.stopPropagation()\"\n >\n <popper-content #popperContent>\n <div class=\"str-chat__tooltip str-chat__tooltip-angular\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n </popper-content>\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\n str-chat__message-simple-status-angular\n str-chat__message-status\n \"\n data-testid=\"read-indicator\"\n tabindex=\"0\"\n [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerHover\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"false\"\n [popperHideOnClickOutside]=\"false\"\n (hover)=\"$event.stopPropagation()\"\n >\n <popper-content #popperContent>\n <div\n class=\"str-chat__tooltip str-chat__tooltip-angular\"\n data-testid=\"read-by-tooltip\"\n >\n {{ readByText }}\n </div>\n </popper-content>\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-container>\n</ng-template>\n\n<ng-template #replyCountButton let-position=\"position\">\n <!-- eslint-disable @angular-eslint/template/conditional-complexity -->\n <div\n *ngIf=\"\n (position === 'inside-message-bubble' && themeVersion === '1') ||\n (position === 'outside-message-bubble' && themeVersion === '2')\n \"\n class=\"\n str-chat__message-simple-reply-button\n str-chat__message-replies-count-button-wrapper\n \"\n >\n <!-- eslint-enable @angular-eslint/template/conditional-complexity -->\n <button\n *ngIf=\"shouldDisplayThreadLink\"\n class=\"str-chat__message-replies-count-button\"\n data-testid=\"reply-count-button\"\n (click)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n stream-icon-placeholder\n icon=\"reply\"\n ></stream-icon-placeholder>\n {{message?.reply_count === 1 ? ('streamChat.1 reply' | translate) : ('streamChat.{{ replyCount }}\n replies' | translate:replyCountParam)}}\n </button>\n </div>\n</ng-template>\n", components: [{ type: i5.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i6.NgxPopperjsContentComponent, selector: "popper-content" }, { type: i7.MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: ["isOpen", "isMine", "message", "enabledActions"], outputs: ["displayedActionsCount", "isEditing"] }, { type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i9.MessageReactionsComponent, selector: "stream-message-reactions", inputs: ["messageId", "messageReactionCounts", "isSelectorOpen", "latestReactions", "ownReactions"], outputs: ["isSelectorOpenChange"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "parentMessageId", "attachments"] }, { type: i11.LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder", inputs: ["size", "color"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgxPopperjsDirective, selector: "[popper]", inputs: ["popperTimeout", "popperTimeoutAfterShow", "popperApplyClass", "popper", "popperDisabled", "popperPlacement", "popperApplyArrowClass", "popperPreventOverflow", "popperHideOnClickOutside", "popperTrigger", "popperStyles", "popperAriaDescribeBy", "popperAriaRole", "popperBoundaries", "popperCloseOnClickOutside", "popperDisableAnimation", "popperDisableStyle", "popperHideOnMouseLeave", "popperHideOnScroll", "popperAppendTo", "popperModifiers", "popperPositionFixed", "popperDelay", "popperShowOnStart", "popperTarget"], outputs: ["popperOnHidden", "popperOnShown", "popperOnUpdate"], exportAs: ["popper"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i13.TranslatePipe } });
|
|
321
|
+
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", isHighlighted: "isHighlighted" }, 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--other]=\"!isSentByCurrentUser\"\n [class.str-chat__message-simple--me]=\"isSentByCurrentUser\"\n [class.str-chat__message--has-attachment]=\"hasAttachment\"\n [class.str-chat__message--with-reactions]=\"hasReactions\"\n [class.str-chat__message--highlighted]=\"isHighlighted\"\n [class.str-chat__message-with-thread-link]=\"shouldDisplayThreadLink\"\n [class.str-chat__message-send-can-be-retried]=\"\n message?.status === 'failed' && message?.errorStatusCode !== 403\n \"\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 *ngIf=\"themeVersion === '1'\">\n <ng-container *ngTemplateOutlet=\"messageStatus\"></ng-container>\n </ng-container>\n <stream-avatar-placeholder\n data-testid=\"avatar\"\n class=\"str-chat-angular__avatar-host str-chat__message-sender-avatar\"\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 str-chat__message-options\"\n data-testid=\"message-options\"\n [class.str-chat__message-edit-in-progress]=\"isEditing\"\n *ngIf=\"areOptionsVisible\"\n >\n <div\n data-testid=\"message-actions-container\"\n #messageActionsToggle\n class=\"\n str-chat__message-actions-container\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 [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerClick\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"true\"\n [popperHideOnClickOutside]=\"true\"\n [popperHideOnMouseLeave]=\"false\"\n >\n <popper-content #popperContent>\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 >\n </ng-container>\n </popper-content>\n <div\n class=\"str-chat__message-actions-box-button\"\n *ngIf=\"visibleMessageActionsCount > 0\"\n data-testid=\"action-icon\"\n (click)=\"isActionBoxOpen = !isActionBoxOpen\"\n (keyup.enter)=\"isActionBoxOpen = !isActionBoxOpen\"\n >\n <stream-icon-placeholder\n icon=\"action-icon\"\n class=\"str-chat__message-action-icon\"\n ></stream-icon-placeholder>\n </div>\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 str-chat__message-reply-in-thread-button\n \"\n data-testid=\"reply-in-thread\"\n (click)=\"setAsActiveParentMessage()\"\n (keyup.enter)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-action-icon\"\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 str-chat__message-reactions-button\n \"\n data-testid=\"reaction-icon\"\n (click)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n (keyup.enter)=\"isReactionSelectorOpen = !isReactionSelectorOpen\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-action-icon\"\n icon=\"reaction-icon\"\n ></stream-icon-placeholder>\n </div>\n </div>\n <div class=\"str-chat__message-reactions-host\">\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 </div>\n <div class=\"str-chat__message-bubble\">\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 tabindex=\"0\"\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=\"\n str-chat__simple-message--error-message\n str-chat__message--error-message\n \"\n >\n {{ \"streamChat.Error \u00B7 Unsent\" | translate }}\n </div>\n <div\n data-testid=\"error-message\"\n *ngIf=\"message?.status === 'failed'\"\n class=\"\n str-chat__simple-message--error-message\n str-chat__message--error-message\n \"\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 data-testid=\"text\">\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 <span class=\"str-chat__message-mention\">{{\n content\n }}</span>\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 <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n class=\"str-chat__message-error-icon\"\n icon=\"error\"\n ></stream-icon-placeholder>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n replyCountButton;\n context: { position: 'inside-message-bubble' }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n messageDateAndSender;\n context: { position: 'inside-message-bubble' }\n \"\n ></ng-container>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n replyCountButton;\n context: { position: 'outside-message-bubble', message: message }\n \"\n ></ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n messageDateAndSender;\n context: { position: 'outside-message-bubble' }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n</div>\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 str-chat__quoted-message-preview\"\n data-testid=\"quoted-message-container\"\n [class.mine]=\"isSentByCurrentUser\"\n (click)=\"\n jumpToMessage(\n (message?.quoted_message)!.id,\n message?.quoted_message?.parent_id\n )\n \"\n (keyup.enter)=\"\n jumpToMessage(\n (message?.quoted_message)!.id,\n message?.quoted_message?.parent_id\n )\n \"\n >\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host str-chat__message-sender-avatar\"\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 str-chat__quoted-message-bubble\">\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?.translation ||\n message?.quoted_message?.html ||\n message?.quoted_message?.text\n \"\n ></div>\n </div>\n </div>\n</ng-template>\n\n<!-- We need these markups in slightly different positions in theme-v1 and theme-v2, this soultion makes that possible without duplicating the code -->\n<ng-template #messageDateAndSender let-position=\"position\">\n <!-- eslint-disable @angular-eslint/template/conditional-complexity -->\n <ng-container\n *ngIf=\"\n (position === 'inside-message-bubble' && themeVersion === '1') ||\n (position === 'outside-message-bubble' && themeVersion === '2')\n \"\n >\n <div\n class=\"str-chat__translation-notice\"\n *ngIf=\"shouldDisplayTranslationNotice\"\n data-testid=\"translation-notice\"\n >\n <button\n data-testid=\"see-original\"\n *ngIf=\"displayedMessageTextContent === 'translation'\"\n (click)=\"displayOriginalMessage()\"\n (keyup.enter)=\"displayOriginalMessage()\"\n translate\n >\n streamChat.See original (automatically translated)\n </button>\n <button\n data-testid=\"see-translation\"\n *ngIf=\"displayedMessageTextContent === 'original'\"\n (click)=\"displayTranslatedMessage()\"\n (keyup.enter)=\"displayTranslatedMessage()\"\n translate\n >\n streamChat.See translation\n </button>\n </div>\n <div\n class=\"\n str-chat__message-data\n str-chat__message-simple-data\n str-chat__message-metadata\n \"\n >\n <!-- eslint-enable @angular-eslint/template/conditional-complexity -->\n <ng-container *ngIf=\"themeVersion === '2'\">\n <ng-container *ngTemplateOutlet=\"messageStatus\"></ng-container>\n </ng-container>\n <span\n data-testid=\"sender\"\n *ngIf=\"!isSentByCurrentUser\"\n class=\"str-chat__message-simple-name str-chat__message-sender-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 </ng-container>\n</ng-template>\n\n<ng-template #messageStatus>\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' && isMessageDeliveredAndRead && canDisplayReadStatus;\n else deliveredStatus\n \"\n >\n <ng-container *ngTemplateOutlet=\"readStatus\"></ng-container>\n </ng-container>\n </ng-template>\n <ng-template #deliveredStatus>\n <ng-container\n *ngTemplateOutlet=\"\n customDeliveredStatusTemplate || defaultDeliveredStatus;\n context: getDeliveredStatusContext()\n \"\n ></ng-container>\n </ng-template>\n <ng-template #defaultDeliveredStatus>\n <span\n *ngIf=\"mode === 'main'\"\n class=\"\n str-chat__message-simple-status\n str-chat__message-simple-status-angular\n str-chat__message-status\n \"\n data-testid=\"delivered-indicator\"\n tabindex=\"0\"\n [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerHover\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"false\"\n [popperHideOnClickOutside]=\"false\"\n (hover)=\"$event.stopPropagation()\"\n >\n <popper-content #popperContent>\n <div class=\"str-chat__tooltip str-chat__tooltip-angular\">\n {{ \"streamChat.Delivered\" | translate }}\n </div>\n </popper-content>\n <stream-icon-placeholder\n data-testid=\"delivered-icon\"\n icon=\"delivered-icon\"\n ></stream-icon-placeholder>\n </span>\n </ng-template>\n <ng-template #sendingStatus>\n <ng-container\n *ngTemplateOutlet=\"\n customSendingStatusTemplate || defaultSendingStatus;\n context: getSendingStatusContext()\n \"\n ></ng-container>\n </ng-template>\n <ng-template #defaultSendingStatus>\n <span\n class=\"\n str-chat__message-simple-status\n str-chat__message-simple-status-angular\n str-chat__message-status\n \"\n data-testid=\"sending-indicator\"\n tabindex=\"0\"\n [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerHover\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"false\"\n [popperHideOnClickOutside]=\"false\"\n (hover)=\"$event.stopPropagation()\"\n >\n <popper-content #popperContent>\n <div class=\"str-chat__tooltip str-chat__tooltip-angular\">\n {{ \"streamChat.Sending...\" | translate }}\n </div>\n </popper-content>\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 <ng-container\n *ngTemplateOutlet=\"\n customReadStatusTemplate || defaultReadStatus;\n context: getReadStatusContext()\n \"\n ></ng-container>\n </ng-template>\n <ng-template #defaultReadStatus>\n <span\n class=\"\n str-chat__message-simple-status\n str-chat__message-simple-status-angular\n str-chat__message-status\n \"\n data-testid=\"read-indicator\"\n tabindex=\"0\"\n [popper]=\"popperContent\"\n [popperTrigger]=\"popperTriggerHover\"\n [popperPlacement]=\"popperPlacementAuto\"\n [popperHideOnScroll]=\"false\"\n [popperHideOnClickOutside]=\"false\"\n (hover)=\"$event.stopPropagation()\"\n >\n <popper-content #popperContent>\n <div\n class=\"str-chat__tooltip str-chat__tooltip-angular\"\n data-testid=\"read-by-tooltip\"\n >\n {{ readByText }}\n </div>\n </popper-content>\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-container>\n</ng-template>\n\n<ng-template #replyCountButton let-position=\"position\">\n <!-- eslint-disable @angular-eslint/template/conditional-complexity -->\n <div\n *ngIf=\"\n (position === 'inside-message-bubble' && themeVersion === '1') ||\n (position === 'outside-message-bubble' && themeVersion === '2')\n \"\n class=\"\n str-chat__message-simple-reply-button\n str-chat__message-replies-count-button-wrapper\n \"\n >\n <!-- eslint-enable @angular-eslint/template/conditional-complexity -->\n <button\n *ngIf=\"shouldDisplayThreadLink\"\n class=\"str-chat__message-replies-count-button\"\n data-testid=\"reply-count-button\"\n (click)=\"setAsActiveParentMessage()\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n stream-icon-placeholder\n icon=\"reply\"\n ></stream-icon-placeholder>\n {{message?.reply_count === 1 ? ('streamChat.1 reply' | translate) : ('streamChat.{{ replyCount }}\n replies' | translate:replyCountParam)}}\n </button>\n </div>\n</ng-template>\n", components: [{ type: i5.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i6.NgxPopperjsContentComponent, selector: "popper-content" }, { type: i7.MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: ["isOpen", "isMine", "message", "enabledActions"], outputs: ["displayedActionsCount", "isEditing"] }, { type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i9.MessageReactionsComponent, selector: "stream-message-reactions", inputs: ["messageId", "messageReactionCounts", "isSelectorOpen", "latestReactions", "ownReactions"], outputs: ["isSelectorOpenChange"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "parentMessageId", "attachments"] }, { type: i11.LoadingIndicatorPlaceholderComponent, selector: "stream-loading-indicator-placeholder", inputs: ["size", "color"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgxPopperjsDirective, selector: "[popper]", inputs: ["popperTimeout", "popperTimeoutAfterShow", "popperApplyClass", "popper", "popperDisabled", "popperPlacement", "popperApplyArrowClass", "popperPreventOverflow", "popperHideOnClickOutside", "popperTrigger", "popperStyles", "popperAriaDescribeBy", "popperAriaRole", "popperBoundaries", "popperCloseOnClickOutside", "popperDisableAnimation", "popperDisableStyle", "popperHideOnMouseLeave", "popperHideOnScroll", "popperAppendTo", "popperModifiers", "popperPositionFixed", "popperDelay", "popperShowOnStart", "popperTarget"], outputs: ["popperOnHidden", "popperOnShown", "popperOnUpdate"], exportAs: ["popper"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i13.TranslatePipe } });
|
|
303
322
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageComponent, decorators: [{
|
|
304
323
|
type: Component,
|
|
305
324
|
args: [{
|
|
@@ -321,4 +340,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
321
340
|
type: ViewChild,
|
|
322
341
|
args: ['container']
|
|
323
342
|
}] } });
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBWXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBR3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRMUU7O0dBRUc7QUFNSCxNQUFNLE9BQU8sZ0JBQWdCO0lBNkMzQixZQUNVLGlCQUFvQyxFQUNwQyxjQUE4QixFQUM5QixzQkFBOEMsRUFDOUMsS0FBd0IsRUFDaEMsWUFBMEI7UUFKbEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQTVDbEM7O1dBRUc7UUFDTSwwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFLOUM7O1dBRUc7UUFDTSxTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUMxQzs7V0FFRztRQUNNLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSy9CLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMv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c0JBQXJCLEtBQUs7Z0JBcUIwQixTQUFTO3NCQUF4QyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdHRhY2htZW50LCBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudExpc3RDb250ZXh0LFxuICBNZW50aW9uVGVtcGxhdGVDb250ZXh0LFxuICBNZXNzYWdlQWN0aW9uc0JveENvbnRleHQsXG4gIE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0LFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBTdHJlYW1NZXNzYWdlLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuL3BhcnNlLWRhdGUnO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSAnZW1vamktcmVnZXgnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IGxpc3RVc2VycyB9IGZyb20gJy4uL2xpc3QtdXNlcnMnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hQb3BwZXJqc1RyaWdnZXJzLCBOZ3hQb3BwZXJqc1BsYWNlbWVudHMgfSBmcm9tICduZ3gtcG9wcGVyanMnO1xuXG50eXBlIE1lc3NhZ2VQYXJ0ID0ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHR5cGU6ICd0ZXh0JyB8ICdtZW50aW9uJztcbiAgdXNlcj86IFVzZXJSZXNwb25zZTtcbn07XG5cbi8qKlxuICogVGhlIGBNZXNzYWdlYCBjb21wb25lbnQgZGlzcGxheXMgYSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNlbmRlciBhbmQgZGF0ZSwgYW5kIGVuYWJsZXMgW2ludGVyYWN0aW9uIHdpdGggdGhlIG1lc3NhZ2UgKGkuZS4gZWRpdCBvciByZWFjdCldKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBbY2hhbm5lbCBjYXBhYmlsaXRpZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSB0aGF0IGFyZSBlbmFibGVkIGZvciB0aGUgY3VycmVudCB1c2VyLCB0aGUgbGlzdCBvZiBbc3VwcG9ydGVkIGludGVyYWN0aW9uc10oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KSBjYW4gYmUgZm91bmQgaW4gb3VyIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuIFVuYXRob3JpemVkIGFjdGlvbnMgd29uJ3QgYmUgZGlzcGxheWVkIG9uIHRoZSBVSS4gVGhlIFtgTWVzc2FnZUxpc3RgXSguL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keCkgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIGJhc2VkIG9uIFtjaGFubmVsIGNhcGFiaWxpdGllc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVzc2FnZSBzdGF0dXMgKHNlbmRpbmcsIHNlbnQsIHdobyByZWFkIHRoZSBtZXNzYWdlKSBpcyBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpc0xhc3RTZW50TWVzc2FnZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZGlzcGFseWVkIGluIGEgY2hhbm5lbCBvciBpbiBhIFt0aHJlYWRdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBIaWdobGlnaHRpbmcgaXMgdXNlZCB0byBhZGQgdmlzdWFsIGVtcGhhc2l6ZSB0byBhIG1lc3NhZ2Ugd2hlbiBqdW1waW5nIHRvIHRoZSBtZXNzYWdlXG4gICAqL1xuICBASW5wdXQoKSBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IHRoZW1lVmVyc2lvbjogJzEnIHwgJzInO1xuICBjYW5SZWNlaXZlUmVhZEV2ZW50czogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2FuUmVhY3RUb01lc3NhZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNBY3Rpb25Cb3hPcGVuID0gZmFsc2U7XG4gIGlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSBmYWxzZTtcbiAgdmlzaWJsZU1lc3NhZ2VBY3Rpb25zQ291bnQgPSAwO1xuICBtZXNzYWdlVGV4dFBhcnRzOiBNZXNzYWdlUGFydFtdID0gW107XG4gIG1lbnRpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8TWVudGlvblRlbXBsYXRlQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGF0dGFjaG1lbnRMaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRMaXN0Q29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VSZWFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8TWVzc2FnZVJlYWN0aW9uc0NvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBwb3BwZXJUcmlnZ2VyQ2xpY2sgPSBOZ3hQb3BwZXJqc1RyaWdnZXJzLmNsaWNrO1xuICBwb3BwZXJUcmlnZ2VySG92ZXIgPSBOZ3hQb3BwZXJqc1RyaWdnZXJzLmhvdmVyO1xuICBwb3BwZXJQbGFjZW1lbnRBdXRvID0gTmd4UG9wcGVyanNQbGFjZW1lbnRzLkFVVE87XG4gIHNob3VsZERpc3BsYXlUcmFuc2xhdGlvbk5vdGljZSA9IGZhbHNlO1xuICBkaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQ6ICdvcmlnaW5hbCcgfCAndHJhbnNsYXRpb24nID0gJ29yaWdpbmFsJztcbiAgcHJpdmF0ZSBxdW90ZWRNZXNzYWdlQXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB1c2VyOiBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHJpdmF0ZSBjb250YWluZXI6XG4gICAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZVxuICApIHtcbiAgICB0aGlzLnRoZW1lVmVyc2lvbiA9IHRoZW1lU2VydmljZS50aGVtZVZlcnNpb247XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhdENsaWVudFNlcnZpY2UudXNlciQuc3Vic2NyaWJlKCh1KSA9PiB7XG4gICAgICAgIHRoaXMudXNlciA9IHU7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVudGlvblRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMubWVudGlvblRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5hdHRhY2htZW50TGlzdFRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMuYXR0YWNobWVudExpc3RUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZUFjdGlvbnNCb3hUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLm1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VSZWFjdGlvbnNUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLm1lc3NhZ2VSZWFjdGlvbnNUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMubWVzc2FnZSkge1xuICAgICAgdGhpcy5zaG91bGREaXNwbGF5VHJhbnNsYXRpb25Ob3RpY2UgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGlzcGxheWVkTWVzc2FnZVRleHRDb250ZW50ID0gJ29yaWdpbmFsJztcbiAgICAgIHRoaXMuY3JlYXRlTWVzc2FnZVBhcnRzKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbEF0dGFjaG1lbnRzID0gdGhpcy5tZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8uYXR0YWNobWVudHM7XG4gICAgICB0aGlzLnF1b3RlZE1lc3NhZ2VBdHRhY2htZW50cyA9XG4gICAgICAgIG9yaWdpbmFsQXR0YWNobWVudHMgJiYgb3JpZ2luYWxBdHRhY2htZW50cy5sZW5ndGhcbiAgICAgICAgICA/IFtvcmlnaW5hbEF0dGFjaG1lbnRzWzBdXVxuICAgICAgICAgIDogW107XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucykge1xuICAgICAgdGhpcy5jYW5SZWFjdFRvTWVzc2FnZSA9XG4gICAgICAgIHRoaXMuZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLmluZGV4T2YoJ3NlbmQtcmVhY3Rpb24nKSAhPT0gLTE7XG4gICAgICB0aGlzLmNhblJlY2VpdmVSZWFkRXZlbnRzID1cbiAgICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMuaW5kZXhPZigncmVhZC1ldmVudHMnKSAhPT0gLTE7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXQgc2hvdWxkRGlzcGxheVRocmVhZExpbmsoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5tZXNzYWdlPy5yZXBseV9jb3VudCAmJlxuICAgICAgdGhpcy5tb2RlICE9PSAndGhyZWFkJyAmJlxuICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMuaW5kZXhPZignc2VuZC1yZXBseScpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBnZXQgaXNTZW50QnlDdXJyZW50VXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlPy51c2VyPy5pZCA9PT0gdGhpcy51c2VyPy5pZDtcbiAgfVxuXG4gIGdldCByZWFkQnlUZXh0KCkge1xuICAgIHJldHVybiBsaXN0VXNlcnModGhpcy5tZXNzYWdlIS5yZWFkQnkpO1xuICB9XG5cbiAgZ2V0IGxhc3RSZWFkVXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlPy5yZWFkQnkuZmlsdGVyKCh1KSA9PiB1LmlkICE9PSB0aGlzLnVzZXI/LmlkKVswXTtcbiAgfVxuXG4gIGdldCBpc09ubHlSZWFkQnlNZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IGlzUmVhZEJ5TXVsdGlwbGVVc2VycygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlICYmIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBpc01lc3NhZ2VEZWxpdmVyZWRBbmRSZWFkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1lc3NhZ2UgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgIHRoaXMubWVzc2FnZS5yZWFkQnkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBnZXQgcGFyc2VkRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZSB8fCAhdGhpcy5tZXNzYWdlPy5jcmVhdGVkX2F0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBwYXJzZURhdGUodGhpcy5tZXNzYWdlLmNyZWF0ZWRfYXQpO1xuICB9XG5cbiAgZ2V0IGFyZU9wdGlvbnNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhKFxuICAgICAgIXRoaXMubWVzc2FnZS50eXBlIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2Vycm9yJyB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnR5cGUgPT09ICdzeXN0ZW0nIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ2VwaGVtZXJhbCcgfHxcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdmYWlsZWQnIHx8XG4gICAgICB0aGlzLm1lc3NhZ2Uuc3RhdHVzID09PSAnc2VuZGluZycgfHxcbiAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmICF0aGlzLm1lc3NhZ2UucGFyZW50X2lkKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzQXR0YWNobWVudCgpIHtcbiAgICByZXR1cm4gISF0aGlzLm1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmICEhdGhpcy5tZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBoYXNSZWFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5tZXNzYWdlPy5yZWFjdGlvbl9jb3VudHMgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubWVzc2FnZS5yZWFjdGlvbl9jb3VudHMpLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgZ2V0IHJlcGx5Q291bnRQYXJhbSgpIHtcbiAgICByZXR1cm4geyByZXBseUNvdW50OiB0aGlzLm1lc3NhZ2U/LnJlcGx5X2NvdW50IH07XG4gIH1cblxuICBnZXQgY2FuRGlzcGxheVJlYWRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2FuUmVjZWl2ZVJlYWRFdmVudHMgIT09IGZhbHNlICYmXG4gICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucy5pbmRleE9mKCdyZWFkLWV2ZW50cycpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBnZXRBdHRhY2htZW50TGlzdENvbnRleHQoKTogQXR0YWNobWVudExpc3RDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZUlkOiB0aGlzLm1lc3NhZ2U/LmlkIHx8ICcnLFxuICAgICAgYXR0YWNobWVudHM6IHRoaXMubWVzc2FnZT8uYXR0YWNobWVudHMgfHwgW10sXG4gICAgICBwYXJlbnRNZXNzYWdlSWQ6IHRoaXMubWVzc2FnZT8ucGFyZW50X2lkLFxuICAgIH07XG4gIH1cblxuICBnZXRRdW90ZWRNZXNzYWdlQXR0YWNobWVudExpc3RDb250ZXh0KCk6IEF0dGFjaG1lbnRMaXN0Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VJZDogdGhpcy5tZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8uaWQgfHwgJycsXG4gICAgICBhdHRhY2htZW50czogdGhpcy5xdW90ZWRNZXNzYWdlQXR0YWNobWVudHMhLFxuICAgICAgcGFyZW50TWVzc2FnZUlkOiB0aGlzPy5tZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8ucGFyZW50X2lkLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCgpOiBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VSZWFjdGlvbkNvdW50czogdGhpcy5tZXNzYWdlPy5yZWFjdGlvbl9jb3VudHMgfHwge30sXG4gICAgICBsYXRlc3RSZWFjdGlvbnM6IHRoaXMubWVzc2FnZT8ubGF0ZXN0X3JlYWN0aW9ucyB8fCBbXSxcbiAgICAgIGlzU2VsZWN0b3JPcGVuOiB0aGlzLmlzUmVhY3Rpb25TZWxlY3Rvck9wZW4sXG4gICAgICBpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+XG4gICAgICAgICh0aGlzLmlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSBpc09wZW4pLFxuICAgICAgbWVzc2FnZUlkOiB0aGlzLm1lc3NhZ2U/LmlkLFxuICAgICAgb3duUmVhY3Rpb25zOiB0aGlzLm1lc3NhZ2U/Lm93bl9yZWFjdGlvbnMgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIHJlc2VuZE1lc3NhZ2UoKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnJlc2VuZE1lc3NhZ2UodGhpcy5tZXNzYWdlISk7XG4gIH1cblxuICBzZXRBc0FjdGl2ZVBhcmVudE1lc3NhZ2UoKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSh0aGlzLm1lc3NhZ2UpO1xuICB9XG5cbiAgZ2V0TWVudGlvbkNvbnRleHQobWVzc2FnZVBhcnQ6IE1lc3NhZ2VQYXJ0KTogTWVudGlvblRlbXBsYXRlQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IG1lc3NhZ2VQYXJ0LmNvbnRlbnQsXG4gICAgICB1c2VyOiBtZXNzYWdlUGFydC51c2VyISxcbiAgICB9O1xuICB9XG5cbiAgZ2V0TWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0KCk6IE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzT3BlbjogdGhpcy5pc0FjdGlvbkJveE9wZW4sXG4gICAgICBpc01pbmU6IHRoaXMuaXNTZW50QnlDdXJyZW50VXNlcixcbiAgICAgIGVuYWJsZWRBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIGRpc3BsYXllZEFjdGlvbnNDb3VudENoYW5lSGFubGVyOiAoY291bnQpID0+IHtcbiAgICAgICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbnNDb3VudCA9IGNvdW50O1xuICAgICAgICAvLyBtZXNzYWdlIGFjdGlvbiBib3ggY2hhbmdlcyBVSSBiaW5kaW5ncyBpbiBwYXJlbnQsIHNvIHdlJ2xsIGhhdmUgdG8gcmVydW4gY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBpc0VkaXRpbmdDaGFuZ2VIYW5kbGVyOiAoaXNFZGl0aW5nKSA9PiB7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nID0gaXNFZGl0aW5nO1xuICAgICAgICB0aGlzLmlzQWN0aW9uQm94T3BlbiA9ICF0aGlzLmlzRWRpdGluZztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGp1bXBUb01lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcsIHBhcmVudE1lc3NhZ2VJZD86IHN0cmluZykge1xuICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5qdW1wVG9NZXNzYWdlKG1lc3NhZ2VJZCwgcGFyZW50TWVzc2FnZUlkKTtcbiAgfVxuXG4gIGRpc3BsYXlUcmFuc2xhdGVkTWVzc2FnZSgpIHtcbiAgICB0aGlzLmNyZWF0ZU1lc3NhZ2VQYXJ0cyh0cnVlKTtcbiAgfVxuXG4gIGRpc3BsYXlPcmlnaW5hbE1lc3NhZ2UoKSB7XG4gICAgdGhpcy5jcmVhdGVNZXNzYWdlUGFydHMoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZXNzYWdlUGFydHMoc2hvdWxkVHJhbnNsYXRlID0gdHJ1ZSkge1xuICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRNZXNzYWdlQ29udGVudChzaG91bGRUcmFuc2xhdGUpO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpc0hUTUwgPSBmYWxzZTtcbiAgICAgIC8vIEJhY2tlbmQgd2lsbCB3cmFwIEhUTUwgY29udGVudCB3aXRoIDxwPjwvcD5cXG5cbiAgICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJzxwPicpKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoJzxwPicsICcnKTtcbiAgICAgICAgaXNIVE1MID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50LmVuZHNXaXRoKCc8L3A+XFxuJykpIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgnPC9wPlxcbicsICcnKTtcbiAgICAgICAgaXNIVE1MID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzIHx8XG4gICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLmZpeEVtb2ppRGlzcGxheShjb250ZW50KTtcbiAgICAgICAgaWYgKCFpc0hUTUwpIHtcbiAgICAgICAgICBjb250ZW50ID0gdGhpcy53cmFwTGluc2tXaXRoQW5jaG9yVGFnKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cyA9IFt7IGNvbnRlbnQsIHR5cGU6ICd0ZXh0JyB9XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgdGV4dCA9IGNvbnRlbnQ7XG4gICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmZvckVhY2goKHVzZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBtZW50aW9uID0gYEAke3VzZXIubmFtZSB8fCB1c2VyLmlkfWA7XG4gICAgICAgICAgbGV0IHByZWNlZGluZ1RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0LmluZGV4T2YobWVudGlvbikpO1xuICAgICAgICAgIHByZWNlZGluZ1RleHQgPSB0aGlzLmZpeEVtb2ppRGlzcGxheShwcmVjZWRpbmdUZXh0KTtcbiAgICAgICAgICBpZiAoIWlzSFRNTCkge1xuICAgICAgICAgICAgcHJlY2VkaW5nVGV4dCA9IHRoaXMud3JhcExpbnNrV2l0aEFuY2hvclRhZyhwcmVjZWRpbmdUZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgY29udGVudDogcHJlY2VkaW5nVGV4dCxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMucHVzaCh7XG4gICAgICAgICAgICBjb250ZW50OiBtZW50aW9uLFxuICAgICAgICAgICAgdHlwZTogJ21lbnRpb24nLFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHByZWNlZGluZ1RleHQgKyBtZW50aW9uLCAnJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgIHRleHQgPSB0aGlzLmZpeEVtb2ppRGlzcGxheSh0ZXh0KTtcbiAgICAgICAgICBpZiAoIWlzSFRNTCkge1xuICAgICAgICAgICAgdGV4dCA9IHRoaXMud3JhcExpbnNrV2l0aEFuY2hvclRhZyh0ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzLnB1c2goeyBjb250ZW50OiB0ZXh0LCB0eXBlOiAndGV4dCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1lc3NhZ2VDb250ZW50KHNob3VsZFRyYW5zbGF0ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IHRoaXMubWVzc2FnZT8uaHRtbCB8fCB0aGlzLm1lc3NhZ2U/LnRleHQ7XG4gICAgaWYgKHNob3VsZFRyYW5zbGF0ZSkge1xuICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLm1lc3NhZ2U/LnRyYW5zbGF0aW9uO1xuICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheVRyYW5zbGF0aW9uTm90aWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPSAndHJhbnNsYXRpb24nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uIHx8IG9yaWdpbmFsQ29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPSAnb3JpZ2luYWwnO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsQ29udGVudDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpeEVtb2ppRGlzcGxheShjb250ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBXcmFwIGVtb2ppcyBpbiBzcGFuIHRvIGRpc3BsYXkgZW1vamlzIGNvcnJlY3RseSBpbiBDaHJvbWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTk2MjIzXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgJ2cnKTtcbiAgICAvLyBCYXNlZCBvbiB0aGlzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NTY1MTEyL2phdmFzY3JpcHQtaG93LXRvLWZpbmQtb3V0LWlmLXRoZS11c2VyLWJyb3dzZXItaXMtY2hyb21lXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gICAgY29uc3QgaXNDaHJvbWUgPVxuICAgICAgISEod2luZG93IGFzIGFueSkuY2hyb21lICYmIHR5cGVvZiAod2luZG93IGFzIGFueSkub3ByID09PSAndW5kZWZpbmVkJztcbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoXG4gICAgICByZWdleCxcbiAgICAgIChtYXRjaCkgPT5cbiAgICAgICAgYDxzcGFuICR7XG4gICAgICAgICAgaXNDaHJvbWUgPyAnY2xhc3M9XCJzdHItY2hhdF9fZW1vamktZGlzcGxheS1maXhcIicgOiAnJ1xuICAgICAgICB9PiR7bWF0Y2h9PC9zcGFuPmBcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBwcml2YXRlIHdyYXBMaW5za1dpdGhBbmNob3JUYWcoY29udGVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsUmVnZXhwID1cbiAgICAgIC8oPzooPzpodHRwcz98ZnRwfGZpbGUpOlxcL1xcL3x3d3dcXC58ZnRwXFwuKSg/OlxcKFstQS1aMC05KyZAIy8lPX5ffCQ/ITosLl0qXFwpfFstQS1aMC05KyZAIy8lPX5ffCQ/ITosLl0pKig/OlxcKFstQS1aMC05KyZAIy8lPX5ffCQ/ITosLl0qXFwpfFtBLVowLTkrJkAjLyU9fl98JF0pL2dpbTtcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKFxuICAgICAgdXJsUmVnZXhwLFxuICAgICAgKG1hdGNoKSA9PiBgPGEgaHJlZj1cIiR7bWF0Y2h9XCIgcmVsPVwibm9mb2xsb3dcIj4ke21hdGNofTwvYT5gXG4gICAgKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUgc3RyLWNoYXRfX21lc3NhZ2Ugc3RyLWNoYXRfX21lc3NhZ2UtLXt7XG4gICAgbWVzc2FnZT8udHlwZVxuICB9fSBzdHItY2hhdF9fbWVzc2FnZS0te3sgbWVzc2FnZT8uc3RhdHVzIH19IHt7XG4gICAgbWVzc2FnZT8udGV4dCA/ICdzdHItY2hhdF9fbWVzc2FnZS0taGFzLXRleHQnIDogJ2hhcy1uby10ZXh0J1xuICB9fVwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS0tbWVdPVwiaXNTZW50QnlDdXJyZW50VXNlclwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS0tb3RoZXJdPVwiIWlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLS1tZV09XCJpc1NlbnRCeUN1cnJlbnRVc2VyXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS1oYXMtYXR0YWNobWVudF09XCJoYXNBdHRhY2htZW50XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS13aXRoLXJlYWN0aW9uc109XCJoYXNSZWFjdGlvbnNcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtLWhpZ2hsaWdodGVkXT1cImlzSGlnaGxpZ2h0ZWRcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2Utd2l0aC10aHJlYWQtbGlua109XCJzaG91bGREaXNwbGF5VGhyZWFkTGlua1wiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1zZW5kLWNhbi1iZS1yZXRyaWVkXT1cIlxuICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgbWVzc2FnZT8uZXJyb3JTdGF0dXNDb2RlICE9PSA0MDNcbiAgXCJcbiAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWNvbnRhaW5lclwiXG4gIChtb3VzZWxlYXZlKT1cImlzQWN0aW9uQm94T3BlbiA9IGZhbHNlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtZXNzYWdlPy5kZWxldGVkX2F0OyBlbHNlIGRlbGV0ZWRNZXNzYWdlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2U/LnR5cGUgIT09ICdzeXN0ZW0nOyBlbHNlIHN5c3RlbU1lc3NhZ2VcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGVtZVZlcnNpb24gPT09ICcxJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVN0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICBkYXRhLXRlc3RpZD1cImF2YXRhclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3Qgc3RyLWNoYXRfX21lc3NhZ2Utc2VuZGVyLWF2YXRhclwiXG4gICAgICAgIFtpbWFnZVVybF09XCJtZXNzYWdlPy51c2VyPy5pbWFnZVwiXG4gICAgICAgIFtuYW1lXT1cIm1lc3NhZ2U/LnVzZXI/Lm5hbWUgfHwgbWVzc2FnZT8udXNlcj8uaWRcIlxuICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgIGxvY2F0aW9uPVwibWVzc2FnZS1zZW5kZXJcIlxuICAgICAgICBbdXNlcl09XCJtZXNzYWdlPy51c2VyIHx8IHVuZGVmaW5lZFwiXG4gICAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWlubmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9ucyBzdHItY2hhdF9fbWVzc2FnZS1vcHRpb25zXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1lc3NhZ2Utb3B0aW9uc1wiXG4gICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLWVkaXQtaW4tcHJvZ3Jlc3NdPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAqbmdJZj1cImFyZU9wdGlvbnNWaXNpYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibWVzc2FnZS1hY3Rpb25zLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAjbWVzc2FnZUFjdGlvbnNUb2dnbGVcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtY29udGFpbmVyXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uLS1vcHRpb25zXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb24tLW9wdGlvbnMtLWVkaXRpbmddPVwiXG4gICAgICAgICAgICAgIGlzRWRpdGluZ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtwb3BwZXJdPVwicG9wcGVyQ29udGVudFwiXG4gICAgICAgICAgICBbcG9wcGVyVHJpZ2dlcl09XCJwb3BwZXJUcmlnZ2VyQ2xpY2tcIlxuICAgICAgICAgICAgW3BvcHBlclBsYWNlbWVudF09XCJwb3BwZXJQbGFjZW1lbnRBdXRvXCJcbiAgICAgICAgICAgIFtwb3BwZXJIaWRlT25TY3JvbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcG9wcGVySGlkZU9uQ2xpY2tPdXRzaWRlXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcHBlckhpZGVPbk1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwb3BwZXItY29udGVudCAjcG9wcGVyQ29udGVudD5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgI2RlZmF1bHRNZXNzYWdlQWN0aW9uc0JveFxuICAgICAgICAgICAgICAgIGxldC1pc09wZW49XCJpc09wZW5cIlxuICAgICAgICAgICAgICAgIGxldC1pc01pbmU9XCJpc01pbmVcIlxuICAgICAgICAgICAgICAgIGxldC1lbmFibGVkQWN0aW9ucz1cImVuYWJsZWRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgbGV0LWRpc3BsYXllZEFjdGlvbnNDb3VudENoYW5lSGFubGVyPVwiZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXJcIlxuICAgICAgICAgICAgICAgIGxldC1pc0VkaXRpbmdDaGFuZ2VIYW5kbGVyPVwiaXNFZGl0aW5nQ2hhbmdlSGFuZGxlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3hcbiAgICAgICAgICAgICAgICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICAgIFtpc01pbmVdPVwiaXNNaW5lXCJcbiAgICAgICAgICAgICAgICAgIFtlbmFibGVkQWN0aW9uc109XCJlbmFibGVkQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgKGRpc3BsYXllZEFjdGlvbnNDb3VudCk9XCJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXIoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChpc0VkaXRpbmcpPVwiaXNFZGl0aW5nQ2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9zdHJlYW0tbWVzc2FnZS1hY3Rpb25zLWJveD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlQWN0aW9uc0JveDtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGdldE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvcG9wcGVyLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtYnV0dG9uXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ2aXNpYmxlTWVzc2FnZUFjdGlvbnNDb3VudCA+IDBcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlzQWN0aW9uQm94T3BlbiA9ICFpc0FjdGlvbkJveE9wZW5cIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNBY3Rpb25Cb3hPcGVuID0gIWlzQWN0aW9uQm94T3BlblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGljb249XCJhY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvY29uZGl0aW9uYWwtY29tcGxleGl0eSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBlbmFibGVkTWVzc2FnZUFjdGlvbnMuaW5kZXhPZignc2VuZC1yZXBseScpICE9PSAtMSAmJlxuICAgICAgICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvblxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tdGhyZWFkXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXJlcGx5LWluLXRocmVhZC1idXR0b25cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlcGx5LWluLXRocmVhZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgIGljb249XCJyZXBseS1pbi10aHJlYWRcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5SZWFjdFRvTWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvblxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tcmVhY3Rpb25zXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1idXR0b25cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSAhaXNSZWFjdGlvblNlbGVjdG9yT3BlblwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9ICFpc1JlYWN0aW9uU2VsZWN0b3JPcGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgIGljb249XCJyZWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1ob3N0XCI+XG4gICAgICAgICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2RlZmF1bHRNZXNzYWdlUmVhY3Rpb25zXG4gICAgICAgICAgICBsZXQtbWVzc2FnZVJlYWN0aW9uQ291bnRzPVwibWVzc2FnZVJlYWN0aW9uQ291bnRzXCJcbiAgICAgICAgICAgIGxldC1sYXRlc3RSZWFjdGlvbnM9XCJsYXRlc3RSZWFjdGlvbnNcIlxuICAgICAgICAgICAgbGV0LWlzU2VsZWN0b3JPcGVuPVwiaXNTZWxlY3Rvck9wZW5cIlxuICAgICAgICAgICAgbGV0LWlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlcj1cImlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlclwiXG4gICAgICAgICAgICBsZXQtbWVzc2FnZUlkPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICAgIGxldC1vd25SZWFjdGlvbnM9XCJvd25SZWFjdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdHJlYW0tbWVzc2FnZS1yZWFjdGlvbnNcbiAgICAgICAgICAgICAgW21lc3NhZ2VSZWFjdGlvbkNvdW50c109XCJtZXNzYWdlUmVhY3Rpb25Db3VudHNcIlxuICAgICAgICAgICAgICBbbGF0ZXN0UmVhY3Rpb25zXT1cImxhdGVzdFJlYWN0aW9uc1wiXG4gICAgICAgICAgICAgIFtpc1NlbGVjdG9yT3Blbl09XCJpc1NlbGVjdG9yT3BlblwiXG4gICAgICAgICAgICAgIChpc1NlbGVjdG9yT3BlbkNoYW5nZSk9XCJpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICAgICAgW293blJlYWN0aW9uc109XCJvd25SZWFjdGlvbnNcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgbWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlUmVhY3Rpb25zO1xuICAgICAgICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCgpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1idWJibGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQXR0YWNobWVudCAmJiAhbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAjZGVmYXVsdEF0dGFjaG1lbnRzXG4gICAgICAgICAgICAgIGxldC1tZXNzYWdlSWQ9XCJtZXNzYWdlSWRcIlxuICAgICAgICAgICAgICBsZXQtYXR0YWNobWVudHM9XCJhdHRhY2htZW50c1wiXG4gICAgICAgICAgICAgIGxldC1wYXJlbnRNZXNzYWdlSWQ9XCJwYXJlbnRNZXNzYWdlSWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtbGlzdFxuICAgICAgICAgICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICAgICAgICBbYXR0YWNobWVudHNdPVwiYXR0YWNobWVudHNcIlxuICAgICAgICAgICAgICAgIFtwYXJlbnRNZXNzYWdlSWRdPVwicGFyZW50TWVzc2FnZUlkXCJcbiAgICAgICAgICAgICAgPjwvc3RyZWFtLWF0dGFjaG1lbnQtbGlzdD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudExpc3RUZW1wbGF0ZSB8fCBkZWZhdWx0QXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudExpc3RDb250ZXh0KClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXRleHRcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZT8udGV4dCB8fCAobWVzc2FnZT8ucXVvdGVkX21lc3NhZ2UgJiYgaGFzQXR0YWNobWVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbm5lci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZXh0LWlubmVyIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10ZXh0LWlubmVyXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1saWdodC10ZXh0LWlubmVyLS1oYXMtYXR0YWNobWVudF09XCJcbiAgICAgICAgICAgICAgICBoYXNBdHRhY2htZW50XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnICYmIG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSAhPT0gNDAzXG4gICAgICAgICAgICAgICAgICA/IHJlc2VuZE1lc3NhZ2UoKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgbWVzc2FnZT8uZXJyb3JTdGF0dXNDb2RlICE9PSA0MDNcbiAgICAgICAgICAgICAgICAgID8gcmVzZW5kTWVzc2FnZSgpXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVvdGVkTWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtbGlzdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQXR0YWNobWVudCAmJiBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2F0dGFjaG1lbnRzXT1cIm1lc3NhZ2UhLmF0dGFjaG1lbnRzIVwiXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlIS5pZFwiXG4gICAgICAgICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNsaWVudC1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2U/LnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgICAgICBzdHItY2hhdF9fc2ltcGxlLW1lc3NhZ2UtLWVycm9yLW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLS1lcnJvci1tZXNzYWdlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5FcnJvciDCtyBVbnNlbnRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICAgICAgc3RyLWNoYXRfX3NpbXBsZS1tZXNzYWdlLS1lcnJvci1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS0tZXJyb3ItbWVzc2FnZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgKG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSA9PT0gNDAzXG4gICAgICAgICAgICAgICAgICAgID8gXCJzdHJlYW1DaGF0Lk1lc3NhZ2UgRmFpbGVkIMK3IFVuYXV0aG9yaXplZFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJzdHJlYW1DaGF0Lk1lc3NhZ2UgRmFpbGVkIMK3IENsaWNrIHRvIHRyeSBhZ2FpblwiXG4gICAgICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvdXNlLXRyYWNrLWJ5LWZ1bmN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFydCBvZiBtZXNzYWdlVGV4dFBhcnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYXJ0LnR5cGUgPT09ICd0ZXh0JzsgZWxzZSBtZW50aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInBhcnQuY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWVudGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNZW50aW9uIGxldC1jb250ZW50PVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1tZW50aW9uXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtZW50aW9uVGVtcGxhdGUgfHwgZGVmYXVsdE1lbnRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGdldE1lbnRpb25Db250ZXh0KHBhcnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMidcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1lcnJvci1pY29uXCJcbiAgICAgICAgICAgIGljb249XCJlcnJvclwiXG4gICAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHJlcGx5Q291bnRCdXR0b247XG4gICAgICAgICAgICBjb250ZXh0OiB7IHBvc2l0aW9uOiAnaW5zaWRlLW1lc3NhZ2UtYnViYmxlJyB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VEYXRlQW5kU2VuZGVyO1xuICAgICAgICAgICAgY29udGV4dDogeyBwb3NpdGlvbjogJ2luc2lkZS1tZXNzYWdlLWJ1YmJsZScgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIHJlcGx5Q291bnRCdXR0b247XG4gICAgICAgICAgY29udGV4dDogeyBwb3NpdGlvbjogJ291dHNpZGUtbWVzc2FnZS1idWJibGUnLCBtZXNzYWdlOiBtZXNzYWdlIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIG1lc3NhZ2VEYXRlQW5kU2VuZGVyO1xuICAgICAgICAgIGNvbnRleHQ6IHsgcG9zaXRpb246ICdvdXRzaWRlLW1lc3NhZ2UtYnViYmxlJyB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVsZXRlZE1lc3NhZ2U+XG4gIDxkaXYgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWRlbGV0ZWQtY29tcG9uZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1kZWxldGVkLWlubmVyXCIgdHJhbnNsYXRlPlxuICAgICAgc3RyZWFtQ2hhdC5UaGlzIG1lc3NhZ2Ugd2FzIGRlbGV0ZWQuLi5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N5c3RlbU1lc3NhZ2U+XG4gIDxkaXYgZGF0YS10ZXN0aWQ9XCJzeXN0ZW0tbWVzc2FnZVwiIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX190ZXh0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fbGluZVwiPjwvZGl2PlxuICAgICAgPHA+e3sgbWVzc2FnZT8udGV4dCB9fTwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX19saW5lXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX2RhdGVcIj5cbiAgICAgIHt7IHBhcnNlZERhdGUgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3F1b3RlZE1lc3NhZ2U+XG4gIDxkaXZcbiAgICAqbmdJZj1cIm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlXCJcbiAgICBjbGFzcz1cInF1b3RlZC1tZXNzYWdlIHN0ci1jaGF0X19xdW90ZWQtbWVzc2FnZS1wcmV2aWV3XCJcbiAgICBkYXRhLXRlc3RpZD1cInF1b3RlZC1tZXNzYWdlLWNvbnRhaW5lclwiXG4gICAgW2NsYXNzLm1pbmVdPVwiaXNTZW50QnlDdXJyZW50VXNlclwiXG4gICAgKGNsaWNrKT1cIlxuICAgICAganVtcFRvTWVzc2FnZShcbiAgICAgICAgKG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlKSEuaWQsXG4gICAgICAgIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5wYXJlbnRfaWRcbiAgICAgIClcbiAgICBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJcbiAgICAgIGp1bXBUb01lc3NhZ2UoXG4gICAgICAgIChtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZSkhLmlkLFxuICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8ucGFyZW50X2lkXG4gICAgICApXG4gICAgXCJcbiAgPlxuICAgIDxzdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyXG4gICAgICBkYXRhLXRlc3RpZD1cInFvdXRlZC1tZXNzYWdlLWF2YXRhclwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0IHN0ci1jaGF0X19tZXNzYWdlLXNlbmRlci1hdmF0YXJcIlxuICAgICAgW2ltYWdlVXJsXT1cIm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy51c2VyPy5pbWFnZVwiXG4gICAgICBbbmFtZV09XCJcbiAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXI/Lm5hbWUgfHwgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXI/LmlkXG4gICAgICBcIlxuICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgbG9jYXRpb249XCJxdW90ZWQtbWVzc2FnZS1zZW5kZXJcIlxuICAgICAgW3VzZXJdPVwibWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXIgfHwgdW5kZWZpbmVkXCJcbiAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1pbm5lciBzdHItY2hhdF9fcXVvdGVkLW1lc3NhZ2UtYnViYmxlXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmF0dGFjaG1lbnRzICYmXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1xuICAgICAgICAgIGxldC1tZXNzYWdlSWQ9XCJtZXNzYWdlSWRcIlxuICAgICAgICAgIGxldC1hdHRhY2htZW50cz1cImF0dGFjaG1lbnRzXCJcbiAgICAgICAgICBsZXQtcGFyZW50TWVzc2FnZUlkPVwicGFyZW50TWVzc2FnZUlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICAgICBbbWVzc2FnZUlkXT1cIm1lc3NhZ2VJZFwiXG4gICAgICAgICAgICBbYXR0YWNobWVudHNdPVwiYXR0YWNobWVudHNcIlxuICAgICAgICAgICAgW3BhcmVudE1lc3NhZ2VJZF09XCJwYXJlbnRNZXNzYWdlSWRcIlxuICAgICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYXR0YWNobWVudExpc3RUZW1wbGF0ZSB8fCBkZWZhdWx0QXR0YWNobWVudHM7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRRdW90ZWRNZXNzYWdlQXR0YWNobWVudExpc3RDb250ZXh0KClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS10ZXh0XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8udHJhbnNsYXRpb24gfHxcbiAgICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8uaHRtbCB8fFxuICAgICAgICAgIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy50ZXh0XG4gICAgICAgIFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBXZSBuZWVkIHRoZXNlIG1hcmt1cHMgaW4gc2xpZ2h0bHkgZGlmZmVyZW50IHBvc2l0aW9ucyBpbiB0aGVtZS12MSBhbmQgdGhlbWUtdjIsIHRoaXMgc291bHRpb24gbWFrZXMgdGhhdCBwb3NzaWJsZSB3aXRob3V0IGR1cGxpY2F0aW5nIHRoZSBjb2RlIC0tPlxuPG5nLXRlbXBsYXRlICNtZXNzYWdlRGF0ZUFuZFNlbmRlciBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICA8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJcbiAgICAgIChwb3NpdGlvbiA9PT0gJ2luc2lkZS1tZXNzYWdlLWJ1YmJsZScgJiYgdGhlbWVWZXJzaW9uID09PSAnMScpIHx8XG4gICAgICAocG9zaXRpb24gPT09ICdvdXRzaWRlLW1lc3NhZ2UtYnViYmxlJyAmJiB0aGVtZVZlcnNpb24gPT09ICcyJylcbiAgICBcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fdHJhbnNsYXRpb24tbm90aWNlXCJcbiAgICAgICpuZ0lmPVwic2hvdWxkRGlzcGxheVRyYW5zbGF0aW9uTm90aWNlXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwidHJhbnNsYXRpb24tbm90aWNlXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VlLW9yaWdpbmFsXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPT09ICd0cmFuc2xhdGlvbidcIlxuICAgICAgICAoY2xpY2spPVwiZGlzcGxheU9yaWdpbmFsTWVzc2FnZSgpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImRpc3BsYXlPcmlnaW5hbE1lc3NhZ2UoKVwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBzdHJlYW1DaGF0LlNlZSBvcmlnaW5hbCAoYXV0b21hdGljYWxseSB0cmFuc2xhdGVkKVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VlLXRyYW5zbGF0aW9uXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPT09ICdvcmlnaW5hbCdcIlxuICAgICAgICAoY2xpY2spPVwiZGlzcGxheVRyYW5zbGF0ZWRNZXNzYWdlKClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZGlzcGxheVRyYW5zbGF0ZWRNZXNzYWdlKClcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgc3RyZWFtQ2hhdC5TZWUgdHJhbnNsYXRpb25cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLWRhdGFcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLWRhdGFcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2UtbWV0YWRhdGFcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoZW1lVmVyc2lvbiA9PT0gJzInXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlU3RhdHVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZGVyXCJcbiAgICAgICAgKm5nSWY9XCIhaXNTZW50QnlDdXJyZW50VXNlclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLW5hbWUgc3RyLWNoYXRfX21lc3NhZ2Utc2VuZGVyLW5hbWVcIlxuICAgICAgPlxuICAgICAgICB7eyBtZXNzYWdlPy51c2VyPy5uYW1lID8gbWVzc2FnZT8udXNlcj8ubmFtZSA6IG1lc3NhZ2U/LnVzZXI/LmlkIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBkYXRhLXRlc3RpZD1cImRhdGVcIiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10aW1lc3RhbXBcIj5cbiAgICAgICAge3sgcGFyc2VkRGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZVN0YXR1cz5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBpc1NlbnRCeUN1cnJlbnRVc2VyICYmXG4gICAgICAoKGlzTGFzdFNlbnRNZXNzYWdlICYmIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3JlY2VpdmVkJykgfHxcbiAgICAgICAgbWVzc2FnZT8uc3RhdHVzID09PSAnc2VuZGluZycpXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlPy5zdGF0dXMgPT09ICdzZW5kaW5nJzsgZWxzZSBzZW50U3RhdHVzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VuZGluZ1N0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjc2VudFN0YXR1cz5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBtb2RlID09PSAnbWFpbicgJiYgaXNNZXNzYWdlRGVsaXZlcmVkQW5kUmVhZCAmJiBjYW5EaXNwbGF5UmVhZFN0YXR1cztcbiAgICAgICAgICBlbHNlIGRlbGl2ZXJlZFN0YXR1c1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVhZFN0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2RlbGl2ZXJlZFN0YXR1cz5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0lmPVwibW9kZSA9PT0gJ21haW4nXCJcbiAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzXG4gICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cy1hbmd1bGFyXG4gICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc3RhdHVzXG4gICAgICAgIFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZGVsaXZlcmVkLWluZGljYXRvclwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIFtwb3BwZXJdPVwicG9wcGVyQ29udGVudFwiXG4gICAgICAgIFtwb3BwZXJUcmlnZ2VyXT1cInBvcHBlclRyaWdnZXJIb3ZlclwiXG4gICAgICAgIFtwb3BwZXJQbGFjZW1lbnRdPVwicG9wcGVyUGxhY2VtZW50QXV0b1wiXG4gICAgICAgIFtwb3BwZXJIaWRlT25TY3JvbGxdPVwiZmFsc2VcIlxuICAgICAgICBbcG9wcGVySGlkZU9uQ2xpY2tPdXRzaWRlXT1cImZhbHNlXCJcbiAgICAgICAgKGhvdmVyKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICA+XG4gICAgICAgIDxwb3BwZXItY29udGVudCAjcG9wcGVyQ29udGVudD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3Rvb2x0aXAgc3RyLWNoYXRfX3Rvb2x0aXAtYW5ndWxhclwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0LkRlbGl2ZXJlZFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvcG9wcGVyLWNvbnRlbnQ+XG4gICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGVsaXZlcmVkLWljb25cIlxuICAgICAgICAgIGljb249XCJkZWxpdmVyZWQtaWNvblwiXG4gICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNzZW5kaW5nU3RhdHVzPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzXG4gICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1cy1hbmd1bGFyXG4gICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc3RhdHVzXG4gICAgICAgIFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZGluZy1pbmRpY2F0b3JcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbcG9wcGVyXT1cInBvcHBlckNvbnRlbnRcIlxuICAgICAgICBbcG9wcGVyVHJpZ2dlcl09XCJwb3BwZXJUcmlnZ2VySG92ZXJcIlxuICAgICAgICBbcG9wcGVyUGxhY2VtZW50XT1cInBvcHBlclBsYWNlbWVudEF1dG9cIlxuICAgICAgICBbcG9wcGVySGlkZU9uU2Nyb2xsXT1cImZhbHNlXCJcbiAgICAgICAgW3BvcHBlckhpZGVPbkNsaWNrT3V0c2lkZV09XCJmYWxzZVwiXG4gICAgICAgIChob3Zlcik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgPlxuICAgICAgICA8cG9wcGVyLWNvbnRlbnQgI3BvcHBlckNvbnRlbnQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwIHN0ci1jaGF0X190b29sdGlwLWFuZ3VsYXJcIj5cbiAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5TZW5kaW5nLi4uXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wb3BwZXItY29udGVudD5cbiAgICAgICAgPHN0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlclxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibG9hZGluZy1pbmRpY2F0b3JcIlxuICAgICAgICA+PC9zdHJlYW0tbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI3JlYWRTdGF0dXM+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXNcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLWFuZ3VsYXJcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zdGF0dXNcbiAgICAgICAgXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZWFkLWluZGljYXRvclwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIFtwb3BwZXJdPVwicG9wcGVyQ29udGVudFwiXG4gICAgICAgIFtwb3BwZXJUcmlnZ2VyXT1cInBvcHBlclRyaWdnZXJIb3ZlclwiXG4gICAgICAgIFtwb3BwZXJQbGFjZW1lbnRdPVwicG9wcGVyUGxhY2VtZW50QXV0b1wiXG4gICAgICAgIFtwb3BwZXJIaWRlT25TY3JvbGxdPVwiZmFsc2VcIlxuICAgICAgICBbcG9wcGVySGlkZU9uQ2xpY2tPdXRzaWRlXT1cImZhbHNlXCJcbiAgICAgICAgKGhvdmVyKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICA+XG4gICAgICAgIDxwb3BwZXItY29udGVudCAjcG9wcGVyQ29udGVudD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwIHN0ci1jaGF0X190b29sdGlwLWFuZ3VsYXJcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZWFkLWJ5LXRvb2x0aXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHJlYWRCeVRleHQgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wb3BwZXItY29udGVudD5cbiAgICAgICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgICBkYXRhLXRlc3QtaWQ9XCJsYXN0LXJlYWQtdXNlci1hdmF0YXJcIlxuICAgICAgICAgIFtzaXplXT1cIjE1XCJcbiAgICAgICAgICBbaW1hZ2VVcmxdPVwibGFzdFJlYWRVc2VyPy5pbWFnZVwiXG4gICAgICAgICAgW25hbWVdPVwibGFzdFJlYWRVc2VyPy5uYW1lIHx8IGxhc3RSZWFkVXNlcj8uaWRcIlxuICAgICAgICAgIHR5cGU9XCJ1c2VyXCJcbiAgICAgICAgICBsb2NhdGlvbj1cIm1lc3NhZ2UtcmVhZGVyXCJcbiAgICAgICAgICBbdXNlcl09XCJsYXN0UmVhZFVzZXJcIlxuICAgICAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGRhdGEtdGVzdC1pZD1cInJlYWQtYnktbGVuZ3RoXCJcbiAgICAgICAgICAqbmdJZj1cImlzUmVhZEJ5TXVsdGlwbGVVc2Vyc1wiXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLW51bWJlclwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAobWVzc2FnZT8ucmVhZEJ5KSEubGVuZ3RoIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVwbHlDb3VudEJ1dHRvbiBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICA8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIChwb3NpdGlvbiA9PT0gJ2luc2lkZS1tZXNzYWdlLWJ1YmJsZScgJiYgdGhlbWVWZXJzaW9uID09PSAnMScpIHx8XG4gICAgICAocG9zaXRpb24gPT09ICdvdXRzaWRlLW1lc3NhZ2UtYnViYmxlJyAmJiB0aGVtZVZlcnNpb24gPT09ICcyJylcbiAgICBcIlxuICAgIGNsYXNzPVwiXG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtcmVwbHktYnV0dG9uXG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1yZXBsaWVzLWNvdW50LWJ1dHRvbi13cmFwcGVyXG4gICAgXCJcbiAgPlxuICAgIDwhLS0gZXNsaW50LWVuYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvY29uZGl0aW9uYWwtY29tcGxleGl0eSAtLT5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInNob3VsZERpc3BsYXlUaHJlYWRMaW5rXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVwbGllcy1jb3VudC1idXR0b25cIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJyZXBseS1jb3VudC1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSgpXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgKm5nSWY9XCJ0aGVtZVZlcnNpb24gPT09ICcxJ1wiXG4gICAgICAgIHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgIGljb249XCJyZXBseVwiXG4gICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgIHt7bWVzc2FnZT8ucmVwbHlfY291bnQgPT09IDEgPyAoJ3N0cmVhbUNoYXQuMSByZXBseScgfCB0cmFuc2xhdGUpIDogKCdzdHJlYW1DaGF0Lnt7IHJlcGx5Q291bnQgfX1cbiAgICAgIHJlcGxpZXMnIHwgdHJhbnNsYXRlOnJlcGx5Q291bnRQYXJhbSl9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBZXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBR3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRMUU7O0dBRUc7QUFNSCxNQUFNLE9BQU8sZ0JBQWdCO0lBa0QzQixZQUNVLGlCQUFvQyxFQUNwQyxjQUE4QixFQUM5QixzQkFBOEMsRUFDOUMsS0FBd0IsRUFDaEMsWUFBMEI7UUFKbEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQWpEbEM7O1dBRUc7UUFDTSwwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFLOUM7O1dBRUc7UUFDTSxTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUMxQzs7V0FFRztRQUNNLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSy9CLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMv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QUFNLFFBQVEsR0FDWixDQUFDLENBQUUsTUFBYyxDQUFDLE1BQU0sSUFBSSxPQUFRLE1BQWMsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDO1FBQ3pFLDhEQUE4RDtRQUM5RCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDdkIsS0FBSyxFQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixTQUNFLFFBQVEsQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDLEVBQ3JELElBQUksS0FBSyxTQUFTLENBQ3JCLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBZTtRQUM1QyxNQUFNLFNBQVMsR0FDYixnS0FBZ0ssQ0FBQztRQUNuSyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDdkIsU0FBUyxFQUNULENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLEtBQUssb0JBQW9CLEtBQUssTUFBTSxDQUM1RCxDQUFDO1FBRUYsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7NkdBOVlVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLHlWQ2hEN0IsMDF0QkFpbkJBOzJGRGprQmEsZ0JBQWdCO2tCQUw1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLE1BQU0sRUFBRSxFQUFFO2lCQUNYO3FPQUtVLE9BQU87c0JBQWYsS0FBSztnQkFJRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBSUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxhQUFhO3NCQUFyQixLQUFLO2dCQTBCMEIsU0FBUztzQkFBeEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXR0YWNobWVudCwgVXNlclJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRMaXN0Q29udGV4dCxcbiAgTWVudGlvblRlbXBsYXRlQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0LFxuICBNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgU3RyZWFtTWVzc2FnZSxcbiAgRGVsaXZlcmVkU3RhdHVzQ29udGV4dCxcbiAgU2VuZGluZ1N0YXR1c0NvbnRleHQsXG4gIFJlYWRTdGF0dXNDb250ZXh0LFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuL3BhcnNlLWRhdGUnO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSAnZW1vamktcmVnZXgnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IGxpc3RVc2VycyB9IGZyb20gJy4uL2xpc3QtdXNlcnMnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hQb3BwZXJqc1RyaWdnZXJzLCBOZ3hQb3BwZXJqc1BsYWNlbWVudHMgfSBmcm9tICduZ3gtcG9wcGVyanMnO1xuXG50eXBlIE1lc3NhZ2VQYXJ0ID0ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHR5cGU6ICd0ZXh0JyB8ICdtZW50aW9uJztcbiAgdXNlcj86IFVzZXJSZXNwb25zZTtcbn07XG5cbi8qKlxuICogVGhlIGBNZXNzYWdlYCBjb21wb25lbnQgZGlzcGxheXMgYSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNlbmRlciBhbmQgZGF0ZSwgYW5kIGVuYWJsZXMgW2ludGVyYWN0aW9uIHdpdGggdGhlIG1lc3NhZ2UgKGkuZS4gZWRpdCBvciByZWFjdCldKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBbY2hhbm5lbCBjYXBhYmlsaXRpZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSB0aGF0IGFyZSBlbmFibGVkIGZvciB0aGUgY3VycmVudCB1c2VyLCB0aGUgbGlzdCBvZiBbc3VwcG9ydGVkIGludGVyYWN0aW9uc10oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KSBjYW4gYmUgZm91bmQgaW4gb3VyIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuIFVuYXRob3JpemVkIGFjdGlvbnMgd29uJ3QgYmUgZGlzcGxheWVkIG9uIHRoZSBVSS4gVGhlIFtgTWVzc2FnZUxpc3RgXSguL01lc3NhZ2VMaXN0Q29tcG9uZW50Lm1keCkgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIGJhc2VkIG9uIFtjaGFubmVsIGNhcGFiaWxpdGllc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVzc2FnZSBzdGF0dXMgKHNlbmRpbmcsIHNlbnQsIHdobyByZWFkIHRoZSBtZXNzYWdlKSBpcyBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpc0xhc3RTZW50TWVzc2FnZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZGlzcGFseWVkIGluIGEgY2hhbm5lbCBvciBpbiBhIFt0aHJlYWRdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBIaWdobGlnaHRpbmcgaXMgdXNlZCB0byBhZGQgdmlzdWFsIGVtcGhhc2l6ZSB0byBhIG1lc3NhZ2Ugd2hlbiBqdW1waW5nIHRvIHRoZSBtZXNzYWdlXG4gICAqL1xuICBASW5wdXQoKSBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IHRoZW1lVmVyc2lvbjogJzEnIHwgJzInO1xuICBjYW5SZWNlaXZlUmVhZEV2ZW50czogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2FuUmVhY3RUb01lc3NhZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNBY3Rpb25Cb3hPcGVuID0gZmFsc2U7XG4gIGlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSBmYWxzZTtcbiAgdmlzaWJsZU1lc3NhZ2VBY3Rpb25zQ291bnQgPSAwO1xuICBtZXNzYWdlVGV4dFBhcnRzOiBNZXNzYWdlUGFydFtdID0gW107XG4gIG1lbnRpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8TWVudGlvblRlbXBsYXRlQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGN1c3RvbURlbGl2ZXJlZFN0YXR1c1RlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8RGVsaXZlcmVkU3RhdHVzQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgY3VzdG9tU2VuZGluZ1N0YXR1c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxTZW5kaW5nU3RhdHVzQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGN1c3RvbVJlYWRTdGF0dXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UmVhZFN0YXR1c0NvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50TGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxBdHRhY2htZW50TGlzdENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlQWN0aW9uc0JveENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgcG9wcGVyVHJpZ2dlckNsaWNrID0gTmd4UG9wcGVyanNUcmlnZ2Vycy5jbGljaztcbiAgcG9wcGVyVHJpZ2dlckhvdmVyID0gTmd4UG9wcGVyanNUcmlnZ2Vycy5ob3ZlcjtcbiAgcG9wcGVyUGxhY2VtZW50QXV0byA9IE5neFBvcHBlcmpzUGxhY2VtZW50cy5BVVRPO1xuICBzaG91bGREaXNwbGF5VHJhbnNsYXRpb25Ob3RpY2UgPSBmYWxzZTtcbiAgZGlzcGxheWVkTWVzc2FnZVRleHRDb250ZW50OiAnb3JpZ2luYWwnIHwgJ3RyYW5zbGF0aW9uJyA9ICdvcmlnaW5hbCc7XG4gIHByaXZhdGUgcXVvdGVkTWVzc2FnZUF0dGFjaG1lbnRzOiBBdHRhY2htZW50W10gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlcjogVXNlclJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHByaXZhdGUgY29udGFpbmVyOlxuICAgIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgICB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50aGVtZVZlcnNpb24gPSB0aGVtZVNlcnZpY2UudGhlbWVWZXJzaW9uO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZSgodSkgPT4ge1xuICAgICAgICB0aGlzLnVzZXIgPSB1O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lbnRpb25UZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLm1lbnRpb25UZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuYXR0YWNobWVudExpc3RUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLmF0dGFjaG1lbnRMaXN0VGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VBY3Rpb25zQm94VGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZXNzYWdlUmVhY3Rpb25zVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmRlbGl2ZXJlZFN0YXR1c1RlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMuY3VzdG9tRGVsaXZlcmVkU3RhdHVzVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLnNlbmRpbmdTdGF0dXNUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLmN1c3RvbVNlbmRpbmdTdGF0dXNUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UucmVhZFN0YXR1c1RlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMuY3VzdG9tUmVhZFN0YXR1c1RlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLnNob3VsZERpc3BsYXlUcmFuc2xhdGlvbk5vdGljZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPSAnb3JpZ2luYWwnO1xuICAgICAgdGhpcy5jcmVhdGVNZXNzYWdlUGFydHMoKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQXR0YWNobWVudHMgPSB0aGlzLm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5hdHRhY2htZW50cztcbiAgICAgIHRoaXMucXVvdGVkTWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICAgICAgb3JpZ2luYWxBdHRhY2htZW50cyAmJiBvcmlnaW5hbEF0dGFjaG1lbnRzLmxlbmd0aFxuICAgICAgICAgID8gW29yaWdpbmFsQXR0YWNobWVudHNbMF1dXG4gICAgICAgICAgOiBbXTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuZW5hYmxlZE1lc3NhZ2VBY3Rpb25zKSB7XG4gICAgICB0aGlzLmNhblJlYWN0VG9NZXNzYWdlID1cbiAgICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMuaW5kZXhPZignc2VuZC1yZWFjdGlvbicpICE9PSAtMTtcbiAgICAgIHRoaXMuY2FuUmVjZWl2ZVJlYWRFdmVudHMgPVxuICAgICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucy5pbmRleE9mKCdyZWFkLWV2ZW50cycpICE9PSAtMTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGdldCBzaG91bGREaXNwbGF5VGhyZWFkTGluaygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm1lc3NhZ2U/LnJlcGx5X2NvdW50ICYmXG4gICAgICB0aGlzLm1vZGUgIT09ICd0aHJlYWQnICYmXG4gICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucy5pbmRleE9mKCdzZW5kLXJlcGx5JykgIT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpc1NlbnRCeUN1cnJlbnRVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2U/LnVzZXI/LmlkID09PSB0aGlzLnVzZXI/LmlkO1xuICB9XG5cbiAgZ2V0IHJlYWRCeVRleHQoKSB7XG4gICAgcmV0dXJuIGxpc3RVc2Vycyh0aGlzLm1lc3NhZ2UhLnJlYWRCeSk7XG4gIH1cblxuICBnZXQgbGFzdFJlYWRVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2U/LnJlYWRCeS5maWx0ZXIoKHUpID0+IHUuaWQgIT09IHRoaXMudXNlcj8uaWQpWzBdO1xuICB9XG5cbiAgZ2V0IGlzT25seVJlYWRCeU1lKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2UgJiYgdGhpcy5tZXNzYWdlLnJlYWRCeS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBnZXQgaXNSZWFkQnlNdWx0aXBsZVVzZXJzKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2UgJiYgdGhpcy5tZXNzYWdlLnJlYWRCeS5sZW5ndGggPiAxO1xuICB9XG5cbiAgZ2V0IGlzTWVzc2FnZURlbGl2ZXJlZEFuZFJlYWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubWVzc2FnZSAmJlxuICAgICAgdGhpcy5tZXNzYWdlLnJlYWRCeSAmJlxuICAgICAgdGhpcy5tZXNzYWdlLnN0YXR1cyA9PT0gJ3JlY2VpdmVkJyAmJlxuICAgICAgdGhpcy5tZXNzYWdlLnJlYWRCeS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGdldCBwYXJzZWREYXRlKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlIHx8ICF0aGlzLm1lc3NhZ2U/LmNyZWF0ZWRfYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRGF0ZSh0aGlzLm1lc3NhZ2UuY3JlYXRlZF9hdCk7XG4gIH1cblxuICBnZXQgYXJlT3B0aW9uc1Zpc2libGUoKSB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEoXG4gICAgICAhdGhpcy5tZXNzYWdlLnR5cGUgfHxcbiAgICAgIHRoaXMubWVzc2FnZS50eXBlID09PSAnZXJyb3InIHx8XG4gICAgICB0aGlzLm1lc3NhZ2UudHlwZSA9PT0gJ3N5c3RlbScgfHxcbiAgICAgIHRoaXMubWVzc2FnZS50eXBlID09PSAnZXBoZW1lcmFsJyB8fFxuICAgICAgdGhpcy5tZXNzYWdlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcgfHxcbiAgICAgIHRoaXMubWVzc2FnZS5zdGF0dXMgPT09ICdzZW5kaW5nJyB8fFxuICAgICAgKHRoaXMubW9kZSA9PT0gJ3RocmVhZCcgJiYgIXRoaXMubWVzc2FnZS5wYXJlbnRfaWQpXG4gICAgKTtcbiAgfVxuXG4gIGdldCBoYXNBdHRhY2htZW50KCkge1xuICAgIHJldHVybiAhIXRoaXMubWVzc2FnZT8uYXR0YWNobWVudHMgJiYgISF0aGlzLm1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhhc1JlYWN0aW9ucygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm1lc3NhZ2U/LnJlYWN0aW9uX2NvdW50cyAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5tZXNzYWdlLnJlYWN0aW9uX2NvdW50cykubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBnZXQgcmVwbHlDb3VudFBhcmFtKCkge1xuICAgIHJldHVybiB7IHJlcGx5Q291bnQ6IHRoaXMubWVzc2FnZT8ucmVwbHlfY291bnQgfTtcbiAgfVxuXG4gIGdldCBjYW5EaXNwbGF5UmVhZFN0YXR1cygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jYW5SZWNlaXZlUmVhZEV2ZW50cyAhPT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLmluZGV4T2YoJ3JlYWQtZXZlbnRzJykgIT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRMaXN0Q29udGV4dCgpOiBBdHRhY2htZW50TGlzdENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlSWQ6IHRoaXMubWVzc2FnZT8uaWQgfHwgJycsXG4gICAgICBhdHRhY2htZW50czogdGhpcy5tZXNzYWdlPy5hdHRhY2htZW50cyB8fCBbXSxcbiAgICAgIHBhcmVudE1lc3NhZ2VJZDogdGhpcy5tZXNzYWdlPy5wYXJlbnRfaWQsXG4gICAgfTtcbiAgfVxuXG4gIGdldFF1b3RlZE1lc3NhZ2VBdHRhY2htZW50TGlzdENvbnRleHQoKTogQXR0YWNobWVudExpc3RDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZUlkOiB0aGlzLm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5pZCB8fCAnJyxcbiAgICAgIGF0dGFjaG1lbnRzOiB0aGlzLnF1b3RlZE1lc3NhZ2VBdHRhY2htZW50cyEsXG4gICAgICBwYXJlbnRNZXNzYWdlSWQ6IHRoaXM/Lm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5wYXJlbnRfaWQsXG4gICAgfTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0KCk6IE1lc3NhZ2VSZWFjdGlvbnNDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZVJlYWN0aW9uQ291bnRzOiB0aGlzLm1lc3NhZ2U/LnJlYWN0aW9uX2NvdW50cyB8fCB7fSxcbiAgICAgIGxhdGVzdFJlYWN0aW9uczogdGhpcy5tZXNzYWdlPy5sYXRlc3RfcmVhY3Rpb25zIHx8IFtdLFxuICAgICAgaXNTZWxlY3Rvck9wZW46IHRoaXMuaXNSZWFjdGlvblNlbGVjdG9yT3BlbixcbiAgICAgIGlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbikgPT5cbiAgICAgICAgKHRoaXMuaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9IGlzT3BlbiksXG4gICAgICBtZXNzYWdlSWQ6IHRoaXMubWVzc2FnZT8uaWQsXG4gICAgICBvd25SZWFjdGlvbnM6IHRoaXMubWVzc2FnZT8ub3duX3JlYWN0aW9ucyB8fCBbXSxcbiAgICB9O1xuICB9XG5cbiAgcmVzZW5kTWVzc2FnZSgpIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UucmVzZW5kTWVzc2FnZSh0aGlzLm1lc3NhZ2UhKTtcbiAgfVxuXG4gIHNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSgpIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKHRoaXMubWVzc2FnZSk7XG4gIH1cblxuICBnZXRNZW50aW9uQ29udGV4dChtZXNzYWdlUGFydDogTWVzc2FnZVBhcnQpOiBNZW50aW9uVGVtcGxhdGVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogbWVzc2FnZVBhcnQuY29udGVudCxcbiAgICAgIHVzZXI6IG1lc3NhZ2VQYXJ0LnVzZXIhLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQWN0aW9uc0JveENvbnRleHQoKTogTWVzc2FnZUFjdGlvbnNCb3hDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmlzQWN0aW9uQm94T3BlbixcbiAgICAgIGlzTWluZTogdGhpcy5pc1NlbnRCeUN1cnJlbnRVc2VyLFxuICAgICAgZW5hYmxlZEFjdGlvbnM6IHRoaXMuZW5hYmxlZE1lc3NhZ2VBY3Rpb25zLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXI6IChjb3VudCkgPT4ge1xuICAgICAgICB0aGlzLnZpc2libGVNZXNzYWdlQWN0aW9uc0NvdW50ID0gY291bnQ7XG4gICAgICAgIC8vIG1lc3NhZ2UgYWN0aW9uIGJveCBjaGFuZ2VzIFVJIGJpbmRpbmdzIGluIHBhcmVudCwgc28gd2UnbGwgaGF2ZSB0byByZXJ1biBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGlzRWRpdGluZ0NoYW5nZUhhbmRsZXI6IChpc0VkaXRpbmcpID0+IHtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBpc0VkaXRpbmc7XG4gICAgICAgIHRoaXMuaXNBY3Rpb25Cb3hPcGVuID0gIXRoaXMuaXNFZGl0aW5nO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVsaXZlcmVkU3RhdHVzQ29udGV4dCgpOiBEZWxpdmVyZWRTdGF0dXNDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlISxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2VuZGluZ1N0YXR1c0NvbnRleHQoKTogU2VuZGluZ1N0YXR1c0NvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UhLFxuICAgIH07XG4gIH1cblxuICBnZXRSZWFkU3RhdHVzQ29udGV4dCgpOiBSZWFkU3RhdHVzQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSEsXG4gICAgICByZWFkQnlUZXh0OiB0aGlzLnJlYWRCeVRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGp1bXBUb01lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcsIHBhcmVudE1lc3NhZ2VJZD86IHN0cmluZykge1xuICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5qdW1wVG9NZXNzYWdlKG1lc3NhZ2VJZCwgcGFyZW50TWVzc2FnZUlkKTtcbiAgfVxuXG4gIGRpc3BsYXlUcmFuc2xhdGVkTWVzc2FnZSgpIHtcbiAgICB0aGlzLmNyZWF0ZU1lc3NhZ2VQYXJ0cyh0cnVlKTtcbiAgfVxuXG4gIGRpc3BsYXlPcmlnaW5hbE1lc3NhZ2UoKSB7XG4gICAgdGhpcy5jcmVhdGVNZXNzYWdlUGFydHMoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZXNzYWdlUGFydHMoc2hvdWxkVHJhbnNsYXRlID0gdHJ1ZSkge1xuICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRNZXNzYWdlQ29udGVudChzaG91bGRUcmFuc2xhdGUpO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpc0hUTUwgPSBmYWxzZTtcbiAgICAgIC8vIEJhY2tlbmQgd2lsbCB3cmFwIEhUTUwgY29udGVudCB3aXRoIDxwPjwvcD5cXG5cbiAgICAgIGlmIChjb250ZW50LnN0YXJ0c1dpdGgoJzxwPicpKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoJzxwPicsICcnKTtcbiAgICAgICAgaXNIVE1MID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50LmVuZHNXaXRoKCc8L3A+XFxuJykpIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgnPC9wPlxcbicsICcnKTtcbiAgICAgICAgaXNIVE1MID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzIHx8XG4gICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLmZpeEVtb2ppRGlzcGxheShjb250ZW50KTtcbiAgICAgICAgaWYgKCFpc0hUTUwpIHtcbiAgICAgICAgICBjb250ZW50ID0gdGhpcy53cmFwTGluc2tXaXRoQW5jaG9yVGFnKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cyA9IFt7IGNvbnRlbnQsIHR5cGU6ICd0ZXh0JyB9XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVRleHRQYXJ0cyA9IFtdO1xuICAgICAgICBsZXQgdGV4dCA9IGNvbnRlbnQ7XG4gICAgICAgIHRoaXMubWVzc2FnZSEubWVudGlvbmVkX3VzZXJzLmZvckVhY2goKHVzZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBtZW50aW9uID0gYEAke3VzZXIubmFtZSB8fCB1c2VyLmlkfWA7XG4gICAgICAgICAgbGV0IHByZWNlZGluZ1RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0LmluZGV4T2YobWVudGlvbikpO1xuICAgICAgICAgIHByZWNlZGluZ1RleHQgPSB0aGlzLmZpeEVtb2ppRGlzcGxheShwcmVjZWRpbmdUZXh0KTtcbiAgICAgICAgICBpZiAoIWlzSFRNTCkge1xuICAgICAgICAgICAgcHJlY2VkaW5nVGV4dCA9IHRoaXMud3JhcExpbnNrV2l0aEFuY2hvclRhZyhwcmVjZWRpbmdUZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzLnB1c2goe1xuICAgICAgICAgICAgY29udGVudDogcHJlY2VkaW5nVGV4dCxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VUZXh0UGFydHMucHVzaCh7XG4gICAgICAgICAgICBjb250ZW50OiBtZW50aW9uLFxuICAgICAgICAgICAgdHlwZTogJ21lbnRpb24nLFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHByZWNlZGluZ1RleHQgKyBtZW50aW9uLCAnJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgIHRleHQgPSB0aGlzLmZpeEVtb2ppRGlzcGxheSh0ZXh0KTtcbiAgICAgICAgICBpZiAoIWlzSFRNTCkge1xuICAgICAgICAgICAgdGV4dCA9IHRoaXMud3JhcExpbnNrV2l0aEFuY2hvclRhZyh0ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dFBhcnRzLnB1c2goeyBjb250ZW50OiB0ZXh0LCB0eXBlOiAndGV4dCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1lc3NhZ2VDb250ZW50KHNob3VsZFRyYW5zbGF0ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IHRoaXMubWVzc2FnZT8uaHRtbCB8fCB0aGlzLm1lc3NhZ2U/LnRleHQ7XG4gICAgaWYgKHNob3VsZFRyYW5zbGF0ZSkge1xuICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLm1lc3NhZ2U/LnRyYW5zbGF0aW9uO1xuICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheVRyYW5zbGF0aW9uTm90aWNlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPSAndHJhbnNsYXRpb24nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uIHx8IG9yaWdpbmFsQ29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPSAnb3JpZ2luYWwnO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsQ29udGVudDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpeEVtb2ppRGlzcGxheShjb250ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBXcmFwIGVtb2ppcyBpbiBzcGFuIHRvIGRpc3BsYXkgZW1vamlzIGNvcnJlY3RseSBpbiBDaHJvbWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTk2MjIzXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgJ2cnKTtcbiAgICAvLyBCYXNlZCBvbiB0aGlzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NTY1MTEyL2phdmFzY3JpcHQtaG93LXRvLWZpbmQtb3V0LWlmLXRoZS11c2VyLWJyb3dzZXItaXMtY2hyb21lXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gICAgY29uc3QgaXNDaHJvbWUgPVxuICAgICAgISEod2luZG93IGFzIGFueSkuY2hyb21lICYmIHR5cGVvZiAod2luZG93IGFzIGFueSkub3ByID09PSAndW5kZWZpbmVkJztcbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoXG4gICAgICByZWdleCxcbiAgICAgIChtYXRjaCkgPT5cbiAgICAgICAgYDxzcGFuICR7XG4gICAgICAgICAgaXNDaHJvbWUgPyAnY2xhc3M9XCJzdHItY2hhdF9fZW1vamktZGlzcGxheS1maXhcIicgOiAnJ1xuICAgICAgICB9PiR7bWF0Y2h9PC9zcGFuPmBcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBwcml2YXRlIHdyYXBMaW5za1dpdGhBbmNob3JUYWcoY29udGVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsUmVnZXhwID1cbiAgICAgIC8oPzooPzpodHRwcz98ZnRwfGZpbGUpOlxcL1xcL3x3d3dcXC58ZnRwXFwuKSg/OlxcKFstQS1aMC05KyZAIy8lPX5ffCQ/ITosLl0qXFwpfFstQS1aMC05KyZAIy8lPX5ffCQ/ITosLl0pKig/OlxcKFstQS1aMC05KyZAIy8lPX5ffCQ/ITosLl0qXFwpfFtBLVowLTkrJkAjLyU9fl98JF0pL2dpbTtcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKFxuICAgICAgdXJsUmVnZXhwLFxuICAgICAgKG1hdGNoKSA9PiBgPGEgaHJlZj1cIiR7bWF0Y2h9XCIgcmVsPVwibm9mb2xsb3dcIj4ke21hdGNofTwvYT5gXG4gICAgKTtcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUgc3RyLWNoYXRfX21lc3NhZ2Ugc3RyLWNoYXRfX21lc3NhZ2UtLXt7XG4gICAgbWVzc2FnZT8udHlwZVxuICB9fSBzdHItY2hhdF9fbWVzc2FnZS0te3sgbWVzc2FnZT8uc3RhdHVzIH19IHt7XG4gICAgbWVzc2FnZT8udGV4dCA/ICdzdHItY2hhdF9fbWVzc2FnZS0taGFzLXRleHQnIDogJ2hhcy1uby10ZXh0J1xuICB9fVwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS0tbWVdPVwiaXNTZW50QnlDdXJyZW50VXNlclwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS0tb3RoZXJdPVwiIWlzU2VudEJ5Q3VycmVudFVzZXJcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLS1tZV09XCJpc1NlbnRCeUN1cnJlbnRVc2VyXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS1oYXMtYXR0YWNobWVudF09XCJoYXNBdHRhY2htZW50XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLS13aXRoLXJlYWN0aW9uc109XCJoYXNSZWFjdGlvbnNcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtLWhpZ2hsaWdodGVkXT1cImlzSGlnaGxpZ2h0ZWRcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2Utd2l0aC10aHJlYWQtbGlua109XCJzaG91bGREaXNwbGF5VGhyZWFkTGlua1wiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1zZW5kLWNhbi1iZS1yZXRyaWVkXT1cIlxuICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgbWVzc2FnZT8uZXJyb3JTdGF0dXNDb2RlICE9PSA0MDNcbiAgXCJcbiAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWNvbnRhaW5lclwiXG4gIChtb3VzZWxlYXZlKT1cImlzQWN0aW9uQm94T3BlbiA9IGZhbHNlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtZXNzYWdlPy5kZWxldGVkX2F0OyBlbHNlIGRlbGV0ZWRNZXNzYWdlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2U/LnR5cGUgIT09ICdzeXN0ZW0nOyBlbHNlIHN5c3RlbU1lc3NhZ2VcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGVtZVZlcnNpb24gPT09ICcxJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZVN0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICBkYXRhLXRlc3RpZD1cImF2YXRhclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3Qgc3RyLWNoYXRfX21lc3NhZ2Utc2VuZGVyLWF2YXRhclwiXG4gICAgICAgIFtpbWFnZVVybF09XCJtZXNzYWdlPy51c2VyPy5pbWFnZVwiXG4gICAgICAgIFtuYW1lXT1cIm1lc3NhZ2U/LnVzZXI/Lm5hbWUgfHwgbWVzc2FnZT8udXNlcj8uaWRcIlxuICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgIGxvY2F0aW9uPVwibWVzc2FnZS1zZW5kZXJcIlxuICAgICAgICBbdXNlcl09XCJtZXNzYWdlPy51c2VyIHx8IHVuZGVmaW5lZFwiXG4gICAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWlubmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9ucyBzdHItY2hhdF9fbWVzc2FnZS1vcHRpb25zXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1lc3NhZ2Utb3B0aW9uc1wiXG4gICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLWVkaXQtaW4tcHJvZ3Jlc3NdPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICAqbmdJZj1cImFyZU9wdGlvbnNWaXNpYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibWVzc2FnZS1hY3Rpb25zLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAjbWVzc2FnZUFjdGlvbnNUb2dnbGVcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtY29udGFpbmVyXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZV9fYWN0aW9uc19fYWN0aW9uLS1vcHRpb25zXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2Utc2ltcGxlX19hY3Rpb25zX19hY3Rpb24tLW9wdGlvbnMtLWVkaXRpbmddPVwiXG4gICAgICAgICAgICAgIGlzRWRpdGluZ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtwb3BwZXJdPVwicG9wcGVyQ29udGVudFwiXG4gICAgICAgICAgICBbcG9wcGVyVHJpZ2dlcl09XCJwb3BwZXJUcmlnZ2VyQ2xpY2tcIlxuICAgICAgICAgICAgW3BvcHBlclBsYWNlbWVudF09XCJwb3BwZXJQbGFjZW1lbnRBdXRvXCJcbiAgICAgICAgICAgIFtwb3BwZXJIaWRlT25TY3JvbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcG9wcGVySGlkZU9uQ2xpY2tPdXRzaWRlXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcHBlckhpZGVPbk1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwb3BwZXItY29udGVudCAjcG9wcGVyQ29udGVudD5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgI2RlZmF1bHRNZXNzYWdlQWN0aW9uc0JveFxuICAgICAgICAgICAgICAgIGxldC1pc09wZW49XCJpc09wZW5cIlxuICAgICAgICAgICAgICAgIGxldC1pc01pbmU9XCJpc01pbmVcIlxuICAgICAgICAgICAgICAgIGxldC1lbmFibGVkQWN0aW9ucz1cImVuYWJsZWRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgbGV0LWRpc3BsYXllZEFjdGlvbnNDb3VudENoYW5lSGFubGVyPVwiZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXJcIlxuICAgICAgICAgICAgICAgIGxldC1pc0VkaXRpbmdDaGFuZ2VIYW5kbGVyPVwiaXNFZGl0aW5nQ2hhbmdlSGFuZGxlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3hcbiAgICAgICAgICAgICAgICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICAgIFtpc01pbmVdPVwiaXNNaW5lXCJcbiAgICAgICAgICAgICAgICAgIFtlbmFibGVkQWN0aW9uc109XCJlbmFibGVkQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgKGRpc3BsYXllZEFjdGlvbnNDb3VudCk9XCJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXIoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChpc0VkaXRpbmcpPVwiaXNFZGl0aW5nQ2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9zdHJlYW0tbWVzc2FnZS1hY3Rpb25zLWJveD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlQWN0aW9uc0JveFRlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlQWN0aW9uc0JveDtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGdldE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvcG9wcGVyLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtYnV0dG9uXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ2aXNpYmxlTWVzc2FnZUFjdGlvbnNDb3VudCA+IDBcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlzQWN0aW9uQm94T3BlbiA9ICFpc0FjdGlvbkJveE9wZW5cIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNBY3Rpb25Cb3hPcGVuID0gIWlzQWN0aW9uQm94T3BlblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGljb249XCJhY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvY29uZGl0aW9uYWwtY29tcGxleGl0eSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBlbmFibGVkTWVzc2FnZUFjdGlvbnMuaW5kZXhPZignc2VuZC1yZXBseScpICE9PSAtMSAmJlxuICAgICAgICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvblxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tdGhyZWFkXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXJlcGx5LWluLXRocmVhZC1idXR0b25cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlcGx5LWluLXRocmVhZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKClcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNldEFzQWN0aXZlUGFyZW50TWVzc2FnZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgIGljb249XCJyZXBseS1pbi10aHJlYWRcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5SZWFjdFRvTWVzc2FnZVwiXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvblxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGVfX2FjdGlvbnNfX2FjdGlvbi0tcmVhY3Rpb25zXG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1idXR0b25cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImlzUmVhY3Rpb25TZWxlY3Rvck9wZW4gPSAhaXNSZWFjdGlvblNlbGVjdG9yT3BlblwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXNSZWFjdGlvblNlbGVjdG9yT3BlbiA9ICFpc1JlYWN0aW9uU2VsZWN0b3JPcGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgIGljb249XCJyZWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1ob3N0XCI+XG4gICAgICAgICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI2RlZmF1bHRNZXNzYWdlUmVhY3Rpb25zXG4gICAgICAgICAgICBsZXQtbWVzc2FnZVJlYWN0aW9uQ291bnRzPVwibWVzc2FnZVJlYWN0aW9uQ291bnRzXCJcbiAgICAgICAgICAgIGxldC1sYXRlc3RSZWFjdGlvbnM9XCJsYXRlc3RSZWFjdGlvbnNcIlxuICAgICAgICAgICAgbGV0LWlzU2VsZWN0b3JPcGVuPVwiaXNTZWxlY3Rvck9wZW5cIlxuICAgICAgICAgICAgbGV0LWlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlcj1cImlzU2VsZWN0b3JPcGVuQ2hhbmdlSGFuZGxlclwiXG4gICAgICAgICAgICBsZXQtbWVzc2FnZUlkPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICAgIGxldC1vd25SZWFjdGlvbnM9XCJvd25SZWFjdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdHJlYW0tbWVzc2FnZS1yZWFjdGlvbnNcbiAgICAgICAgICAgICAgW21lc3NhZ2VSZWFjdGlvbkNvdW50c109XCJtZXNzYWdlUmVhY3Rpb25Db3VudHNcIlxuICAgICAgICAgICAgICBbbGF0ZXN0UmVhY3Rpb25zXT1cImxhdGVzdFJlYWN0aW9uc1wiXG4gICAgICAgICAgICAgIFtpc1NlbGVjdG9yT3Blbl09XCJpc1NlbGVjdG9yT3BlblwiXG4gICAgICAgICAgICAgIChpc1NlbGVjdG9yT3BlbkNoYW5nZSk9XCJpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICAgICAgW293blJlYWN0aW9uc109XCJvd25SZWFjdGlvbnNcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgbWVzc2FnZVJlYWN0aW9uc1RlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlUmVhY3Rpb25zO1xuICAgICAgICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlUmVhY3Rpb25zQ29udGV4dCgpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1idWJibGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQXR0YWNobWVudCAmJiAhbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAjZGVmYXVsdEF0dGFjaG1lbnRzXG4gICAgICAgICAgICAgIGxldC1tZXNzYWdlSWQ9XCJtZXNzYWdlSWRcIlxuICAgICAgICAgICAgICBsZXQtYXR0YWNobWVudHM9XCJhdHRhY2htZW50c1wiXG4gICAgICAgICAgICAgIGxldC1wYXJlbnRNZXNzYWdlSWQ9XCJwYXJlbnRNZXNzYWdlSWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtbGlzdFxuICAgICAgICAgICAgICAgIFttZXNzYWdlSWRdPVwibWVzc2FnZUlkXCJcbiAgICAgICAgICAgICAgICBbYXR0YWNobWVudHNdPVwiYXR0YWNobWVudHNcIlxuICAgICAgICAgICAgICAgIFtwYXJlbnRNZXNzYWdlSWRdPVwicGFyZW50TWVzc2FnZUlkXCJcbiAgICAgICAgICAgICAgPjwvc3RyZWFtLWF0dGFjaG1lbnQtbGlzdD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudExpc3RUZW1wbGF0ZSB8fCBkZWZhdWx0QXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudExpc3RDb250ZXh0KClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXRleHRcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZT8udGV4dCB8fCAobWVzc2FnZT8ucXVvdGVkX21lc3NhZ2UgJiYgaGFzQXR0YWNobWVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbm5lci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJcbiAgICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZXh0LWlubmVyIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10ZXh0LWlubmVyXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1saWdodC10ZXh0LWlubmVyLS1oYXMtYXR0YWNobWVudF09XCJcbiAgICAgICAgICAgICAgICBoYXNBdHRhY2htZW50XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnICYmIG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSAhPT0gNDAzXG4gICAgICAgICAgICAgICAgICA/IHJlc2VuZE1lc3NhZ2UoKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgbWVzc2FnZT8uZXJyb3JTdGF0dXNDb2RlICE9PSA0MDNcbiAgICAgICAgICAgICAgICAgID8gcmVzZW5kTWVzc2FnZSgpXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVvdGVkTWVzc2FnZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtbGlzdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQXR0YWNobWVudCAmJiBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW2F0dGFjaG1lbnRzXT1cIm1lc3NhZ2UhLmF0dGFjaG1lbnRzIVwiXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlIS5pZFwiXG4gICAgICAgICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNsaWVudC1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2U/LnR5cGUgPT09ICdlcnJvcidcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgICAgICBzdHItY2hhdF9fc2ltcGxlLW1lc3NhZ2UtLWVycm9yLW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLS1lcnJvci1tZXNzYWdlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5FcnJvciDCtyBVbnNlbnRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlPy5zdGF0dXMgPT09ICdmYWlsZWQnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICAgICAgc3RyLWNoYXRfX3NpbXBsZS1tZXNzYWdlLS1lcnJvci1tZXNzYWdlXG4gICAgICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS0tZXJyb3ItbWVzc2FnZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgKG1lc3NhZ2U/LmVycm9yU3RhdHVzQ29kZSA9PT0gNDAzXG4gICAgICAgICAgICAgICAgICAgID8gXCJzdHJlYW1DaGF0Lk1lc3NhZ2UgRmFpbGVkIMK3IFVuYXV0aG9yaXplZFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJzdHJlYW1DaGF0Lk1lc3NhZ2UgRmFpbGVkIMK3IENsaWNrIHRvIHRyeSBhZ2FpblwiXG4gICAgICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvdXNlLXRyYWNrLWJ5LWZ1bmN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFydCBvZiBtZXNzYWdlVGV4dFBhcnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYXJ0LnR5cGUgPT09ICd0ZXh0JzsgZWxzZSBtZW50aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInBhcnQuY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWVudGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNZW50aW9uIGxldC1jb250ZW50PVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1tZW50aW9uXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtZW50aW9uVGVtcGxhdGUgfHwgZGVmYXVsdE1lbnRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGdldE1lbnRpb25Db250ZXh0KHBhcnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMidcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1lcnJvci1pY29uXCJcbiAgICAgICAgICAgIGljb249XCJlcnJvclwiXG4gICAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHJlcGx5Q291bnRCdXR0b247XG4gICAgICAgICAgICBjb250ZXh0OiB7IHBvc2l0aW9uOiAnaW5zaWRlLW1lc3NhZ2UtYnViYmxlJyB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VEYXRlQW5kU2VuZGVyO1xuICAgICAgICAgICAgY29udGV4dDogeyBwb3NpdGlvbjogJ2luc2lkZS1tZXNzYWdlLWJ1YmJsZScgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIHJlcGx5Q291bnRCdXR0b247XG4gICAgICAgICAgY29udGV4dDogeyBwb3NpdGlvbjogJ291dHNpZGUtbWVzc2FnZS1idWJibGUnLCBtZXNzYWdlOiBtZXNzYWdlIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIG1lc3NhZ2VEYXRlQW5kU2VuZGVyO1xuICAgICAgICAgIGNvbnRleHQ6IHsgcG9zaXRpb246ICdvdXRzaWRlLW1lc3NhZ2UtYnViYmxlJyB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVsZXRlZE1lc3NhZ2U+XG4gIDxkaXYgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWRlbGV0ZWQtY29tcG9uZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1kZWxldGVkLWlubmVyXCIgdHJhbnNsYXRlPlxuICAgICAgc3RyZWFtQ2hhdC5UaGlzIG1lc3NhZ2Ugd2FzIGRlbGV0ZWQuLi5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N5c3RlbU1lc3NhZ2U+XG4gIDxkaXYgZGF0YS10ZXN0aWQ9XCJzeXN0ZW0tbWVzc2FnZVwiIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX190ZXh0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtLXN5c3RlbV9fbGluZVwiPjwvZGl2PlxuICAgICAgPHA+e3sgbWVzc2FnZT8udGV4dCB9fTwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS0tc3lzdGVtX19saW5lXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLS1zeXN0ZW1fX2RhdGVcIj5cbiAgICAgIHt7IHBhcnNlZERhdGUgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3F1b3RlZE1lc3NhZ2U+XG4gIDxkaXZcbiAgICAqbmdJZj1cIm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlXCJcbiAgICBjbGFzcz1cInF1b3RlZC1tZXNzYWdlIHN0ci1jaGF0X19xdW90ZWQtbWVzc2FnZS1wcmV2aWV3XCJcbiAgICBkYXRhLXRlc3RpZD1cInF1b3RlZC1tZXNzYWdlLWNvbnRhaW5lclwiXG4gICAgW2NsYXNzLm1pbmVdPVwiaXNTZW50QnlDdXJyZW50VXNlclwiXG4gICAgKGNsaWNrKT1cIlxuICAgICAganVtcFRvTWVzc2FnZShcbiAgICAgICAgKG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlKSEuaWQsXG4gICAgICAgIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy5wYXJlbnRfaWRcbiAgICAgIClcbiAgICBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJcbiAgICAgIGp1bXBUb01lc3NhZ2UoXG4gICAgICAgIChtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZSkhLmlkLFxuICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8ucGFyZW50X2lkXG4gICAgICApXG4gICAgXCJcbiAgPlxuICAgIDxzdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyXG4gICAgICBkYXRhLXRlc3RpZD1cInFvdXRlZC1tZXNzYWdlLWF2YXRhclwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0IHN0ci1jaGF0X19tZXNzYWdlLXNlbmRlci1hdmF0YXJcIlxuICAgICAgW2ltYWdlVXJsXT1cIm1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy51c2VyPy5pbWFnZVwiXG4gICAgICBbbmFtZV09XCJcbiAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXI/Lm5hbWUgfHwgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXI/LmlkXG4gICAgICBcIlxuICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgbG9jYXRpb249XCJxdW90ZWQtbWVzc2FnZS1zZW5kZXJcIlxuICAgICAgW3VzZXJdPVwibWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LnVzZXIgfHwgdW5kZWZpbmVkXCJcbiAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1pbm5lciBzdHItY2hhdF9fcXVvdGVkLW1lc3NhZ2UtYnViYmxlXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmF0dGFjaG1lbnRzICYmXG4gICAgICAgICAgbWVzc2FnZT8ucXVvdGVkX21lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1xuICAgICAgICAgIGxldC1tZXNzYWdlSWQ9XCJtZXNzYWdlSWRcIlxuICAgICAgICAgIGxldC1hdHRhY2htZW50cz1cImF0dGFjaG1lbnRzXCJcbiAgICAgICAgICBsZXQtcGFyZW50TWVzc2FnZUlkPVwicGFyZW50TWVzc2FnZUlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICAgICBbbWVzc2FnZUlkXT1cIm1lc3NhZ2VJZFwiXG4gICAgICAgICAgICBbYXR0YWNobWVudHNdPVwiYXR0YWNobWVudHNcIlxuICAgICAgICAgICAgW3BhcmVudE1lc3NhZ2VJZF09XCJwYXJlbnRNZXNzYWdlSWRcIlxuICAgICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYXR0YWNobWVudExpc3RUZW1wbGF0ZSB8fCBkZWZhdWx0QXR0YWNobWVudHM7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRRdW90ZWRNZXNzYWdlQXR0YWNobWVudExpc3RDb250ZXh0KClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS10ZXh0XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8udHJhbnNsYXRpb24gfHxcbiAgICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8uaHRtbCB8fFxuICAgICAgICAgIG1lc3NhZ2U/LnF1b3RlZF9tZXNzYWdlPy50ZXh0XG4gICAgICAgIFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBXZSBuZWVkIHRoZXNlIG1hcmt1cHMgaW4gc2xpZ2h0bHkgZGlmZmVyZW50IHBvc2l0aW9ucyBpbiB0aGVtZS12MSBhbmQgdGhlbWUtdjIsIHRoaXMgc291bHRpb24gbWFrZXMgdGhhdCBwb3NzaWJsZSB3aXRob3V0IGR1cGxpY2F0aW5nIHRoZSBjb2RlIC0tPlxuPG5nLXRlbXBsYXRlICNtZXNzYWdlRGF0ZUFuZFNlbmRlciBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICA8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJcbiAgICAgIChwb3NpdGlvbiA9PT0gJ2luc2lkZS1tZXNzYWdlLWJ1YmJsZScgJiYgdGhlbWVWZXJzaW9uID09PSAnMScpIHx8XG4gICAgICAocG9zaXRpb24gPT09ICdvdXRzaWRlLW1lc3NhZ2UtYnViYmxlJyAmJiB0aGVtZVZlcnNpb24gPT09ICcyJylcbiAgICBcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fdHJhbnNsYXRpb24tbm90aWNlXCJcbiAgICAgICpuZ0lmPVwic2hvdWxkRGlzcGxheVRyYW5zbGF0aW9uTm90aWNlXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwidHJhbnNsYXRpb24tbm90aWNlXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VlLW9yaWdpbmFsXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPT09ICd0cmFuc2xhdGlvbidcIlxuICAgICAgICAoY2xpY2spPVwiZGlzcGxheU9yaWdpbmFsTWVzc2FnZSgpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImRpc3BsYXlPcmlnaW5hbE1lc3NhZ2UoKVwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBzdHJlYW1DaGF0LlNlZSBvcmlnaW5hbCAoYXV0b21hdGljYWxseSB0cmFuc2xhdGVkKVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VlLXRyYW5zbGF0aW9uXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5ZWRNZXNzYWdlVGV4dENvbnRlbnQgPT09ICdvcmlnaW5hbCdcIlxuICAgICAgICAoY2xpY2spPVwiZGlzcGxheVRyYW5zbGF0ZWRNZXNzYWdlKClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZGlzcGxheVRyYW5zbGF0ZWRNZXNzYWdlKClcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgc3RyZWFtQ2hhdC5TZWUgdHJhbnNsYXRpb25cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLWRhdGFcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLWRhdGFcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2UtbWV0YWRhdGFcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoZW1lVmVyc2lvbiA9PT0gJzInXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlU3RhdHVzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZGVyXCJcbiAgICAgICAgKm5nSWY9XCIhaXNTZW50QnlDdXJyZW50VXNlclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLW5hbWUgc3RyLWNoYXRfX21lc3NhZ2Utc2VuZGVyLW5hbWVcIlxuICAgICAgPlxuICAgICAgICB7eyBtZXNzYWdlPy51c2VyPy5uYW1lID8gbWVzc2FnZT8udXNlcj8ubmFtZSA6IG1lc3NhZ2U/LnVzZXI/LmlkIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBkYXRhLXRlc3RpZD1cImRhdGVcIiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS10aW1lc3RhbXBcIj5cbiAgICAgICAge3sgcGFyc2VkRGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZVN0YXR1cz5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBpc1NlbnRCeUN1cnJlbnRVc2VyICYmXG4gICAgICAoKGlzTGFzdFNlbnRNZXNzYWdlICYmIG1lc3NhZ2U/LnN0YXR1cyA9PT0gJ3JlY2VpdmVkJykgfHxcbiAgICAgICAgbWVzc2FnZT8uc3RhdHVzID09PSAnc2VuZGluZycpXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlPy5zdGF0dXMgPT09ICdzZW5kaW5nJzsgZWxzZSBzZW50U3RhdHVzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VuZGluZ1N0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjc2VudFN0YXR1cz5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBtb2RlID09PSAnbWFpbicgJiYgaXNNZXNzYWdlRGVsaXZlcmVkQW5kUmVhZCAmJiBjYW5EaXNwbGF5UmVhZFN0YXR1cztcbiAgICAgICAgICBlbHNlIGRlbGl2ZXJlZFN0YXR1c1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVhZFN0YXR1c1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2RlbGl2ZXJlZFN0YXR1cz5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBjdXN0b21EZWxpdmVyZWRTdGF0dXNUZW1wbGF0ZSB8fCBkZWZhdWx0RGVsaXZlcmVkU3RhdHVzO1xuICAgICAgICAgIGNvbnRleHQ6IGdldERlbGl2ZXJlZFN0YXR1c0NvbnRleHQoKVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RGVsaXZlcmVkU3RhdHVzPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJtb2RlID09PSAnbWFpbidcIlxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXNcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLWFuZ3VsYXJcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zdGF0dXNcbiAgICAgICAgXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJkZWxpdmVyZWQtaW5kaWNhdG9yXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW3BvcHBlcl09XCJwb3BwZXJDb250ZW50XCJcbiAgICAgICAgW3BvcHBlclRyaWdnZXJdPVwicG9wcGVyVHJpZ2dlckhvdmVyXCJcbiAgICAgICAgW3BvcHBlclBsYWNlbWVudF09XCJwb3BwZXJQbGFjZW1lbnRBdXRvXCJcbiAgICAgICAgW3BvcHBlckhpZGVPblNjcm9sbF09XCJmYWxzZVwiXG4gICAgICAgIFtwb3BwZXJIaWRlT25DbGlja091dHNpZGVdPVwiZmFsc2VcIlxuICAgICAgICAoaG92ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAgPHBvcHBlci1jb250ZW50ICNwb3BwZXJDb250ZW50PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdG9vbHRpcCBzdHItY2hhdF9fdG9vbHRpcC1hbmd1bGFyXCI+XG4gICAgICAgICAgICB7eyBcInN0cmVhbUNoYXQuRGVsaXZlcmVkXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9wb3BwZXItY29udGVudD5cbiAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkZWxpdmVyZWQtaWNvblwiXG4gICAgICAgICAgaWNvbj1cImRlbGl2ZXJlZC1pY29uXCJcbiAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI3NlbmRpbmdTdGF0dXM+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgY3VzdG9tU2VuZGluZ1N0YXR1c1RlbXBsYXRlIHx8IGRlZmF1bHRTZW5kaW5nU3RhdHVzO1xuICAgICAgICAgIGNvbnRleHQ6IGdldFNlbmRpbmdTdGF0dXNDb250ZXh0KClcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbmRpbmdTdGF0dXM+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXNcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zaW1wbGUtc3RhdHVzLWFuZ3VsYXJcbiAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1zdGF0dXNcbiAgICAgICAgXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kaW5nLWluZGljYXRvclwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIFtwb3BwZXJdPVwicG9wcGVyQ29udGVudFwiXG4gICAgICAgIFtwb3BwZXJUcmlnZ2VyXT1cInBvcHBlclRyaWdnZXJIb3ZlclwiXG4gICAgICAgIFtwb3BwZXJQbGFjZW1lbnRdPVwicG9wcGVyUGxhY2VtZW50QXV0b1wiXG4gICAgICAgIFtwb3BwZXJIaWRlT25TY3JvbGxdPVwiZmFsc2VcIlxuICAgICAgICBbcG9wcGVySGlkZU9uQ2xpY2tPdXRzaWRlXT1cImZhbHNlXCJcbiAgICAgICAgKGhvdmVyKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICA+XG4gICAgICAgIDxwb3BwZXItY29udGVudCAjcG9wcGVyQ29udGVudD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3Rvb2x0aXAgc3RyLWNoYXRfX3Rvb2x0aXAtYW5ndWxhclwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0LlNlbmRpbmcuLi5cIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3BvcHBlci1jb250ZW50PlxuICAgICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJsb2FkaW5nLWluZGljYXRvclwiXG4gICAgICAgID48L3N0cmVhbS1sb2FkaW5nLWluZGljYXRvci1wbGFjZWhvbGRlcj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjcmVhZFN0YXR1cz5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBjdXN0b21SZWFkU3RhdHVzVGVtcGxhdGUgfHwgZGVmYXVsdFJlYWRTdGF0dXM7XG4gICAgICAgICAgY29udGV4dDogZ2V0UmVhZFN0YXR1c0NvbnRleHQoKVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UmVhZFN0YXR1cz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utc2ltcGxlLXN0YXR1c1xuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXMtYW5ndWxhclxuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXN0YXR1c1xuICAgICAgICBcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInJlYWQtaW5kaWNhdG9yXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW3BvcHBlcl09XCJwb3BwZXJDb250ZW50XCJcbiAgICAgICAgW3BvcHBlclRyaWdnZXJdPVwicG9wcGVyVHJpZ2dlckhvdmVyXCJcbiAgICAgICAgW3BvcHBlclBsYWNlbWVudF09XCJwb3BwZXJQbGFjZW1lbnRBdXRvXCJcbiAgICAgICAgW3BvcHBlckhpZGVPblNjcm9sbF09XCJmYWxzZVwiXG4gICAgICAgIFtwb3BwZXJIaWRlT25DbGlja091dHNpZGVdPVwiZmFsc2VcIlxuICAgICAgICAoaG92ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAgPHBvcHBlci1jb250ZW50ICNwb3BwZXJDb250ZW50PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3Rvb2x0aXAgc3RyLWNoYXRfX3Rvb2x0aXAtYW5ndWxhclwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlYWQtYnktdG9vbHRpcFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcmVhZEJ5VGV4dCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3BvcHBlci1jb250ZW50PlxuICAgICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3RcIlxuICAgICAgICAgIGRhdGEtdGVzdC1pZD1cImxhc3QtcmVhZC11c2VyLWF2YXRhclwiXG4gICAgICAgICAgW3NpemVdPVwiMTVcIlxuICAgICAgICAgIFtpbWFnZVVybF09XCJsYXN0UmVhZFVzZXI/LmltYWdlXCJcbiAgICAgICAgICBbbmFtZV09XCJsYXN0UmVhZFVzZXI/Lm5hbWUgfHwgbGFzdFJlYWRVc2VyPy5pZFwiXG4gICAgICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgICAgIGxvY2F0aW9uPVwibWVzc2FnZS1yZWFkZXJcIlxuICAgICAgICAgIFt1c2VyXT1cImxhc3RSZWFkVXNlclwiXG4gICAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgZGF0YS10ZXN0LWlkPVwicmVhZC1ieS1sZW5ndGhcIlxuICAgICAgICAgICpuZ0lmPVwiaXNSZWFkQnlNdWx0aXBsZVVzZXJzXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1zdGF0dXMtbnVtYmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IChtZXNzYWdlPy5yZWFkQnkpIS5sZW5ndGggfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZXBseUNvdW50QnV0dG9uIGxldC1wb3NpdGlvbj1cInBvc2l0aW9uXCI+XG4gIDwhLS0gZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2NvbmRpdGlvbmFsLWNvbXBsZXhpdHkgLS0+XG4gIDxkaXZcbiAgICAqbmdJZj1cIlxuICAgICAgKHBvc2l0aW9uID09PSAnaW5zaWRlLW1lc3NhZ2UtYnViYmxlJyAmJiB0aGVtZVZlcnNpb24gPT09ICcxJykgfHxcbiAgICAgIChwb3NpdGlvbiA9PT0gJ291dHNpZGUtbWVzc2FnZS1idWJibGUnICYmIHRoZW1lVmVyc2lvbiA9PT0gJzInKVxuICAgIFwiXG4gICAgY2xhc3M9XCJcbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNpbXBsZS1yZXBseS1idXR0b25cbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXJlcGxpZXMtY291bnQtYnV0dG9uLXdyYXBwZXJcbiAgICBcIlxuICA+XG4gICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jb25kaXRpb25hbC1jb21wbGV4aXR5IC0tPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvdWxkRGlzcGxheVRocmVhZExpbmtcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZXBsaWVzLWNvdW50LWJ1dHRvblwiXG4gICAgICBkYXRhLXRlc3RpZD1cInJlcGx5LWNvdW50LWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwic2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKClcIlxuICAgID5cbiAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAqbmdJZj1cInRoZW1lVmVyc2lvbiA9PT0gJzEnXCJcbiAgICAgICAgc3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgaWNvbj1cInJlcGx5XCJcbiAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAge3ttZXNzYWdlPy5yZXBseV9jb3VudCA9PT0gMSA/ICgnc3RyZWFtQ2hhdC4xIHJlcGx5JyB8IHRyYW5zbGF0ZSkgOiAoJ3N0cmVhbUNoYXQue3sgcmVwbHlDb3VudCB9fVxuICAgICAgcmVwbGllcycgfCB0cmFuc2xhdGU6cmVwbHlDb3VudFBhcmFtKX19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|