stream-chat-angular 4.55.1-perf-message-list.1 → 4.55.1-perf-message-list.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/version.d.ts +1 -1
- package/bundles/stream-chat-angular.umd.js +24 -18
- package/bundles/stream-chat-angular.umd.js.map +1 -1
- package/esm2015/assets/version.js +2 -2
- package/esm2015/lib/attachment-list/attachment-list.component.js +11 -5
- package/esm2015/lib/message-actions-box/message-actions-box.component.js +2 -2
- package/esm2015/lib/message-list/message-list.component.js +8 -8
- package/fesm2015/stream-chat-angular.js +19 -13
- package/fesm2015/stream-chat-angular.js.map +1 -1
- package/lib/attachment-list/attachment-list.component.d.ts +6 -3
- package/package.json +1 -1
- package/src/assets/version.ts +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '4.55.1-perf-message-list.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const version = '4.55.1-perf-message-list.3';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzQuNTUuMS1wZXJmLW1lc3NhZ2UtbGlzdC4zJztcbiJdfQ==
|
|
@@ -14,10 +14,11 @@ import * as i8 from "@ngx-translate/core";
|
|
|
14
14
|
* The `AttachmentList` component displays the attachments of a message
|
|
15
15
|
*/
|
|
16
16
|
export class AttachmentListComponent {
|
|
17
|
-
constructor(customTemplatesService, channelService, attachmentConfigurationService, themeService) {
|
|
17
|
+
constructor(customTemplatesService, channelService, attachmentConfigurationService, cdRef, themeService) {
|
|
18
18
|
this.customTemplatesService = customTemplatesService;
|
|
19
19
|
this.channelService = channelService;
|
|
20
20
|
this.attachmentConfigurationService = attachmentConfigurationService;
|
|
21
|
+
this.cdRef = cdRef;
|
|
21
22
|
/**
|
|
22
23
|
* The attachments to display
|
|
23
24
|
*/
|
|
@@ -30,6 +31,7 @@ export class AttachmentListComponent {
|
|
|
30
31
|
this.orderedAttachments = [];
|
|
31
32
|
this.imagesToView = [];
|
|
32
33
|
this.imagesToViewCurrentIndex = 0;
|
|
34
|
+
this.isInited = false;
|
|
33
35
|
this.attachmentConfigurations = new Map();
|
|
34
36
|
this.themeVersion = themeService.themeVersion;
|
|
35
37
|
}
|
|
@@ -50,6 +52,10 @@ export class AttachmentListComponent {
|
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
54
|
}
|
|
55
|
+
ngAfterViewInit() {
|
|
56
|
+
this.isInited = true;
|
|
57
|
+
this.cdRef.detectChanges();
|
|
58
|
+
}
|
|
53
59
|
trackByUrl(_, attachment) {
|
|
54
60
|
return (attachment.image_url ||
|
|
55
61
|
attachment.img_url ||
|
|
@@ -178,8 +184,8 @@ export class AttachmentListComponent {
|
|
|
178
184
|
this.imagesToView = [];
|
|
179
185
|
}
|
|
180
186
|
}
|
|
181
|
-
AttachmentListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AttachmentListComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.ChannelService }, { token: i3.AttachmentConfigurationService }, { token: i4.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
182
|
-
AttachmentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AttachmentListComponent, selector: "stream-attachment-list", inputs: { messageId: "messageId", parentMessageId: "parentMessageId", attachments: "attachments" }, outputs: { imageModalStateChange: "imageModalStateChange" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"orderedAttachments.length > 0\" class=\"str-chat__attachment-list\">\n <ng-container\n *ngFor=\"let attachment of orderedAttachments; trackBy: trackByUrl\"\n >\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }} str-chat__message-attachment-dynamic-size\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n [class.str-chat__message-attachment-with-actions]=\"\n attachment.actions && attachment.actions.length > 0\n \"\n [class.str-chat__message-attachment--svg-image]=\"isSvg(attachment)\"\n >\n <ng-container *ngIf=\"isImage(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.imageAttachmentTemplate$ | async) ||\n defaultImage;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultImage let-attachmentContext=\"attachment\">\n <img\n #imgElement\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).url\n \"\n [alt]=\"attachmentContext?.fallback\"\n (click)=\"openImageModal([attachmentContext])\"\n (keyup.enter)=\"openImageModal([attachmentContext])\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).width\n }\"\n />\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isGallery(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.galleryAttachmentTemplate$ | async) ||\n defaultGallery;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultGallery let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__gallery\"\n data-testid=\"image-gallery\"\n [class.str-chat__gallery--square]=\"\n (attachmentContext?.images)!.length > 3\n \"\n [class.str-chat__gallery-two-rows]=\"\n (attachmentContext?.images)!.length > 2\n \"\n >\n <ng-container\n *ngFor=\"\n let galleryImage of attachmentContext.images;\n let index = index;\n let isLast = last;\n trackBy: trackByImageUrl\n \"\n >\n <button\n *ngIf=\"index < 3 || (index === 3 && isLast)\"\n class=\"str-chat__gallery-image\"\n data-testclass=\"gallery-image\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n >\n <img\n #imgElement\n [src]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).url\n \"\n [alt]=\"galleryImage.fallback\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).width\n }\"\n />\n </button>\n <button\n #element\n *ngIf=\"index === 3 && !isLast\"\n class=\"str-chat__gallery-placeholder\"\n data-testclass=\"gallery-image\"\n data-testid=\"more-image-button\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalWidth\n \"\n [ngStyle]=\"{\n 'background-image':\n 'url(' +\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).url +\n ')',\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).width\n }\"\n >\n <p\n [innerHTML]=\"\n 'streamChat.{{ imageCount }} more'\n | translate\n : { imageCount: attachmentContext!.images!.length - 4 }\n \"\n ></p>\n </button>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isVideo(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.videoAttachmentTemplate$ | async) ||\n defaultVideo;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultVideo let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__player-wrapper\"\n data-testclass=\"video-attachment-parent\"\n [style.--original-height]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalHeight\n \"\n [style.--original-width]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalWidth\n \"\n [ngStyle]=\"{\n height: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).height,\n width: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).width\n }\"\n >\n <video\n #videoElement\n class=\"str-chat__video-angular\"\n controls\n data-testclass=\"video-attachment\"\n [src]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .url\n \"\n [poster]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .thumbUrl\n \"\n ></video>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isFile(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.fileAttachmentTemplate$ | async) ||\n defaultFile;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultFile let-attachmentContext=\"attachment\">\n <a\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n style=\"cursor: pointer; text-decoration: none\"\n data-testclass=\"file-link\"\n href=\"{{ attachmentContext.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n icon=\"file\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n icon=\"unspecified-filetype\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <div class=\"str-chat__message-attachment-file--item-first-row\">\n <div\n data-testclass=\"file-title\"\n class=\"str-chat__message-attachment-file--item-name\"\n >\n {{ attachmentContext.title }}\n </div>\n <!-- Temporary disabled, will be fixed with this: https://github.com/GetStream/stream-chat-angular/issues/393 -->\n <!-- <a\n class=\"str-chat__message-attachment-file--item-download\"\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-attachment-download-icon\"\n icon=\"download\"\n ></stream-icon-placeholder>\n </a> -->\n </div>\n <span\n class=\"str-chat__message-attachment-file--item-size\"\n data-testclass=\"size\"\n *ngIf=\"hasFileSize(attachmentContext)\"\n >{{ getFileSize(attachmentContext) }}</span\n >\n </div>\n </a>\n </ng-template>\n </ng-container>\n <ng-container\n *ngIf=\"\n isCard(attachment) &&\n getCardAttachmentConfiguration(attachment) as attachmentConfiguration\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.cardAttachmentTemplate$ | async) ||\n defaultCard;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultCard let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachmentContext.type\n }}\"\n >\n <div\n *ngIf=\"attachmentConfiguration.url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n data-testclass=\"card-img\"\n alt=\"{{ attachmentConfiguration.url }}\"\n src=\"{{ attachmentConfiguration.url }}\"\n [ngStyle]=\"{\n height: attachmentConfiguration.height,\n width: attachmentConfiguration.width\n }\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachmentContext.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachmentContext.title }}\n </div>\n <div\n *ngIf=\"attachmentContext.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachmentContext.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n \"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n }}\"\n target=\"_blank\"\n >\n {{\n trimUrl(\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n )\n }}\n </a>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"attachment.actions && attachment.actions.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.attachmentActionsTemplate$ | async) ||\n defaultActions;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultActions let-attachmentContext=\"attachment\">\n <div class=\"str-chat__message-attachment-actions\">\n <div class=\"str-chat__message-attachment-actions-form\">\n <button\n *ngFor=\"\n let action of attachmentContext.actions;\n trackBy: trackByActionValue\n \"\n class=\"str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--{{\n action.style\n }}\"\n data-testclass=\"attachment-action\"\n (click)=\"sendAction(action)\"\n (keyup.enter)=\"sendAction(action)\"\n >\n {{ action.text }}\n </button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"imagesToView && imagesToView.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"stream-chat-angular__image-modal-host\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"stream-chat-angular__image-modal str-chat__image-carousel\">\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n [ngStyle]=\"{\n visibility: isImageModalPrevButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-prev\"\n type=\"button\"\n (click)=\"stepImages(-1)\"\n (keyup.enter)=\"stepImages(-1)\"\n >\n <stream-icon-placeholder icon=\"arrow-left\"></stream-icon-placeholder>\n </button>\n <img\n #imgElement\n class=\"\n stream-chat-angular__image-modal-image\n str-chat__image-carousel-image\n \"\n data-testid=\"modal-image\"\n [src]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).url\n \"\n [style.--original-height]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalWidth\n \"\n [alt]=\"imagesToView[imagesToViewCurrentIndex].fallback\"\n [ngStyle]=\"{\n width: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).width,\n height: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).height\n }\"\n />\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n type=\"button\"\n [ngStyle]=\"{\n visibility: isImageModalNextButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-next\"\n (click)=\"stepImages(1)\"\n (keyup.enter)=\"stepImages(1)\"\n >\n <stream-icon-placeholder icon=\"arrow-right\"></stream-icon-placeholder>\n </button>\n </div>\n</ng-template>\n", components: [{ type: i5.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i6.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i7.AsyncPipe, "translate": i8.TranslatePipe } });
|
|
187
|
+
AttachmentListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AttachmentListComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.ChannelService }, { token: i3.AttachmentConfigurationService }, { token: i0.ChangeDetectorRef }, { token: i4.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
188
|
+
AttachmentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AttachmentListComponent, selector: "stream-attachment-list", inputs: { messageId: "messageId", parentMessageId: "parentMessageId", attachments: "attachments" }, outputs: { imageModalStateChange: "imageModalStateChange" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"isInited && orderedAttachments.length > 0\"\n class=\"str-chat__attachment-list\"\n>\n <ng-container\n *ngFor=\"let attachment of orderedAttachments; trackBy: trackByUrl\"\n >\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }} str-chat__message-attachment-dynamic-size\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n [class.str-chat__message-attachment-with-actions]=\"\n attachment.actions && attachment.actions.length > 0\n \"\n [class.str-chat__message-attachment--svg-image]=\"isSvg(attachment)\"\n >\n <ng-container *ngIf=\"isImage(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.imageAttachmentTemplate$ | async) ||\n defaultImage;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultImage let-attachmentContext=\"attachment\">\n <img\n #imgElement\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).url\n \"\n [alt]=\"attachmentContext?.fallback\"\n (click)=\"openImageModal([attachmentContext])\"\n (keyup.enter)=\"openImageModal([attachmentContext])\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).width\n }\"\n />\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isGallery(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.galleryAttachmentTemplate$ | async) ||\n defaultGallery;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultGallery let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__gallery\"\n data-testid=\"image-gallery\"\n [class.str-chat__gallery--square]=\"\n (attachmentContext?.images)!.length > 3\n \"\n [class.str-chat__gallery-two-rows]=\"\n (attachmentContext?.images)!.length > 2\n \"\n >\n <ng-container\n *ngFor=\"\n let galleryImage of attachmentContext.images;\n let index = index;\n let isLast = last;\n trackBy: trackByImageUrl\n \"\n >\n <button\n *ngIf=\"index < 3 || (index === 3 && isLast)\"\n class=\"str-chat__gallery-image\"\n data-testclass=\"gallery-image\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n >\n <img\n #imgElement\n [src]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).url\n \"\n [alt]=\"galleryImage.fallback\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).width\n }\"\n />\n </button>\n <button\n #element\n *ngIf=\"index === 3 && !isLast\"\n class=\"str-chat__gallery-placeholder\"\n data-testclass=\"gallery-image\"\n data-testid=\"more-image-button\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalWidth\n \"\n [ngStyle]=\"{\n 'background-image':\n 'url(' +\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).url +\n ')',\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).width\n }\"\n >\n <p\n [innerHTML]=\"\n 'streamChat.{{ imageCount }} more'\n | translate\n : { imageCount: attachmentContext!.images!.length - 4 }\n \"\n ></p>\n </button>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isVideo(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.videoAttachmentTemplate$ | async) ||\n defaultVideo;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultVideo let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__player-wrapper\"\n data-testclass=\"video-attachment-parent\"\n [style.--original-height]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalHeight\n \"\n [style.--original-width]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalWidth\n \"\n [ngStyle]=\"{\n height: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).height,\n width: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).width\n }\"\n >\n <video\n #videoElement\n class=\"str-chat__video-angular\"\n controls\n data-testclass=\"video-attachment\"\n [src]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .url\n \"\n [poster]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .thumbUrl\n \"\n ></video>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isFile(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.fileAttachmentTemplate$ | async) ||\n defaultFile;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultFile let-attachmentContext=\"attachment\">\n <a\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n style=\"cursor: pointer; text-decoration: none\"\n data-testclass=\"file-link\"\n href=\"{{ attachmentContext.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n icon=\"file\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n icon=\"unspecified-filetype\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <div class=\"str-chat__message-attachment-file--item-first-row\">\n <div\n data-testclass=\"file-title\"\n class=\"str-chat__message-attachment-file--item-name\"\n >\n {{ attachmentContext.title }}\n </div>\n <!-- Temporary disabled, will be fixed with this: https://github.com/GetStream/stream-chat-angular/issues/393 -->\n <!-- <a\n class=\"str-chat__message-attachment-file--item-download\"\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-attachment-download-icon\"\n icon=\"download\"\n ></stream-icon-placeholder>\n </a> -->\n </div>\n <span\n class=\"str-chat__message-attachment-file--item-size\"\n data-testclass=\"size\"\n *ngIf=\"hasFileSize(attachmentContext)\"\n >{{ getFileSize(attachmentContext) }}</span\n >\n </div>\n </a>\n </ng-template>\n </ng-container>\n <ng-container\n *ngIf=\"\n isCard(attachment) &&\n getCardAttachmentConfiguration(attachment) as attachmentConfiguration\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.cardAttachmentTemplate$ | async) ||\n defaultCard;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultCard let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachmentContext.type\n }}\"\n >\n <div\n *ngIf=\"attachmentConfiguration.url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n data-testclass=\"card-img\"\n alt=\"{{ attachmentConfiguration.url }}\"\n src=\"{{ attachmentConfiguration.url }}\"\n [ngStyle]=\"{\n height: attachmentConfiguration.height,\n width: attachmentConfiguration.width\n }\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachmentContext.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachmentContext.title }}\n </div>\n <div\n *ngIf=\"attachmentContext.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachmentContext.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n \"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n }}\"\n target=\"_blank\"\n >\n {{\n trimUrl(\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n )\n }}\n </a>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"attachment.actions && attachment.actions.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.attachmentActionsTemplate$ | async) ||\n defaultActions;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultActions let-attachmentContext=\"attachment\">\n <div class=\"str-chat__message-attachment-actions\">\n <div class=\"str-chat__message-attachment-actions-form\">\n <button\n *ngFor=\"\n let action of attachmentContext.actions;\n trackBy: trackByActionValue\n \"\n class=\"str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--{{\n action.style\n }}\"\n data-testclass=\"attachment-action\"\n (click)=\"sendAction(action)\"\n (keyup.enter)=\"sendAction(action)\"\n >\n {{ action.text }}\n </button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"imagesToView && imagesToView.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"stream-chat-angular__image-modal-host\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"stream-chat-angular__image-modal str-chat__image-carousel\">\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n [ngStyle]=\"{\n visibility: isImageModalPrevButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-prev\"\n type=\"button\"\n (click)=\"stepImages(-1)\"\n (keyup.enter)=\"stepImages(-1)\"\n >\n <stream-icon-placeholder icon=\"arrow-left\"></stream-icon-placeholder>\n </button>\n <img\n #imgElement\n class=\"\n stream-chat-angular__image-modal-image\n str-chat__image-carousel-image\n \"\n data-testid=\"modal-image\"\n [src]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).url\n \"\n [style.--original-height]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalWidth\n \"\n [alt]=\"imagesToView[imagesToViewCurrentIndex].fallback\"\n [ngStyle]=\"{\n width: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).width,\n height: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).height\n }\"\n />\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n type=\"button\"\n [ngStyle]=\"{\n visibility: isImageModalNextButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-next\"\n (click)=\"stepImages(1)\"\n (keyup.enter)=\"stepImages(1)\"\n >\n <stream-icon-placeholder icon=\"arrow-right\"></stream-icon-placeholder>\n </button>\n </div>\n</ng-template>\n", components: [{ type: i5.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i6.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i7.AsyncPipe, "translate": i8.TranslatePipe } });
|
|
183
189
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AttachmentListComponent, decorators: [{
|
|
184
190
|
type: Component,
|
|
185
191
|
args: [{
|
|
@@ -187,7 +193,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
187
193
|
templateUrl: './attachment-list.component.html',
|
|
188
194
|
styles: [],
|
|
189
195
|
}]
|
|
190
|
-
}], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.ChannelService }, { type: i3.AttachmentConfigurationService }, { type: i4.ThemeService }]; }, propDecorators: { messageId: [{
|
|
196
|
+
}], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.ChannelService }, { type: i3.AttachmentConfigurationService }, { type: i0.ChangeDetectorRef }, { type: i4.ThemeService }]; }, propDecorators: { messageId: [{
|
|
191
197
|
type: Input
|
|
192
198
|
}], parentMessageId: [{
|
|
193
199
|
type: Input
|
|
@@ -201,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
201
207
|
type: ViewChild,
|
|
202
208
|
args: ['modalContent', { static: true }]
|
|
203
209
|
}] } });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVV2QixPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFNM0Q7O0dBRUc7QUFNSCxNQUFNLE9BQU8sdUJBQXVCO0lBaUNsQyxZQUNrQixzQkFBOEMsRUFDdEQsY0FBOEIsRUFDOUIsOEJBQThELEVBQ3RFLFlBQTBCO1FBSFYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQTNCeEU7O1dBRUc7UUFDTSxnQkFBVyxHQUE0QyxFQUFFLENBQUM7UUFDbkU7O1dBRUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBRXhELENBQUM7UUFDVyxVQUFLLEdBQUcsd0NBQXdDLENBQUM7UUFDaEUsdUJBQWtCLEdBQTRDLEVBQUUsQ0FBQztRQUNqRSxpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFDM0QsNkJBQXdCLEdBQUcsQ0FBQyxDQUFDO1FBSXJCLDZCQUF3QixHQUs1QixJQUFJLEdBQUcsRUFBRSxDQUFD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QUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBb0I7UUFDeEMsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU07YUFDUDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7O29IQTdQVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixpYUNuQ3BDLHMya0JBb2dCQTsyRkRqZWEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSxrQ0FBa0M7b0JBQy9DLE1BQU0sRUFBRSxFQUFFO2lCQUNYO2tOQUtVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFHUSxLQUFLO3NCQUFuQixXQUFXO2dCQU1KLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7XG4gIE1vZGFsQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgQXR0YWNobWVudENvbmZpZ3JhdGlvbixcbiAgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgQXR0YWNobWVudENvbnRleHQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwcmV0dHlieXRlcyBmcm9tICdwcmV0dHktYnl0ZXMnO1xuaW1wb3J0IHsgaXNJbWFnZUF0dGFjaG1lbnQgfSBmcm9tICcuLi9pcy1pbWFnZS1hdHRhY2htZW50JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBBdHRhY2htZW50TGlzdGAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBhdHRhY2htZW50cyBvZiBhIG1lc3NhZ2VcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF0dGFjaG1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2htZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lc3NhZ2UgdGhlIGF0dGFjaG1lbnRzIGJlbG9uZyB0b1xuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGlkIG9mIHRoZSBtZXNzYWdlIHRoZSBhdHRhY2htZW50cyBiZWxvbmcgdG9cbiAgICovXG4gIEBJbnB1dCgpIHBhcmVudE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGF0dGFjaG1lbnRzIHRvIGRpc3BsYXlcbiAgICovXG4gIEBJbnB1dCgpIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10gPSBbXTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgaW1hZ2UgY2Fyb3VzZWwgd2luZG93XG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaW1hZ2VNb2RhbFN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAnb3BlbmVkJyB8ICdjbG9zZWQnXG4gID4oKTtcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPSAnc3RyLWNoYXRfX2F0dGFjaG1lbnQtbGlzdC1hbmd1bGFyLWhvc3QnO1xuICBvcmRlcmVkQXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXc6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggPSAwO1xuICB0aGVtZVZlcnNpb246ICcxJyB8ICcyJztcbiAgQFZpZXdDaGlsZCgnbW9kYWxDb250ZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBtb2RhbENvbnRlbnQhOiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgcHJpdmF0ZSBhdHRhY2htZW50Q29uZmlndXJhdGlvbnM6IE1hcDxcbiAgICBBdHRhY2htZW50LFxuICAgIHwgQXR0YWNobWVudENvbmZpZ3JhdGlvblxuICAgIHwgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvblxuICAgIHwgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvblxuICA+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlOiBBdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50aGVtZVZlcnNpb24gPSB0aGVtZVNlcnZpY2UudGhlbWVWZXJzaW9uO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmF0dGFjaG1lbnRzKSB7XG4gICAgICBjb25zdCBpbWFnZXMgPSB0aGlzLmF0dGFjaG1lbnRzLmZpbHRlcih0aGlzLmlzSW1hZ2UpO1xuICAgICAgY29uc3QgY29udGFpbnNHYWxsZXJ5ID0gaW1hZ2VzLmxlbmd0aCA+PSAyO1xuICAgICAgdGhpcy5vcmRlcmVkQXR0YWNobWVudHMgPSBbXG4gICAgICAgIC4uLihjb250YWluc0dhbGxlcnkgPyB0aGlzLmNyZWF0ZUdhbGxlcnkoaW1hZ2VzKSA6IGltYWdlcyksXG4gICAgICAgIC4uLnRoaXMuYXR0YWNobWVudHMuZmlsdGVyKChhKSA9PiB0aGlzLmlzVmlkZW8oYSkpLFxuICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRzLmZpbHRlcigoYSkgPT4gdGhpcy5pc0ZpbGUoYSkpLFxuICAgICAgXTtcbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgLy8gRGlzcGxheSBsaW5rIGF0dGFjaG1lbnRzIG9ubHkgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGF0dGFjaG1lbnRzXG4gICAgICAvLyBHaXBoeS1zIGFsd2F5cyBzZW50IHdpdGhvdXQgb3RoZXIgYXR0YWNobWVudHNcbiAgICAgIGlmICh0aGlzLm9yZGVyZWRBdHRhY2htZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5vcmRlcmVkQXR0YWNobWVudHMucHVzaChcbiAgICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRzLmZpbHRlcigoYSkgPT4gdGhpcy5pc0NhcmQoYSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeVVybChfOiBudW1iZXIsIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNobWVudC5pbWFnZV91cmwgfHxcbiAgICAgIGF0dGFjaG1lbnQuaW1nX3VybCB8fFxuICAgICAgYXR0YWNobWVudC5hc3NldF91cmwgfHxcbiAgICAgIGF0dGFjaG1lbnQudGh1bWJfdXJsXG4gICAgKTtcbiAgfVxuXG4gIGlzSW1hZ2UoYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiBpc0ltYWdlQXR0YWNobWVudChhdHRhY2htZW50KTtcbiAgfVxuXG4gIGlzU3ZnKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGF0dGFjaG1lbnQuZmFsbGJhY2sgfHwgJyc7XG4gICAgcmV0dXJuICEhZmlsZW5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLnN2ZycpO1xuICB9XG5cbiAgaXNGaWxlKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gYXR0YWNobWVudC50eXBlID09PSAnZmlsZSc7XG4gIH1cblxuICBpc0dhbGxlcnkoYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiBhdHRhY2htZW50LnR5cGUgPT09ICdnYWxsZXJ5JztcbiAgfVxuXG4gIGlzVmlkZW8oYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICBhdHRhY2htZW50LnR5cGUgPT09ICd2aWRlbycgJiZcbiAgICAgIGF0dGFjaG1lbnQuYXNzZXRfdXJsICYmXG4gICAgICAhYXR0YWNobWVudC5vZ19zY3JhcGVfdXJsIC8vIGxpbmtzIGZyb20gdmlkZW8gc2hhcmUgc2VydmljZXMgKHN1Y2ggYXMgWW91VHViZSBvciBGYWNlYm9vaykgYXJlIGNhbid0IGJlIHBsYXllZFxuICAgICk7XG4gIH1cblxuICBpc0NhcmQoYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAhYXR0YWNobWVudC50eXBlIHx8XG4gICAgICAoYXR0YWNobWVudC50eXBlID09PSAnaW1hZ2UnICYmICF0aGlzLmlzSW1hZ2UoYXR0YWNobWVudCkpIHx8XG4gICAgICBhdHRhY2htZW50LnR5cGUgPT09ICdnaXBoeSdcbiAgICApO1xuICB9XG5cbiAgaGFzRmlsZVNpemUoYXR0YWNobWVudDogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPikge1xuICAgIHJldHVybiAoXG4gICAgICBhdHRhY2htZW50LmZpbGVfc2l6ZSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuZmlsZV9zaXplKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0RmlsZVNpemUoYXR0YWNobWVudDogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPikge1xuICAgIHJldHVybiBwcmV0dHlieXRlcyhOdW1iZXIoYXR0YWNobWVudC5maWxlX3NpemUhKSk7XG4gIH1cblxuICBnZXRNb2RhbENvbnRleHQoKTogTW9kYWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmltYWdlc1RvVmlldyAmJiB0aGlzLmltYWdlc1RvVmlldy5sZW5ndGggPiAwLFxuICAgICAgaXNPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbikgPT4gKGlzT3BlbiA/IG51bGwgOiB0aGlzLmNsb3NlSW1hZ2VNb2RhbCgpKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMubW9kYWxDb250ZW50LFxuICAgIH07XG4gIH1cblxuICB0cmltVXJsKHVybD86IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAodXJsICE9PSB1bmRlZmluZWQgJiYgdXJsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBbdHJpbW1lZFVybF0gPSB1cmxcbiAgICAgICAgLnJlcGxhY2UoL14oPzpodHRwcz86XFwvXFwvKT8oPzp3d3dcXC4pPy9pLCAnJylcbiAgICAgICAgLnNwbGl0KCcvJyk7XG5cbiAgICAgIHJldHVybiB0cmltbWVkVXJsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNlbmRBY3Rpb24oYWN0aW9uOiBBY3Rpb24pIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2VuZEFjdGlvbihcbiAgICAgIHRoaXMubWVzc2FnZUlkISxcbiAgICAgIHtcbiAgICAgICAgW2FjdGlvbi5uYW1lIV06IGFjdGlvbi52YWx1ZSEsXG4gICAgICB9LFxuICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlSWRcbiAgICApO1xuICB9XG5cbiAgdHJhY2tCeUFjdGlvblZhbHVlKF86IG51bWJlciwgaXRlbTogQWN0aW9uKSB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50czogQXR0YWNobWVudFtdLCBzZWxlY3RlZEluZGV4ID0gMCkge1xuICAgIHRoaXMuaW1hZ2VNb2RhbFN0YXRlQ2hhbmdlLm5leHQoJ29wZW5lZCcpO1xuICAgIHRoaXMuaW1hZ2VzVG9WaWV3ID0gYXR0YWNobWVudHM7XG4gICAgdGhpcy5pbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICB9XG5cbiAgc3RlcEltYWdlcyhkaXI6IC0xIHwgMSkge1xuICAgIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ICs9IGRpciAqIDE7XG4gIH1cblxuICB0cmFja0J5SW1hZ2VVcmwoXzogbnVtYmVyLCBpdGVtOiBBdHRhY2htZW50KSB7XG4gICAgcmV0dXJuIGl0ZW0uaW1hZ2VfdXJsIHx8IGl0ZW0uaW1nX3VybCB8fCBpdGVtLnRodW1iX3VybDtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRDb250ZXh0KFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5cbiAgKTogQXR0YWNobWVudENvbnRleHQge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnQgfTtcbiAgfVxuXG4gIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudCxcbiAgICB0eXBlOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyxcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5nZXQoYXR0YWNobWVudCk7XG4gICAgaWYgKGV4aXN0aW5nQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQ29uZmlndXJhdGlvbiBhcyBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID1cbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvbnMuc2V0KGF0dGFjaG1lbnQsIGNvbmZpZ3VyYXRpb24pO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICBhdHRhY2htZW50LFxuICAgICAgJ2Nhcm91c2VsJyxcbiAgICAgIGVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLmdldChhdHRhY2htZW50KTtcbiAgICBpZiAoZXhpc3RpbmdDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdDb25maWd1cmF0aW9uIGFzIFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb247XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPVxuICAgICAgdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgYXR0YWNobWVudCxcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5zZXQoYXR0YWNobWVudCwgY29uZmlndXJhdGlvbik7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBnZXRDYXJkQXR0YWNobWVudENvbmZpZ3VyYXRpb24oYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLmdldChhdHRhY2htZW50KTtcbiAgICBpZiAoZXhpc3RpbmdDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdDb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAoYXR0YWNobWVudC50eXBlID09PSAnZ2lwaHknKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0R2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgYXR0YWNobWVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9XG4gICAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGF0dGFjaG1lbnRcbiAgICAgICAgKTtcbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLnNldChhdHRhY2htZW50LCBjb25maWd1cmF0aW9uKTtcbiAgICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0ltYWdlTW9kYWxQcmV2QnV0dG9uVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggIT09IDA7XG4gIH1cblxuICBnZXQgaXNJbWFnZU1vZGFsTmV4dEJ1dHRvblZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ICE9PSB0aGlzLmltYWdlc1RvVmlldy5sZW5ndGggLSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVHYWxsZXJ5KGltYWdlczogQXR0YWNobWVudFtdKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2dhbGxlcnknLFxuICAgICAgICBpbWFnZXMsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNsb3NlSW1hZ2VNb2RhbCgpIHtcbiAgICB0aGlzLmltYWdlTW9kYWxTdGF0ZUNoYW5nZS5uZXh0KCdjbG9zZWQnKTtcbiAgICB0aGlzLmltYWdlc1RvVmlldyA9IFtdO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwib3JkZXJlZEF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcIiBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LWxpc3RcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIG9yZGVyZWRBdHRhY2htZW50czsgdHJhY2tCeTogdHJhY2tCeVVybFwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RjbGFzcz1cImF0dGFjaG1lbnQtY29udGFpbmVyXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudCBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS17e1xuICAgICAgICBhdHRhY2htZW50LnR5cGVcbiAgICAgIH19IHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtZHluYW1pYy1zaXplXCJcbiAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1jYXJkXT1cImlzQ2FyZChhdHRhY2htZW50KVwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtc2luZ2xlXT1cIlxuICAgICAgICBpc0ZpbGUoYXR0YWNobWVudClcbiAgICAgIFwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC13aXRoLWFjdGlvbnNdPVwiXG4gICAgICAgIGF0dGFjaG1lbnQuYWN0aW9ucyAmJiBhdHRhY2htZW50LmFjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgXCJcbiAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiaXNTdmcoYXR0YWNobWVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ltYWdlKGF0dGFjaG1lbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuaW1hZ2VBdHRhY2htZW50VGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRJbWFnZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRDb250ZXh0KGF0dGFjaG1lbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJbWFnZSBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgI2ltZ0VsZW1lbnRcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC0taW1nXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkudXJsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FsdF09XCJhdHRhY2htZW50Q29udGV4dD8uZmFsbGJhY2tcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZU1vZGFsKFthdHRhY2htZW50Q29udGV4dF0pXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChbYXR0YWNobWVudENvbnRleHRdKVwiXG4gICAgICAgICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLm9yaWdpbmFsSGVpZ2h0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtd2lkdGhdPVwiXG4gICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGhlaWdodDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkuaGVpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkud2lkdGhcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0dhbGxlcnkoYXR0YWNobWVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5nYWxsZXJ5QXR0YWNobWVudFRlbXBsYXRlJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICBkZWZhdWx0R2FsbGVyeTtcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRDb250ZXh0KGF0dGFjaG1lbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHYWxsZXJ5IGxldC1hdHRhY2htZW50Q29udGV4dD1cImF0dGFjaG1lbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5XCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2UtZ2FsbGVyeVwiXG4gICAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2dhbGxlcnktLXNxdWFyZV09XCJcbiAgICAgICAgICAgICAgKGF0dGFjaG1lbnRDb250ZXh0Py5pbWFnZXMpIS5sZW5ndGggPiAzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19nYWxsZXJ5LXR3by1yb3dzXT1cIlxuICAgICAgICAgICAgICAoYXR0YWNobWVudENvbnRleHQ/LmltYWdlcykhLmxlbmd0aCA+IDJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgZ2FsbGVyeUltYWdlIG9mIGF0dGFjaG1lbnRDb250ZXh0LmltYWdlcztcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICBsZXQgaXNMYXN0ID0gbGFzdDtcbiAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SW1hZ2VVcmxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5kZXggPCAzIHx8IChpbmRleCA9PT0gMyAmJiBpc0xhc3QpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5LWltYWdlXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImdhbGxlcnktaW1hZ2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICBpc1N2ZyhnYWxsZXJ5SW1hZ2UpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICNpbWdFbGVtZW50XG4gICAgICAgICAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLnVybFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiZ2FsbGVyeUltYWdlLmZhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNlbGVtZW50XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbmRleCA9PT0gMyAmJiAhaXNMYXN0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5LXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImdhbGxlcnktaW1hZ2VcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9yZS1pbWFnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICBpc1N2ZyhnYWxsZXJ5SW1hZ2UpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtd2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbFdpZHRoXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6XG4gICAgICAgICAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICkudXJsICtcbiAgICAgICAgICAgICAgICAgICAgJyknLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICkud2lkdGhcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAnc3RyZWFtQ2hhdC57eyBpbWFnZUNvdW50IH19IG1vcmUnXG4gICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyBpbWFnZUNvdW50OiBhdHRhY2htZW50Q29udGV4dCEuaW1hZ2VzIS5sZW5ndGggLSA0IH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvcD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVmlkZW8oYXR0YWNobWVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS52aWRlb0F0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdFZpZGVvO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZpZGVvIGxldC1hdHRhY2htZW50Q29udGV4dD1cImF0dGFjaG1lbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wbGF5ZXItd3JhcHBlclwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInZpZGVvLWF0dGFjaG1lbnQtcGFyZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgIC5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGhlaWdodDogZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICB2aWRlb0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoOiBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgI3ZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X192aWRlby1hbmd1bGFyXCJcbiAgICAgICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJ2aWRlby1hdHRhY2htZW50XCJcbiAgICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAudXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwb3N0ZXJdPVwiXG4gICAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgICAgLnRodW1iVXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlsZShhdHRhY2htZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmZpbGVBdHRhY2htZW50VGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRGaWxlO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbGUgbGV0LWF0dGFjaG1lbnRDb250ZXh0PVwiYXR0YWNobWVudFwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW1cbiAgICAgICAgICAgICAgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtc2luZ2xlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICBocmVmPVwie3sgYXR0YWNobWVudENvbnRleHQuYXNzZXRfdXJsIH19XCJcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMSdcIlxuICAgICAgICAgICAgICBpY29uPVwiZmlsZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIjMwXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMidcIlxuICAgICAgICAgICAgICBpY29uPVwidW5zcGVjaWZpZWQtZmlsZXR5cGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCIzMFwiXG4gICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tdGV4dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLWZpcnN0LXJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZmlsZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtZmlsZS0taXRlbS1uYW1lXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50Q29udGV4dC50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gVGVtcG9yYXJ5IGRpc2FibGVkLCB3aWxsIGJlIGZpeGVkIHdpdGggdGhpczogaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2lzc3Vlcy8zOTMgIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tZG93bmxvYWRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICAgIGRvd25sb2FkXG4gICAgICAgICAgICAgIGhyZWY9XCJ7eyBhdHRhY2htZW50LmFzc2V0X3VybCB9fVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1kb3dubG9hZC1pY29uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDwvYT4gLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLXNpemVcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dClcIlxuICAgICAgICAgICAgICAgID57eyBnZXRGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNDYXJkKGF0dGFjaG1lbnQpICYmXG4gICAgICAgICAgZ2V0Q2FyZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnQpIGFzIGF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdENhcmQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FyZCBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQgc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS17e1xuICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50eXBlXG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb25maWd1cmF0aW9uLnVybFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS1oZWFkZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLWltZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwie3sgYXR0YWNobWVudENvbmZpZ3VyYXRpb24udXJsIH19XCJcbiAgICAgICAgICAgICAgICBzcmM9XCJ7eyBhdHRhY2htZW50Q29uZmlndXJhdGlvbi51cmwgfX1cIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogYXR0YWNobWVudENvbmZpZ3VyYXRpb24uaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGF0dGFjaG1lbnRDb25maWd1cmF0aW9uLndpZHRoXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtY2FyZC0tZmxleFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXR0YWNobWVudENvbnRleHQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS10aXRsZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgYXR0YWNobWVudENvbnRleHQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb250ZXh0LnRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLXRleHRcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLXRleHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnRDb250ZXh0LnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLXVybFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50aXRsZV9saW5rIHx8XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0Lm9nX3NjcmFwZV91cmxcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInVybC1saW5rXCJcbiAgICAgICAgICAgICAgICAgIG5vb3BlbmVyXG4gICAgICAgICAgICAgICAgICBub3JlZmVycmVyXG4gICAgICAgICAgICAgICAgICBocmVmPVwie3tcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQudGl0bGVfbGluayB8fFxuICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0Lm9nX3NjcmFwZV91cmxcbiAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgdHJpbVVybChcbiAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50aXRsZV9saW5rIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC5vZ19zY3JhcGVfdXJsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXR0YWNobWVudC5hY3Rpb25zICYmIGF0dGFjaG1lbnQuYWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuYXR0YWNobWVudEFjdGlvbnNUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbnM7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QWN0aW9ucyBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9ucy1mb3JtXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgYXR0YWNobWVudENvbnRleHQuYWN0aW9ucztcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlBY3Rpb25WYWx1ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWFjdGlvbnMtYnV0dG9uIHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9ucy1idXR0b24tLXt7XG4gICAgICAgICAgICAgICAgICBhY3Rpb24uc3R5bGVcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdHRhY2htZW50LWFjdGlvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbmRBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBhY3Rpb24udGV4dCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWFnZXNUb1ZpZXcgJiYgaW1hZ2VzVG9WaWV3Lmxlbmd0aCA+IDBcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tb2RhbFRlbXBsYXRlJCB8IGFzeW5jKSB8fCBkZWZhdWx0TW9kYWw7XG4gICAgICAgIGNvbnRleHQ6IGdldE1vZGFsQ29udGV4dCgpXG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TW9kYWxcbiAgbGV0LWlzT3Blbj1cImlzT3BlblwiXG4gIGxldC1pc09wZW5DaGFuZ2VIYW5kbGVyPVwiaXNPcGVuQ2hhbmdlSGFuZGxlclwiXG4gIGxldC1jb250ZW50PVwiY29udGVudFwiXG4+XG4gIDxzdHJlYW0tbW9kYWxcbiAgICBjbGFzcz1cInN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLWhvc3RcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGFsQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cInN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsIHN0ci1jaGF0X19pbWFnZS1jYXJvdXNlbFwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLXN0ZXBwZXJcbiAgICAgICAgc3RyLWNoYXRfX2ltYWdlLWNhcm91c2VsLXN0ZXBwZXJcbiAgICAgIFwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIHZpc2liaWxpdHk6IGlzSW1hZ2VNb2RhbFByZXZCdXR0b25WaXNpYmxlID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcbiAgICAgIH1cIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZS1tb2RhbC1wcmV2XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInN0ZXBJbWFnZXMoLTEpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzdGVwSW1hZ2VzKC0xKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJhcnJvdy1sZWZ0XCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICA8L2J1dHRvbj5cbiAgICA8aW1nXG4gICAgICAjaW1nRWxlbWVudFxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyZWFtLWNoYXQtYW5ndWxhcl9faW1hZ2UtbW9kYWwtaW1hZ2VcbiAgICAgICAgc3RyLWNoYXRfX2ltYWdlLWNhcm91c2VsLWltYWdlXG4gICAgICBcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1pbWFnZVwiXG4gICAgICBbc3JjXT1cIlxuICAgICAgICBnZXRDYXJvdXNlbEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgaW1hZ2VzVG9WaWV3W2ltYWdlc1RvVmlld0N1cnJlbnRJbmRleF0sXG4gICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICApLnVybFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICBnZXRDYXJvdXNlbEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgaW1hZ2VzVG9WaWV3W2ltYWdlc1RvVmlld0N1cnJlbnRJbmRleF0sXG4gICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgIFwiXG4gICAgICBbYWx0XT1cImltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLmZhbGxiYWNrXCJcbiAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgd2lkdGg6IGdldENhcm91c2VsSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICBpbWFnZXNUb1ZpZXdbaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4XSxcbiAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICkud2lkdGgsXG4gICAgICAgIGhlaWdodDogZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS5oZWlnaHRcbiAgICAgIH1cIlxuICAgIC8+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyZWFtLWNoYXQtYW5ndWxhcl9faW1hZ2UtbW9kYWwtc3RlcHBlclxuICAgICAgICBzdHItY2hhdF9faW1hZ2UtY2Fyb3VzZWwtc3RlcHBlclxuICAgICAgXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICB2aXNpYmlsaXR5OiBpc0ltYWdlTW9kYWxOZXh0QnV0dG9uVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXG4gICAgICB9XCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2UtbW9kYWwtbmV4dFwiXG4gICAgICAoY2xpY2spPVwic3RlcEltYWdlcygxKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic3RlcEltYWdlcygxKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJhcnJvdy1yaWdodFwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVV2QixPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFNM0Q7O0dBRUc7QUFNSCxNQUFNLE9BQU8sdUJBQXVCO0lBa0NsQyxZQUNrQixzQkFBOEMsRUFDdEQsY0FBOEIsRUFDOUIsOEJBQThELEVBQzlELEtBQXdCLEVBQ2hDLFlBQTBCO1FBSlYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQUM5RCxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQTdCbEM7O1dBRUc7UUFDTSxnQkFBVyxHQUE0QyxFQUFFLENBQUM7UUFDbkU7O1dBRUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBRXhELENBQUM7UUFDVyxVQUFLLEdBQUcsd0NBQXdDLENBQUM7UUFDaEUsdUJBQWtCLEdBQTRDLEVBQUUsQ0FBQztRQUNqRSxpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFDM0QsNkJBQXdCLEdBQUcsQ0FBQyxDQUFD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QUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsSUFBSSw2QkFBNkI7UUFDL0IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLDZCQUE2QjtRQUMvQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFvQjtRQUN4QyxPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsTUFBTTthQUNQO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7b0hBblFVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLGlhQ3JDcEMsMDNrQkF1Z0JBOzJGRGxlYSx1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsV0FBVyxFQUFFLGtDQUFrQztvQkFDL0MsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7a1BBS1UsU0FBUztzQkFBakIsS0FBSztnQkFJRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSWEscUJBQXFCO3NCQUF2QyxNQUFNO2dCQUdRLEtBQUs7c0JBQW5CLFdBQVc7Z0JBT0osWUFBWTtzQkFEbkIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7XG4gIE1vZGFsQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgQXR0YWNobWVudENvbmZpZ3JhdGlvbixcbiAgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgQXR0YWNobWVudENvbnRleHQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwcmV0dHlieXRlcyBmcm9tICdwcmV0dHktYnl0ZXMnO1xuaW1wb3J0IHsgaXNJbWFnZUF0dGFjaG1lbnQgfSBmcm9tICcuLi9pcy1pbWFnZS1hdHRhY2htZW50JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBBdHRhY2htZW50TGlzdGAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBhdHRhY2htZW50cyBvZiBhIG1lc3NhZ2VcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF0dGFjaG1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2htZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lc3NhZ2UgdGhlIGF0dGFjaG1lbnRzIGJlbG9uZyB0b1xuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGlkIG9mIHRoZSBtZXNzYWdlIHRoZSBhdHRhY2htZW50cyBiZWxvbmcgdG9cbiAgICovXG4gIEBJbnB1dCgpIHBhcmVudE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGF0dGFjaG1lbnRzIHRvIGRpc3BsYXlcbiAgICovXG4gIEBJbnB1dCgpIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10gPSBbXTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgaW1hZ2UgY2Fyb3VzZWwgd2luZG93XG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaW1hZ2VNb2RhbFN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAnb3BlbmVkJyB8ICdjbG9zZWQnXG4gID4oKTtcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPSAnc3RyLWNoYXRfX2F0dGFjaG1lbnQtbGlzdC1hbmd1bGFyLWhvc3QnO1xuICBvcmRlcmVkQXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXc6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggPSAwO1xuICBpc0luaXRlZCA9IGZhbHNlO1xuICB0aGVtZVZlcnNpb246ICcxJyB8ICcyJztcbiAgQFZpZXdDaGlsZCgnbW9kYWxDb250ZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBtb2RhbENvbnRlbnQhOiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgcHJpdmF0ZSBhdHRhY2htZW50Q29uZmlndXJhdGlvbnM6IE1hcDxcbiAgICBBdHRhY2htZW50LFxuICAgIHwgQXR0YWNobWVudENvbmZpZ3JhdGlvblxuICAgIHwgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvblxuICAgIHwgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvblxuICA+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlOiBBdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50aGVtZVZlcnNpb24gPSB0aGVtZVNlcnZpY2UudGhlbWVWZXJzaW9uO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hdHRhY2htZW50cykge1xuICAgICAgY29uc3QgaW1hZ2VzID0gdGhpcy5hdHRhY2htZW50cy5maWx0ZXIodGhpcy5pc0ltYWdlKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5zR2FsbGVyeSA9IGltYWdlcy5sZW5ndGggPj0gMjtcbiAgICAgIHRoaXMub3JkZXJlZEF0dGFjaG1lbnRzID0gW1xuICAgICAgICAuLi4oY29udGFpbnNHYWxsZXJ5ID8gdGhpcy5jcmVhdGVHYWxsZXJ5KGltYWdlcykgOiBpbWFnZXMpLFxuICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRzLmZpbHRlcigoYSkgPT4gdGhpcy5pc1ZpZGVvKGEpKSxcbiAgICAgICAgLi4udGhpcy5hdHRhY2htZW50cy5maWx0ZXIoKGEpID0+IHRoaXMuaXNGaWxlKGEpKSxcbiAgICAgIF07XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICAgIC8vIERpc3BsYXkgbGluayBhdHRhY2htZW50cyBvbmx5IGlmIHRoZXJlIGFyZSBubyBvdGhlciBhdHRhY2htZW50c1xuICAgICAgLy8gR2lwaHktcyBhbHdheXMgc2VudCB3aXRob3V0IG90aGVyIGF0dGFjaG1lbnRzXG4gICAgICBpZiAodGhpcy5vcmRlcmVkQXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMub3JkZXJlZEF0dGFjaG1lbnRzLnB1c2goXG4gICAgICAgICAgLi4udGhpcy5hdHRhY2htZW50cy5maWx0ZXIoKGEpID0+IHRoaXMuaXNDYXJkKGEpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW5pdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRyYWNrQnlVcmwoXzogbnVtYmVyLCBhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8XG4gICAgICBhdHRhY2htZW50LmltZ191cmwgfHxcbiAgICAgIGF0dGFjaG1lbnQuYXNzZXRfdXJsIHx8XG4gICAgICBhdHRhY2htZW50LnRodW1iX3VybFxuICAgICk7XG4gIH1cblxuICBpc0ltYWdlKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gaXNJbWFnZUF0dGFjaG1lbnQoYXR0YWNobWVudCk7XG4gIH1cblxuICBpc1N2ZyhhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBhdHRhY2htZW50LmZhbGxiYWNrIHx8ICcnO1xuICAgIHJldHVybiAhIWZpbGVuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5zdmcnKTtcbiAgfVxuXG4gIGlzRmlsZShhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG4gICAgcmV0dXJuIGF0dGFjaG1lbnQudHlwZSA9PT0gJ2ZpbGUnO1xuICB9XG5cbiAgaXNHYWxsZXJ5KGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gYXR0YWNobWVudC50eXBlID09PSAnZ2FsbGVyeSc7XG4gIH1cblxuICBpc1ZpZGVvKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNobWVudC50eXBlID09PSAndmlkZW8nICYmXG4gICAgICBhdHRhY2htZW50LmFzc2V0X3VybCAmJlxuICAgICAgIWF0dGFjaG1lbnQub2dfc2NyYXBlX3VybCAvLyBsaW5rcyBmcm9tIHZpZGVvIHNoYXJlIHNlcnZpY2VzIChzdWNoIGFzIFlvdVR1YmUgb3IgRmFjZWJvb2spIGFyZSBjYW4ndCBiZSBwbGF5ZWRcbiAgICApO1xuICB9XG5cbiAgaXNDYXJkKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIWF0dGFjaG1lbnQudHlwZSB8fFxuICAgICAgKGF0dGFjaG1lbnQudHlwZSA9PT0gJ2ltYWdlJyAmJiAhdGhpcy5pc0ltYWdlKGF0dGFjaG1lbnQpKSB8fFxuICAgICAgYXR0YWNobWVudC50eXBlID09PSAnZ2lwaHknXG4gICAgKTtcbiAgfVxuXG4gIGhhc0ZpbGVTaXplKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNobWVudC5maWxlX3NpemUgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihhdHRhY2htZW50LmZpbGVfc2l6ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbGVTaXplKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4pIHtcbiAgICByZXR1cm4gcHJldHR5Ynl0ZXMoTnVtYmVyKGF0dGFjaG1lbnQuZmlsZV9zaXplISkpO1xuICB9XG5cbiAgZ2V0TW9kYWxDb250ZXh0KCk6IE1vZGFsQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzT3BlbjogdGhpcy5pbWFnZXNUb1ZpZXcgJiYgdGhpcy5pbWFnZXNUb1ZpZXcubGVuZ3RoID4gMCxcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+IChpc09wZW4gPyBudWxsIDogdGhpcy5jbG9zZUltYWdlTW9kYWwoKSksXG4gICAgICBjb250ZW50OiB0aGlzLm1vZGFsQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgdHJpbVVybCh1cmw/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHVybCAhPT0gdW5kZWZpbmVkICYmIHVybCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgW3RyaW1tZWRVcmxdID0gdXJsXG4gICAgICAgIC5yZXBsYWNlKC9eKD86aHR0cHM/OlxcL1xcLyk/KD86d3d3XFwuKT8vaSwgJycpXG4gICAgICAgIC5zcGxpdCgnLycpO1xuXG4gICAgICByZXR1cm4gdHJpbW1lZFVybDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZW5kQWN0aW9uKGFjdGlvbjogQWN0aW9uKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbmRBY3Rpb24oXG4gICAgICB0aGlzLm1lc3NhZ2VJZCEsXG4gICAgICB7XG4gICAgICAgIFthY3Rpb24ubmFtZSFdOiBhY3Rpb24udmFsdWUhLFxuICAgICAgfSxcbiAgICAgIHRoaXMucGFyZW50TWVzc2FnZUlkXG4gICAgKTtcbiAgfVxuXG4gIHRyYWNrQnlBY3Rpb25WYWx1ZShfOiBudW1iZXIsIGl0ZW06IEFjdGlvbikge1xuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9XG5cbiAgb3BlbkltYWdlTW9kYWwoYXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSwgc2VsZWN0ZWRJbmRleCA9IDApIHtcbiAgICB0aGlzLmltYWdlTW9kYWxTdGF0ZUNoYW5nZS5uZXh0KCdvcGVuZWQnKTtcbiAgICB0aGlzLmltYWdlc1RvVmlldyA9IGF0dGFjaG1lbnRzO1xuICAgIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ID0gc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIHN0ZXBJbWFnZXMoZGlyOiAtMSB8IDEpIHtcbiAgICB0aGlzLmltYWdlc1RvVmlld0N1cnJlbnRJbmRleCArPSBkaXIgKiAxO1xuICB9XG5cbiAgdHJhY2tCeUltYWdlVXJsKF86IG51bWJlciwgaXRlbTogQXR0YWNobWVudCkge1xuICAgIHJldHVybiBpdGVtLmltYWdlX3VybCB8fCBpdGVtLmltZ191cmwgfHwgaXRlbS50aHVtYl91cmw7XG4gIH1cblxuICBnZXRBdHRhY2htZW50Q29udGV4dChcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+XG4gICk6IEF0dGFjaG1lbnRDb250ZXh0IHtcbiAgICByZXR1cm4geyBhdHRhY2htZW50IH07XG4gIH1cblxuICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQsXG4gICAgdHlwZTogJ2dhbGxlcnknIHwgJ3NpbmdsZScsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgZXhpc3RpbmdDb25maWd1cmF0aW9uID0gdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvbnMuZ2V0KGF0dGFjaG1lbnQpO1xuICAgIGlmIChleGlzdGluZ0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiBleGlzdGluZ0NvbmZpZ3VyYXRpb24gYXMgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICB0eXBlLFxuICAgICAgICBlbGVtZW50XG4gICAgICApO1xuICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLnNldChhdHRhY2htZW50LCBjb25maWd1cmF0aW9uKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldENhcm91c2VsSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICkge1xuICAgIHJldHVybiB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgYXR0YWNobWVudCxcbiAgICAgICdjYXJvdXNlbCcsXG4gICAgICBlbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIGdldFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudCxcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5nZXQoYXR0YWNobWVudCk7XG4gICAgaWYgKGV4aXN0aW5nQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQ29uZmlndXJhdGlvbiBhcyBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID1cbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvbnMuc2V0KGF0dGFjaG1lbnQsIGNvbmZpZ3VyYXRpb24pO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0Q2FyZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5nZXQoYXR0YWNobWVudCk7XG4gICAgaWYgKGV4aXN0aW5nQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQ29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgaWYgKGF0dGFjaG1lbnQudHlwZSA9PT0gJ2dpcGh5Jykge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgIGF0dGFjaG1lbnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPVxuICAgICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRTY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICBhdHRhY2htZW50XG4gICAgICAgICk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5zZXQoYXR0YWNobWVudCwgY29uZmlndXJhdGlvbik7XG4gICAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNJbWFnZU1vZGFsUHJldkJ1dHRvblZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ICE9PSAwO1xuICB9XG5cbiAgZ2V0IGlzSW1hZ2VNb2RhbE5leHRCdXR0b25WaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmltYWdlc1RvVmlld0N1cnJlbnRJbmRleCAhPT0gdGhpcy5pbWFnZXNUb1ZpZXcubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlR2FsbGVyeShpbWFnZXM6IEF0dGFjaG1lbnRbXSkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdnYWxsZXJ5JyxcbiAgICAgICAgaW1hZ2VzLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZUltYWdlTW9kYWwoKSB7XG4gICAgdGhpcy5pbWFnZU1vZGFsU3RhdGVDaGFuZ2UubmV4dCgnY2xvc2VkJyk7XG4gICAgdGhpcy5pbWFnZXNUb1ZpZXcgPSBbXTtcbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cImlzSW5pdGVkICYmIG9yZGVyZWRBdHRhY2htZW50cy5sZW5ndGggPiAwXCJcbiAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1saXN0XCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIG9yZGVyZWRBdHRhY2htZW50czsgdHJhY2tCeTogdHJhY2tCeVVybFwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RjbGFzcz1cImF0dGFjaG1lbnQtY29udGFpbmVyXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudCBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS17e1xuICAgICAgICBhdHRhY2htZW50LnR5cGVcbiAgICAgIH19IHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtZHluYW1pYy1zaXplXCJcbiAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1jYXJkXT1cImlzQ2FyZChhdHRhY2htZW50KVwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtc2luZ2xlXT1cIlxuICAgICAgICBpc0ZpbGUoYXR0YWNobWVudClcbiAgICAgIFwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC13aXRoLWFjdGlvbnNdPVwiXG4gICAgICAgIGF0dGFjaG1lbnQuYWN0aW9ucyAmJiBhdHRhY2htZW50LmFjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgXCJcbiAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiaXNTdmcoYXR0YWNobWVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ltYWdlKGF0dGFjaG1lbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuaW1hZ2VBdHRhY2htZW50VGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRJbWFnZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRDb250ZXh0KGF0dGFjaG1lbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJbWFnZSBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgI2ltZ0VsZW1lbnRcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC0taW1nXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkudXJsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FsdF09XCJhdHRhY2htZW50Q29udGV4dD8uZmFsbGJhY2tcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZU1vZGFsKFthdHRhY2htZW50Q29udGV4dF0pXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChbYXR0YWNobWVudENvbnRleHRdKVwiXG4gICAgICAgICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLm9yaWdpbmFsSGVpZ2h0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtd2lkdGhdPVwiXG4gICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGhlaWdodDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkuaGVpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkud2lkdGhcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0dhbGxlcnkoYXR0YWNobWVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5nYWxsZXJ5QXR0YWNobWVudFRlbXBsYXRlJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICBkZWZhdWx0R2FsbGVyeTtcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRDb250ZXh0KGF0dGFjaG1lbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHYWxsZXJ5IGxldC1hdHRhY2htZW50Q29udGV4dD1cImF0dGFjaG1lbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5XCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2UtZ2FsbGVyeVwiXG4gICAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2dhbGxlcnktLXNxdWFyZV09XCJcbiAgICAgICAgICAgICAgKGF0dGFjaG1lbnRDb250ZXh0Py5pbWFnZXMpIS5sZW5ndGggPiAzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19nYWxsZXJ5LXR3by1yb3dzXT1cIlxuICAgICAgICAgICAgICAoYXR0YWNobWVudENvbnRleHQ/LmltYWdlcykhLmxlbmd0aCA+IDJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgZ2FsbGVyeUltYWdlIG9mIGF0dGFjaG1lbnRDb250ZXh0LmltYWdlcztcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICBsZXQgaXNMYXN0ID0gbGFzdDtcbiAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SW1hZ2VVcmxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5kZXggPCAzIHx8IChpbmRleCA9PT0gMyAmJiBpc0xhc3QpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5LWltYWdlXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImdhbGxlcnktaW1hZ2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICBpc1N2ZyhnYWxsZXJ5SW1hZ2UpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICNpbWdFbGVtZW50XG4gICAgICAgICAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLnVybFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiZ2FsbGVyeUltYWdlLmZhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNlbGVtZW50XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbmRleCA9PT0gMyAmJiAhaXNMYXN0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5LXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImdhbGxlcnktaW1hZ2VcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9yZS1pbWFnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICBpc1N2ZyhnYWxsZXJ5SW1hZ2UpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtd2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbFdpZHRoXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6XG4gICAgICAgICAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICkudXJsICtcbiAgICAgICAgICAgICAgICAgICAgJyknLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICkud2lkdGhcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAnc3RyZWFtQ2hhdC57eyBpbWFnZUNvdW50IH19IG1vcmUnXG4gICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyBpbWFnZUNvdW50OiBhdHRhY2htZW50Q29udGV4dCEuaW1hZ2VzIS5sZW5ndGggLSA0IH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvcD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVmlkZW8oYXR0YWNobWVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS52aWRlb0F0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdFZpZGVvO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZpZGVvIGxldC1hdHRhY2htZW50Q29udGV4dD1cImF0dGFjaG1lbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wbGF5ZXItd3JhcHBlclwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInZpZGVvLWF0dGFjaG1lbnQtcGFyZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgIC5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGhlaWdodDogZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICB2aWRlb0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoOiBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgI3ZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X192aWRlby1hbmd1bGFyXCJcbiAgICAgICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJ2aWRlby1hdHRhY2htZW50XCJcbiAgICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAudXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwb3N0ZXJdPVwiXG4gICAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgICAgLnRodW1iVXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlsZShhdHRhY2htZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmZpbGVBdHRhY2htZW50VGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRGaWxlO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbGUgbGV0LWF0dGFjaG1lbnRDb250ZXh0PVwiYXR0YWNobWVudFwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW1cbiAgICAgICAgICAgICAgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtc2luZ2xlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICBocmVmPVwie3sgYXR0YWNobWVudENvbnRleHQuYXNzZXRfdXJsIH19XCJcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMSdcIlxuICAgICAgICAgICAgICBpY29uPVwiZmlsZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIjMwXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMidcIlxuICAgICAgICAgICAgICBpY29uPVwidW5zcGVjaWZpZWQtZmlsZXR5cGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCIzMFwiXG4gICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tdGV4dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLWZpcnN0LXJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZmlsZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtZmlsZS0taXRlbS1uYW1lXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50Q29udGV4dC50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gVGVtcG9yYXJ5IGRpc2FibGVkLCB3aWxsIGJlIGZpeGVkIHdpdGggdGhpczogaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2lzc3Vlcy8zOTMgIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tZG93bmxvYWRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICAgIGRvd25sb2FkXG4gICAgICAgICAgICAgIGhyZWY9XCJ7eyBhdHRhY2htZW50LmFzc2V0X3VybCB9fVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1kb3dubG9hZC1pY29uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDwvYT4gLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLXNpemVcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dClcIlxuICAgICAgICAgICAgICAgID57eyBnZXRGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNDYXJkKGF0dGFjaG1lbnQpICYmXG4gICAgICAgICAgZ2V0Q2FyZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnQpIGFzIGF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdENhcmQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FyZCBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQgc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS17e1xuICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50eXBlXG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb25maWd1cmF0aW9uLnVybFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS1oZWFkZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLWltZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwie3sgYXR0YWNobWVudENvbmZpZ3VyYXRpb24udXJsIH19XCJcbiAgICAgICAgICAgICAgICBzcmM9XCJ7eyBhdHRhY2htZW50Q29uZmlndXJhdGlvbi51cmwgfX1cIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogYXR0YWNobWVudENvbmZpZ3VyYXRpb24uaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGF0dGFjaG1lbnRDb25maWd1cmF0aW9uLndpZHRoXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtY2FyZC0tZmxleFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXR0YWNobWVudENvbnRleHQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS10aXRsZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgYXR0YWNobWVudENvbnRleHQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb250ZXh0LnRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLXRleHRcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLXRleHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnRDb250ZXh0LnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLXVybFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50aXRsZV9saW5rIHx8XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0Lm9nX3NjcmFwZV91cmxcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInVybC1saW5rXCJcbiAgICAgICAgICAgICAgICAgIG5vb3BlbmVyXG4gICAgICAgICAgICAgICAgICBub3JlZmVycmVyXG4gICAgICAgICAgICAgICAgICBocmVmPVwie3tcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQudGl0bGVfbGluayB8fFxuICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0Lm9nX3NjcmFwZV91cmxcbiAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgdHJpbVVybChcbiAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50aXRsZV9saW5rIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC5vZ19zY3JhcGVfdXJsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXR0YWNobWVudC5hY3Rpb25zICYmIGF0dGFjaG1lbnQuYWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuYXR0YWNobWVudEFjdGlvbnNUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbnM7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QWN0aW9ucyBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9ucy1mb3JtXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgYXR0YWNobWVudENvbnRleHQuYWN0aW9ucztcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlBY3Rpb25WYWx1ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWFjdGlvbnMtYnV0dG9uIHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9ucy1idXR0b24tLXt7XG4gICAgICAgICAgICAgICAgICBhY3Rpb24uc3R5bGVcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdHRhY2htZW50LWFjdGlvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbmRBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBhY3Rpb24udGV4dCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWFnZXNUb1ZpZXcgJiYgaW1hZ2VzVG9WaWV3Lmxlbmd0aCA+IDBcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tb2RhbFRlbXBsYXRlJCB8IGFzeW5jKSB8fCBkZWZhdWx0TW9kYWw7XG4gICAgICAgIGNvbnRleHQ6IGdldE1vZGFsQ29udGV4dCgpXG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TW9kYWxcbiAgbGV0LWlzT3Blbj1cImlzT3BlblwiXG4gIGxldC1pc09wZW5DaGFuZ2VIYW5kbGVyPVwiaXNPcGVuQ2hhbmdlSGFuZGxlclwiXG4gIGxldC1jb250ZW50PVwiY29udGVudFwiXG4+XG4gIDxzdHJlYW0tbW9kYWxcbiAgICBjbGFzcz1cInN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLWhvc3RcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGFsQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cInN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsIHN0ci1jaGF0X19pbWFnZS1jYXJvdXNlbFwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLXN0ZXBwZXJcbiAgICAgICAgc3RyLWNoYXRfX2ltYWdlLWNhcm91c2VsLXN0ZXBwZXJcbiAgICAgIFwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIHZpc2liaWxpdHk6IGlzSW1hZ2VNb2RhbFByZXZCdXR0b25WaXNpYmxlID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcbiAgICAgIH1cIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZS1tb2RhbC1wcmV2XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInN0ZXBJbWFnZXMoLTEpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzdGVwSW1hZ2VzKC0xKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJhcnJvdy1sZWZ0XCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICA8L2J1dHRvbj5cbiAgICA8aW1nXG4gICAgICAjaW1nRWxlbWVudFxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyZWFtLWNoYXQtYW5ndWxhcl9faW1hZ2UtbW9kYWwtaW1hZ2VcbiAgICAgICAgc3RyLWNoYXRfX2ltYWdlLWNhcm91c2VsLWltYWdlXG4gICAgICBcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1pbWFnZVwiXG4gICAgICBbc3JjXT1cIlxuICAgICAgICBnZXRDYXJvdXNlbEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgaW1hZ2VzVG9WaWV3W2ltYWdlc1RvVmlld0N1cnJlbnRJbmRleF0sXG4gICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICApLnVybFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICBnZXRDYXJvdXNlbEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgaW1hZ2VzVG9WaWV3W2ltYWdlc1RvVmlld0N1cnJlbnRJbmRleF0sXG4gICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgIFwiXG4gICAgICBbYWx0XT1cImltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLmZhbGxiYWNrXCJcbiAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgd2lkdGg6IGdldENhcm91c2VsSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICBpbWFnZXNUb1ZpZXdbaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4XSxcbiAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICkud2lkdGgsXG4gICAgICAgIGhlaWdodDogZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS5oZWlnaHRcbiAgICAgIH1cIlxuICAgIC8+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyZWFtLWNoYXQtYW5ndWxhcl9faW1hZ2UtbW9kYWwtc3RlcHBlclxuICAgICAgICBzdHItY2hhdF9faW1hZ2UtY2Fyb3VzZWwtc3RlcHBlclxuICAgICAgXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICB2aXNpYmlsaXR5OiBpc0ltYWdlTW9kYWxOZXh0QnV0dG9uVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXG4gICAgICB9XCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2UtbW9kYWwtbmV4dFwiXG4gICAgICAoY2xpY2spPVwic3RlcEltYWdlcygxKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic3RlcEltYWdlcygxKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJhcnJvdy1yaWdodFwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -169,7 +169,7 @@ export class MessageActionsBoxComponent {
|
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
MessageActionsBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageActionsBoxComponent, deps: [{ token: i1.ChatClientService }, { token: i2.NotificationService }, { token: i3.ChannelService }, { token: i4.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
-
MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions", customActions: "customActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box str-chat__message-actions-box-angular\"\n [class.str-chat__message-actions-box--open]=\"true\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <ng-container\n *ngFor=\"let item of visibleMessageActionItems; trackBy: trackByActionName\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n ></ng-container>\n </ng-container>\n </ul>\n</div>\n\n<ng-template\n #defaultMessageActionItem\n let-actionName=\"actionName\"\n let-actionHandler=\"actionHandler\"\n let-actionLabelOrTranslationKey=\"actionLabelOrTranslationKey\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, isMine)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n (messageUpdate)=\"messageUpdateHandler()\"\n [sendMessage$]=\"sendMessage$Input\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageInputTemplate$ | async) || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button\n class=\"str-chat__edit-message-cancel\"\n translate\n data-testid=\"cancel-button\"\n (click)=\"modalClosed()\"\n >\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n class=\"str-chat__edit-message-send\"\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i5.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { type: i6.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mode", "isMultipleFileUploadEnabled", "message", "sendMessage$", "inputMode", "autoFocus"], outputs: ["messageUpdate"] }, { type: i7.NotificationListComponent, selector: "stream-notification-list" }], directives: [{ type: i8.
|
|
172
|
+
MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions", customActions: "customActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box str-chat__message-actions-box-angular\"\n [class.str-chat__message-actions-box--open]=\"true\"\n *ngIf=\"isOpen\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <ng-container\n *ngFor=\"let item of visibleMessageActionItems; trackBy: trackByActionName\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n ></ng-container>\n </ng-container>\n </ul>\n</div>\n\n<ng-template\n #defaultMessageActionItem\n let-actionName=\"actionName\"\n let-actionHandler=\"actionHandler\"\n let-actionLabelOrTranslationKey=\"actionLabelOrTranslationKey\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, isMine)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n [isOpen]=\"isOpen\"\n *ngIf=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n (messageUpdate)=\"messageUpdateHandler()\"\n [sendMessage$]=\"sendMessage$Input\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageInputTemplate$ | async) || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button\n class=\"str-chat__edit-message-cancel\"\n translate\n data-testid=\"cancel-button\"\n (click)=\"modalClosed()\"\n >\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n class=\"str-chat__edit-message-send\"\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i5.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { type: i6.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mode", "isMultipleFileUploadEnabled", "message", "sendMessage$", "inputMode", "autoFocus"], outputs: ["messageUpdate"] }, { type: i7.NotificationListComponent, selector: "stream-notification-list" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "async": i8.AsyncPipe, "translate": i9.TranslatePipe } });
|
|
173
173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageActionsBoxComponent, decorators: [{
|
|
174
174
|
type: Component,
|
|
175
175
|
args: [{
|
|
@@ -195,4 +195,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
195
195
|
type: ViewChild,
|
|
196
196
|
args: ['modalContent', { static: true }]
|
|
197
197
|
}] } });
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBYTNDOztHQUVHO0FBTUgsTUFBTSxPQUFPLDBCQUEwQjtJQTJDckMsWUFDVSxpQkFBb0MsRUFDcEMsbUJBQXdDLEVBQ3hDLGNBQThCLEVBQ3RCLHNCQUE4QztRQUh0RCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ3RCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUE5Q2hFOzs7V0FHRztRQUNNLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDeEI7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBS3hCOztXQUVHO1FBQ00sbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFDdkM7O1dBRUc7UUFDTSxrQkFBYSxHQUE4QixFQUFFLENBQUM7UUFDdkQ7O1dBRUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0RTs7V0FFRztRQUNnQixjQUFTLEdBQUcs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OUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDcEI7WUFDSCxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQzNCLENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCLENBQ2YsQ0FBUyxFQUNULElBQWlEO1FBRWpELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOzt1SEF2TVUsMEJBQTBCOzJHQUExQiwwQkFBMEIsOGFDL0J2QyxtbkdBK0dBOzJGRGhGYSwwQkFBMEI7a0JBTHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLHNDQUFzQztvQkFDbkQsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7NE1BTVUsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFJRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFJWSxTQUFTO3NCQUEzQixNQUFNO2dCQVlDLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtLFxuICBNZXNzYWdlQWN0aW9uQm94SXRlbUNvbnRleHQsXG4gIE1lc3NhZ2VBY3Rpb25JdGVtLFxuICBNZXNzYWdlSW5wdXRDb250ZXh0LFxuICBNb2RhbENvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4uL3R5cGVzJztcbi8qKlxuICogVGhlIGBNZXNzYWdlQWN0aW9uc0JveGAgY29tcG9uZW50IGRpc3BsYXlzIGEgbGlzdCBvZiBtZXNzYWdlIGFjdGlvbnMgKGkuZSBlZGl0KSwgdGhhdCBjYW4gYmUgb3BlbmVkIG9yIGNsb3NlZC4gWW91IGNhbiBmaW5kIHRoZSBbbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGFjdGlvbnNdKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkgaW4gdGhlIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlLWFjdGlvbnMtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpc3Qgc2hvdWxkIGJlIG9wZW5lZCBvciBjbG9zZWQuIEFkZGluZyBhIFVJIGVsZW1lbnQgdG8gb3BlbiBhbmQgY2xvc2UgdGhlIGxpc3QgaXMgdGhlIHBhcmVudCdzIGNvbXBvbmVudCByZXNwb25zaWJpbGl0eS5cbiAgICogQGRlcHJlY2F0ZWQgTm8gbmVlZCBmb3IgdGhpcyBzaW5jZSBbdGhlbWUtdjJdKC4uL3RoZW1pbmcvaW50cm9kdWN0aW9uLm1keClcbiAgICovXG4gIEBJbnB1dCgpIGlzT3BlbiA9IGZhbHNlO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBtZXNzYWdlIGFjdGlvbnMgYXJlIGJlbG9uZ2luZyB0byBhIG1lc3NhZ2UgdGhhdCB3YXMgc2VudCBieSB0aGUgY3VycmVudCB1c2VyIG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpIGlzTWluZSA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdGhlIGFjdGlvbnMgd2lsbCBiZSBleGVjdXRlZCBvblxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIFtjaGFubmVsIGNhcGFiaWxpdGllc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpIHRoYXQgYXJlIGVuYWJsZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIsIHRoZSBsaXN0IG9mIFtzdXBwb3J0ZWQgaW50ZXJhY3Rpb25zXSguLi9jb25jZXB0cy9tZXNzYWdlLWludGVyYWN0aW9ucy5tZHgpIGNhbiBiZSBmb3VuZCBpbiBvdXIgbWVzc2FnZSBpbnRlcmFjdGlvbiBndWlkZS4gVW5hdGhvcml6ZWQgYWN0aW9ucyB3b24ndCBiZSBkaXNwbGF5ZWQgb24gdGhlIFVJLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY3VzdG9tIG1lc3NhZ2UgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFjdGlvbiBib3hcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUFjdGlvbnM6IEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtW10gPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYXV0aG9yaXplZCBhY3Rpb25zIChpdCBjYW4gYmUgbGVzcyBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgZW5hYmxlZCBhY3Rpb25zKVxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRpc3BsYXllZEFjdGlvbnNDb3VudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAvKipcbiAgICogQW4gZXZlbnQgd2hpY2ggZW1pdHMgYHRydWVgIGlmIHRoZSBlZGl0IG1lc3NhZ2UgbW9kYWwgaXMgb3BlbiwgYW5kIGBmYWxzZWAgd2hlbiBpdCBpcyBjbG9zZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaXNFZGl0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBpc0VkaXRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgbWVzc2FnZUlucHV0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VJbnB1dENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlQWN0aW9uSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBtb2RhbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNb2RhbENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICB2aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zOiAoTWVzc2FnZUFjdGlvbkl0ZW0gfCBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbSlbXSA9XG4gICAgW107XG4gIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlQWN0aW9uSXRlbXM6IE1lc3NhZ2VBY3Rpb25JdGVtW107XG4gIEBWaWV3Q2hpbGQoJ21vZGFsQ29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgbW9kYWxDb250ZW50ITogVGVtcGxhdGVSZWY8dm9pZD47XG4gIHByaXZhdGUgc2VuZE1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubWVzc2FnZUFjdGlvbkl0ZW1zID0gW1xuICAgICAge1xuICAgICAgICBhY3Rpb25OYW1lOiAncXVvdGUnLFxuICAgICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LlJlcGx5JyxcbiAgICAgICAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UpID0+XG4gICAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5zZWxlY3RNZXNzYWdlVG9RdW90ZShtZXNzYWdlKSxcbiAgICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3F1b3RlLW1lc3NhZ2UnKSAhPT0gLTEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb25OYW1lOiAncGluJyxcbiAgICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT5cbiAgICAgICAgICBtZXNzYWdlLnBpbm5lZCA/ICdzdHJlYW1DaGF0LlVucGluJyA6ICdzdHJlYW1DaGF0LlBpbicsXG4gICAgICAgIGFjdGlvbkhhbmRsZXI6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKSA9PlxuICAgICAgICAgIG1lc3NhZ2UucGlubmVkXG4gICAgICAgICAgICA/IHRoaXMuY2hhbm5lbFNlcnZpY2UudW5waW5NZXNzYWdlKG1lc3NhZ2UpXG4gICAgICAgICAgICA6IHRoaXMuY2hhbm5lbFNlcnZpY2UucGluTWVzc2FnZShtZXNzYWdlKSxcbiAgICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3Bpbi1tZXNzYWdlJykgIT09IC0xLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uTmFtZTogJ2ZsYWcnLFxuICAgICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkZsYWcnLFxuICAgICAgICBhY3Rpb25IYW5kbGVyOiBhc3luYyAobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmZsYWdNZXNzYWdlKG1lc3NhZ2UuaWQpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICAgJ3N0cmVhbUNoYXQuTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCcsXG4gICAgICAgICAgICAgICdzdWNjZXNzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIGFkZGluZyBmbGFnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzVmlzaWJsZTogKGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSwgaXNNaW5lOiBib29sZWFuKSA9PlxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2ZsYWctbWVzc2FnZScpICE9PSAtMSAmJiAhaXNNaW5lLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uTmFtZTogJ2VkaXQnLFxuICAgICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkVkaXQgTWVzc2FnZScsXG4gICAgICAgIGFjdGlvbkhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZy5lbWl0KHRydWUpO1xuICAgICAgICAgIHRoaXMuaXNFZGl0TW9kYWxPcGVuID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLCBpc01pbmU6IGJvb2xlYW4pID0+XG4gICAgICAgICAgKGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3VwZGF0ZS1vd24tbWVzc2FnZScpICE9PSAtMSAmJiBpc01pbmUpIHx8XG4gICAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZigndXBkYXRlLWFueS1tZXNzYWdlJykgIT09IC0xLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uTmFtZTogJ2RlbGV0ZScsXG4gICAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuRGVsZXRlJyxcbiAgICAgICAgYWN0aW9uSGFuZGxlcjogYXN5bmMgKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBkZWxldGluZyBtZXNzYWdlJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzVmlzaWJsZTogKGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSwgaXNNaW5lOiBib29sZWFuKSA9PlxuICAgICAgICAgICgoZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZGVsZXRlJykgIT09IC0xIHx8XG4gICAgICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUtb3duLW1lc3NhZ2UnKSAhPT0gLTEpICYmXG4gICAgICAgICAgICBpc01pbmUpIHx8XG4gICAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZGVsZXRlLWFueScpICE9PSAtMSB8fFxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2RlbGV0ZS1hbnktbWVzc2FnZScpICE9PSAtMSxcbiAgICAgIH0sXG4gICAgXTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlJCA9IHRoaXMuc2VuZE1lc3NhZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMuaXNNaW5lIHx8XG4gICAgICBjaGFuZ2VzLmVuYWJsZWRBY3Rpb25zIHx8XG4gICAgICBjaGFuZ2VzLm1lc3NhZ2UgfHxcbiAgICAgIGNoYW5nZXMuY3VzdG9tQWN0aW9uc1xuICAgICkge1xuICAgICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zID0gW1xuICAgICAgICAuLi50aGlzLm1lc3NhZ2VBY3Rpb25JdGVtcyxcbiAgICAgICAgLi4udGhpcy5jdXN0b21BY3Rpb25zLFxuICAgICAgXS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIGl0ZW0uaXNWaXNpYmxlKHRoaXMuZW5hYmxlZEFjdGlvbnMsIHRoaXMuaXNNaW5lLCB0aGlzLm1lc3NhZ2UhKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZGlzcGxheWVkQWN0aW9uc0NvdW50LmVtaXQodGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0aW9uTGFiZWwoXG4gICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAoKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UpID0+IHN0cmluZykgfCBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXkgPT09ICdzdHJpbmcnXG4gICAgICA/IGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleVxuICAgICAgOiBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXkodGhpcy5tZXNzYWdlISk7XG4gIH1cblxuICBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KFxuICAgIGl0ZW06IE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgKTogTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25IYW5kbGVyOiBpdGVtLmFjdGlvbkhhbmRsZXIsXG4gICAgICBpc01pbmU6IHRoaXMuaXNNaW5lLFxuICAgICAgYWN0aW9uTmFtZTogaXRlbS5hY3Rpb25OYW1lLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiBpdGVtLmFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSxcbiAgICB9O1xuICB9XG5cbiAgc2VuZENsaWNrZWQoKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZVN1YmplY3QubmV4dCgpO1xuICB9XG5cbiAgbW9kYWxDbG9zZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdGluZy5lbWl0KGZhbHNlKTtcbiAgfTtcblxuICBnZXRNZXNzYWdlSW5wdXRDb250ZXh0KCk6IE1lc3NhZ2VJbnB1dENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBtZXNzYWdlVXBkYXRlSGFuZGxlcjogdGhpcy5tb2RhbENsb3NlZCxcbiAgICAgIGlzRmlsZVVwbG9hZEVuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGFyZU1lbnRpb25zRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiB1bmRlZmluZWQsXG4gICAgICBtZW50aW9uU2NvcGU6IHVuZGVmaW5lZCxcbiAgICAgIG1vZGU6IHVuZGVmaW5lZCxcbiAgICAgIHNlbmRNZXNzYWdlJDogdGhpcy5zZW5kTWVzc2FnZSQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEVkaXRNb2RhbENvbnRleHQoKTogTW9kYWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmlzRWRpdE1vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+IHtcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc09wZW47XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRNb2RhbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsQ2xvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLm1vZGFsQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgdHJhY2tCeUFjdGlvbk5hbWUoXG4gICAgXzogbnVtYmVyLFxuICAgIGl0ZW06IE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgKSB7XG4gICAgcmV0dXJuIGl0ZW0uYWN0aW9uTmFtZTtcbiAgfVxufVxuIiwiPGRpdlxuICAjYWN0aW9uQm94XG4gIGRhdGEtdGVzdGlkPVwiYWN0aW9uLWJveFwiXG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3ggc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtYW5ndWxhclwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWJveC0tb3Blbl09XCJ0cnVlXCJcbj5cbiAgPHVsIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtczsgdHJhY2tCeTogdHJhY2tCeUFjdGlvbk5hbWVcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlQWN0aW9uc0JveEl0ZW1UZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlQWN0aW9uSXRlbTtcbiAgICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KGl0ZW0pXG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TWVzc2FnZUFjdGlvbkl0ZW1cbiAgbGV0LWFjdGlvbk5hbWU9XCJhY3Rpb25OYW1lXCJcbiAgbGV0LWFjdGlvbkhhbmRsZXI9XCJhY3Rpb25IYW5kbGVyXCJcbiAgbGV0LWFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleT1cImFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleVwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtLWJ1dHRvblwiXG4gICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiYWN0aW9uTmFtZSArICctYWN0aW9uJ1wiXG4gICAgKGNsaWNrKT1cImFjdGlvbkhhbmRsZXIobWVzc2FnZSwgaXNNaW5lKVwiXG4gID5cbiAgICA8bGkgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbVwiPlxuICAgICAge3sgZ2V0QWN0aW9uTGFiZWwoYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5KSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbGk+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1vZGFsVGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRNb2RhbDtcbiAgICBjb250ZXh0OiBnZXRFZGl0TW9kYWxDb250ZXh0KClcbiAgXCJcbj48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TW9kYWxcbiAgbGV0LWlzT3Blbj1cImlzT3BlblwiXG4gIGxldC1pc09wZW5DaGFuZ2VIYW5kbGVyPVwiaXNPcGVuQ2hhbmdlSGFuZGxlclwiXG4gIGxldC1jb250ZW50PVwiY29udGVudFwiXG4+XG4gIDxzdHJlYW0tbW9kYWxcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgKGlzT3BlbkNoYW5nZSk9XCJpc09wZW5DaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICA+XG4gIDwvc3RyZWFtLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RhbENvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLWZvcm1cIiAqbmdJZj1cImlzRWRpdE1vZGFsT3BlblwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgI2RlZmF1bHRJbnB1dFxuICAgICAgbGV0LW1lc3NhZ2VJbnB1dD1cIm1lc3NhZ2VcIlxuICAgICAgbGV0LW1lc3NhZ2VVcGRhdGVIYW5kbGVyPVwibWVzc2FnZVVwZGF0ZUhhbmRsZXJcIlxuICAgICAgbGV0LXNlbmRNZXNzYWdlJElucHV0PVwic2VuZE1lc3NhZ2UkXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLW1lc3NhZ2UtaW5wdXRcbiAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUlucHV0XCJcbiAgICAgICAgKG1lc3NhZ2VVcGRhdGUpPVwibWVzc2FnZVVwZGF0ZUhhbmRsZXIoKVwiXG4gICAgICAgIFtzZW5kTWVzc2FnZSRdPVwic2VuZE1lc3NhZ2UkSW5wdXRcIlxuICAgICAgPjwvc3RyZWFtLW1lc3NhZ2UtaW5wdXQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlSW5wdXRUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdElucHV0O1xuICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlSW5wdXRDb250ZXh0KClcbiAgICAgIFwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHN0cmVhbS1ub3RpZmljYXRpb24tbGlzdD48L3N0cmVhbS1ub3RpZmljYXRpb24tbGlzdD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZWFtLWZvcm0tZm9vdGVyXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXRlYW0tZm9ybS1mb290ZXItYW5ndWxhclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1mb3JtLW9wdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1jYW5jZWxcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZGFsQ2xvc2VkKClcIlxuICAgICAgICA+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5DYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2Utc2VuZFwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbmRDbGlja2VkKClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZW5kQ2xpY2tlZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHN0cmVhbUNoYXQuU2VuZFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBYTNDOztHQUVHO0FBTUgsTUFBTSxPQUFPLDBCQUEwQjtJQTJDckMsWUFDVSxpQkFBb0MsRUFDcEMsbUJBQXdDLEVBQ3hDLGNBQThCLEVBQ3RCLHNCQUE4QztRQUh0RCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ3RCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUE5Q2hFOzs7V0FHRztRQUNNLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDeEI7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBS3hCOztXQUVHO1FBQ00sbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFDdkM7O1dBRUc7UUFDTSxrQkFBYSxHQUE4QixFQUFFLENBQUM7UUFDdkQ7O1dBRUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0RTs7V0FFRztRQUNnQixjQUFTLEdBQUcs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OUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDcEI7WUFDSCxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQzNCLENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCLENBQ2YsQ0FBUyxFQUNULElBQWlEO1FBRWpELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOzt1SEF2TVUsMEJBQTBCOzJHQUExQiwwQkFBMEIsOGFDL0J2Qyw2cEdBaUhBOzJGRGxGYSwwQkFBMEI7a0JBTHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLHNDQUFzQztvQkFDbkQsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7NE1BTVUsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFJRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFJWSxTQUFTO3NCQUEzQixNQUFNO2dCQVlDLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtLFxuICBNZXNzYWdlQWN0aW9uQm94SXRlbUNvbnRleHQsXG4gIE1lc3NhZ2VBY3Rpb25JdGVtLFxuICBNZXNzYWdlSW5wdXRDb250ZXh0LFxuICBNb2RhbENvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4uL3R5cGVzJztcbi8qKlxuICogVGhlIGBNZXNzYWdlQWN0aW9uc0JveGAgY29tcG9uZW50IGRpc3BsYXlzIGEgbGlzdCBvZiBtZXNzYWdlIGFjdGlvbnMgKGkuZSBlZGl0KSwgdGhhdCBjYW4gYmUgb3BlbmVkIG9yIGNsb3NlZC4gWW91IGNhbiBmaW5kIHRoZSBbbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGFjdGlvbnNdKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkgaW4gdGhlIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlLWFjdGlvbnMtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGxpc3Qgc2hvdWxkIGJlIG9wZW5lZCBvciBjbG9zZWQuIEFkZGluZyBhIFVJIGVsZW1lbnQgdG8gb3BlbiBhbmQgY2xvc2UgdGhlIGxpc3QgaXMgdGhlIHBhcmVudCdzIGNvbXBvbmVudCByZXNwb25zaWJpbGl0eS5cbiAgICogQGRlcHJlY2F0ZWQgTm8gbmVlZCBmb3IgdGhpcyBzaW5jZSBbdGhlbWUtdjJdKC4uL3RoZW1pbmcvaW50cm9kdWN0aW9uLm1keClcbiAgICovXG4gIEBJbnB1dCgpIGlzT3BlbiA9IGZhbHNlO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBtZXNzYWdlIGFjdGlvbnMgYXJlIGJlbG9uZ2luZyB0byBhIG1lc3NhZ2UgdGhhdCB3YXMgc2VudCBieSB0aGUgY3VycmVudCB1c2VyIG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpIGlzTWluZSA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdGhlIGFjdGlvbnMgd2lsbCBiZSBleGVjdXRlZCBvblxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIFtjaGFubmVsIGNhcGFiaWxpdGllc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpIHRoYXQgYXJlIGVuYWJsZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIsIHRoZSBsaXN0IG9mIFtzdXBwb3J0ZWQgaW50ZXJhY3Rpb25zXSguLi9jb25jZXB0cy9tZXNzYWdlLWludGVyYWN0aW9ucy5tZHgpIGNhbiBiZSBmb3VuZCBpbiBvdXIgbWVzc2FnZSBpbnRlcmFjdGlvbiBndWlkZS4gVW5hdGhvcml6ZWQgYWN0aW9ucyB3b24ndCBiZSBkaXNwbGF5ZWQgb24gdGhlIFVJLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY3VzdG9tIG1lc3NhZ2UgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFjdGlvbiBib3hcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUFjdGlvbnM6IEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtW10gPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYXV0aG9yaXplZCBhY3Rpb25zIChpdCBjYW4gYmUgbGVzcyBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgZW5hYmxlZCBhY3Rpb25zKVxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRpc3BsYXllZEFjdGlvbnNDb3VudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAvKipcbiAgICogQW4gZXZlbnQgd2hpY2ggZW1pdHMgYHRydWVgIGlmIHRoZSBlZGl0IG1lc3NhZ2UgbW9kYWwgaXMgb3BlbiwgYW5kIGBmYWxzZWAgd2hlbiBpdCBpcyBjbG9zZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaXNFZGl0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBpc0VkaXRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgbWVzc2FnZUlucHV0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VJbnB1dENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlQWN0aW9uSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBtb2RhbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNb2RhbENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICB2aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zOiAoTWVzc2FnZUFjdGlvbkl0ZW0gfCBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbSlbXSA9XG4gICAgW107XG4gIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlQWN0aW9uSXRlbXM6IE1lc3NhZ2VBY3Rpb25JdGVtW107XG4gIEBWaWV3Q2hpbGQoJ21vZGFsQ29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgbW9kYWxDb250ZW50ITogVGVtcGxhdGVSZWY8dm9pZD47XG4gIHByaXZhdGUgc2VuZE1lc3NhZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubWVzc2FnZUFjdGlvbkl0ZW1zID0gW1xuICAgICAge1xuICAgICAgICBhY3Rpb25OYW1lOiAncXVvdGUnLFxuICAgICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LlJlcGx5JyxcbiAgICAgICAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UpID0+XG4gICAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5zZWxlY3RNZXNzYWdlVG9RdW90ZShtZXNzYWdlKSxcbiAgICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3F1b3RlLW1lc3NhZ2UnKSAhPT0gLTEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb25OYW1lOiAncGluJyxcbiAgICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT5cbiAgICAgICAgICBtZXNzYWdlLnBpbm5lZCA/ICdzdHJlYW1DaGF0LlVucGluJyA6ICdzdHJlYW1DaGF0LlBpbicsXG4gICAgICAgIGFjdGlvbkhhbmRsZXI6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKSA9PlxuICAgICAgICAgIG1lc3NhZ2UucGlubmVkXG4gICAgICAgICAgICA/IHRoaXMuY2hhbm5lbFNlcnZpY2UudW5waW5NZXNzYWdlKG1lc3NhZ2UpXG4gICAgICAgICAgICA6IHRoaXMuY2hhbm5lbFNlcnZpY2UucGluTWVzc2FnZShtZXNzYWdlKSxcbiAgICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3Bpbi1tZXNzYWdlJykgIT09IC0xLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uTmFtZTogJ2ZsYWcnLFxuICAgICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkZsYWcnLFxuICAgICAgICBhY3Rpb25IYW5kbGVyOiBhc3luYyAobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmZsYWdNZXNzYWdlKG1lc3NhZ2UuaWQpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICAgJ3N0cmVhbUNoYXQuTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCcsXG4gICAgICAgICAgICAgICdzdWNjZXNzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIGFkZGluZyBmbGFnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzVmlzaWJsZTogKGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSwgaXNNaW5lOiBib29sZWFuKSA9PlxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2ZsYWctbWVzc2FnZScpICE9PSAtMSAmJiAhaXNNaW5lLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uTmFtZTogJ2VkaXQnLFxuICAgICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkVkaXQgTWVzc2FnZScsXG4gICAgICAgIGFjdGlvbkhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZy5lbWl0KHRydWUpO1xuICAgICAgICAgIHRoaXMuaXNFZGl0TW9kYWxPcGVuID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLCBpc01pbmU6IGJvb2xlYW4pID0+XG4gICAgICAgICAgKGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3VwZGF0ZS1vd24tbWVzc2FnZScpICE9PSAtMSAmJiBpc01pbmUpIHx8XG4gICAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZigndXBkYXRlLWFueS1tZXNzYWdlJykgIT09IC0xLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uTmFtZTogJ2RlbGV0ZScsXG4gICAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuRGVsZXRlJyxcbiAgICAgICAgYWN0aW9uSGFuZGxlcjogYXN5bmMgKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBkZWxldGluZyBtZXNzYWdlJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzVmlzaWJsZTogKGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSwgaXNNaW5lOiBib29sZWFuKSA9PlxuICAgICAgICAgICgoZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZGVsZXRlJykgIT09IC0xIHx8XG4gICAgICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUtb3duLW1lc3NhZ2UnKSAhPT0gLTEpICYmXG4gICAgICAgICAgICBpc01pbmUpIHx8XG4gICAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZGVsZXRlLWFueScpICE9PSAtMSB8fFxuICAgICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2RlbGV0ZS1hbnktbWVzc2FnZScpICE9PSAtMSxcbiAgICAgIH0sXG4gICAgXTtcbiAgICB0aGlzLnNlbmRNZXNzYWdlJCA9IHRoaXMuc2VuZE1lc3NhZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXMuaXNNaW5lIHx8XG4gICAgICBjaGFuZ2VzLmVuYWJsZWRBY3Rpb25zIHx8XG4gICAgICBjaGFuZ2VzLm1lc3NhZ2UgfHxcbiAgICAgIGNoYW5nZXMuY3VzdG9tQWN0aW9uc1xuICAgICkge1xuICAgICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zID0gW1xuICAgICAgICAuLi50aGlzLm1lc3NhZ2VBY3Rpb25JdGVtcyxcbiAgICAgICAgLi4udGhpcy5jdXN0b21BY3Rpb25zLFxuICAgICAgXS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIGl0ZW0uaXNWaXNpYmxlKHRoaXMuZW5hYmxlZEFjdGlvbnMsIHRoaXMuaXNNaW5lLCB0aGlzLm1lc3NhZ2UhKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZGlzcGxheWVkQWN0aW9uc0NvdW50LmVtaXQodGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0aW9uTGFiZWwoXG4gICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAoKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UpID0+IHN0cmluZykgfCBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXkgPT09ICdzdHJpbmcnXG4gICAgICA/IGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleVxuICAgICAgOiBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXkodGhpcy5tZXNzYWdlISk7XG4gIH1cblxuICBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KFxuICAgIGl0ZW06IE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgKTogTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25IYW5kbGVyOiBpdGVtLmFjdGlvbkhhbmRsZXIsXG4gICAgICBpc01pbmU6IHRoaXMuaXNNaW5lLFxuICAgICAgYWN0aW9uTmFtZTogaXRlbS5hY3Rpb25OYW1lLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiBpdGVtLmFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSxcbiAgICB9O1xuICB9XG5cbiAgc2VuZENsaWNrZWQoKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZVN1YmplY3QubmV4dCgpO1xuICB9XG5cbiAgbW9kYWxDbG9zZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdGluZy5lbWl0KGZhbHNlKTtcbiAgfTtcblxuICBnZXRNZXNzYWdlSW5wdXRDb250ZXh0KCk6IE1lc3NhZ2VJbnB1dENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBtZXNzYWdlVXBkYXRlSGFuZGxlcjogdGhpcy5tb2RhbENsb3NlZCxcbiAgICAgIGlzRmlsZVVwbG9hZEVuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGFyZU1lbnRpb25zRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiB1bmRlZmluZWQsXG4gICAgICBtZW50aW9uU2NvcGU6IHVuZGVmaW5lZCxcbiAgICAgIG1vZGU6IHVuZGVmaW5lZCxcbiAgICAgIHNlbmRNZXNzYWdlJDogdGhpcy5zZW5kTWVzc2FnZSQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEVkaXRNb2RhbENvbnRleHQoKTogTW9kYWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmlzRWRpdE1vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+IHtcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc09wZW47XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRNb2RhbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsQ2xvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLm1vZGFsQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgdHJhY2tCeUFjdGlvbk5hbWUoXG4gICAgXzogbnVtYmVyLFxuICAgIGl0ZW06IE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgKSB7XG4gICAgcmV0dXJuIGl0ZW0uYWN0aW9uTmFtZTtcbiAgfVxufVxuIiwiPGRpdlxuICAjYWN0aW9uQm94XG4gIGRhdGEtdGVzdGlkPVwiYWN0aW9uLWJveFwiXG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3ggc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtYW5ndWxhclwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWJveC0tb3Blbl09XCJ0cnVlXCJcbiAgKm5nSWY9XCJpc09wZW5cIlxuPlxuICA8dWwgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3RcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zOyB0cmFja0J5OiB0cmFja0J5QWN0aW9uTmFtZVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VBY3Rpb25zQm94SXRlbVRlbXBsYXRlJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2VBY3Rpb25JdGVtO1xuICAgICAgICAgIGNvbnRleHQ6IGdldE1lc3NhZ2VBY3Rpb25UZW1wbGF0ZUNvbnRleHQoaXRlbSlcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC91bD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgI2RlZmF1bHRNZXNzYWdlQWN0aW9uSXRlbVxuICBsZXQtYWN0aW9uTmFtZT1cImFjdGlvbk5hbWVcIlxuICBsZXQtYWN0aW9uSGFuZGxlcj1cImFjdGlvbkhhbmRsZXJcIlxuICBsZXQtYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5PVwiYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5XCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW0tYnV0dG9uXCJcbiAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJhY3Rpb25OYW1lICsgJy1hY3Rpb24nXCJcbiAgICAoY2xpY2spPVwiYWN0aW9uSGFuZGxlcihtZXNzYWdlLCBpc01pbmUpXCJcbiAgPlxuICAgIDxsaSBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtXCI+XG4gICAgICB7eyBnZXRBY3Rpb25MYWJlbChhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXkpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9saT5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyXG4gICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubW9kYWxUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdE1vZGFsO1xuICAgIGNvbnRleHQ6IGdldEVkaXRNb2RhbENvbnRleHQoKVxuICBcIlxuPjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGVcbiAgI2RlZmF1bHRNb2RhbFxuICBsZXQtaXNPcGVuPVwiaXNPcGVuXCJcbiAgbGV0LWlzT3BlbkNoYW5nZUhhbmRsZXI9XCJpc09wZW5DaGFuZ2VIYW5kbGVyXCJcbiAgbGV0LWNvbnRlbnQ9XCJjb250ZW50XCJcbj5cbiAgPHN0cmVhbS1tb2RhbFxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICAqbmdJZj1cImlzT3BlblwiXG4gICAgKGlzT3BlbkNoYW5nZSk9XCJpc09wZW5DaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICA+XG4gIDwvc3RyZWFtLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RhbENvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLWZvcm1cIiAqbmdJZj1cImlzRWRpdE1vZGFsT3BlblwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgI2RlZmF1bHRJbnB1dFxuICAgICAgbGV0LW1lc3NhZ2VJbnB1dD1cIm1lc3NhZ2VcIlxuICAgICAgbGV0LW1lc3NhZ2VVcGRhdGVIYW5kbGVyPVwibWVzc2FnZVVwZGF0ZUhhbmRsZXJcIlxuICAgICAgbGV0LXNlbmRNZXNzYWdlJElucHV0PVwic2VuZE1lc3NhZ2UkXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLW1lc3NhZ2UtaW5wdXRcbiAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUlucHV0XCJcbiAgICAgICAgKG1lc3NhZ2VVcGRhdGUpPVwibWVzc2FnZVVwZGF0ZUhhbmRsZXIoKVwiXG4gICAgICAgIFtzZW5kTWVzc2FnZSRdPVwic2VuZE1lc3NhZ2UkSW5wdXRcIlxuICAgICAgPjwvc3RyZWFtLW1lc3NhZ2UtaW5wdXQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlSW5wdXRUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdElucHV0O1xuICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlSW5wdXRDb250ZXh0KClcbiAgICAgIFwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHN0cmVhbS1ub3RpZmljYXRpb24tbGlzdD48L3N0cmVhbS1ub3RpZmljYXRpb24tbGlzdD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZWFtLWZvcm0tZm9vdGVyXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXRlYW0tZm9ybS1mb290ZXItYW5ndWxhclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1mb3JtLW9wdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1jYW5jZWxcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZGFsQ2xvc2VkKClcIlxuICAgICAgICA+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5DYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2Utc2VuZFwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbmRDbGlja2VkKClcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZW5kQ2xpY2tlZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHN0cmVhbUNoYXQuU2VuZFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|