simpo-component-library 3.6.571 → 3.6.573
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/esm2022/lib/sections/video-grid-section/video-grid-section.component.mjs +11 -4
- package/esm2022/lib/sections/video-showcase/video-showcase.component.mjs +4 -3
- package/fesm2022/simpo-component-library.mjs +12 -4
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +1 -1
- package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +1 -1
- package/lib/ecommerce/sections/schemes/schemes.component.d.ts +1 -1
- package/lib/elements/link-editor/link-editor.component.d.ts +1 -1
- package/lib/sections/banner-carousel/banner-carousel.component.d.ts +2 -2
- package/lib/sections/carousel-banner/carousel-banner.component.d.ts +1 -1
- package/lib/sections/contact-us/contact-us.component.d.ts +1 -1
- package/lib/sections/faq-section/faq-section.component.d.ts +1 -1
- package/lib/sections/image-section/image-section.component.d.ts +2 -2
- package/lib/sections/logo-showcase/logo-showcase.component.d.ts +2 -2
- package/lib/sections/new-testimonials/new-testimonials.component.d.ts +1 -1
- package/lib/sections/pricing-section/pricing-section.component.d.ts +2 -2
- package/lib/sections/video-grid-section/video-grid-section.component.d.ts +2 -0
- package/lib/sections/video-showcase/video-showcase.component.d.ts +1 -0
- package/package.json +1 -1
- package/simpo-component-library-3.6.573.tgz +0 -0
- package/simpo-component-library-3.6.571.tgz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Input, ViewChild } from '@angular/core';
|
|
1
|
+
import { Component, HostListener, Input, ViewChild } from '@angular/core';
|
|
2
2
|
import BaseSection from '../BaseSection';
|
|
3
3
|
import { SimpoComponentModule } from '../../components/index';
|
|
4
4
|
import { OrderedItems } from '../../ecommerce/styles/OrderedItems.modal';
|
|
@@ -51,10 +51,14 @@ export class VideoGridSectionComponent extends BaseSection {
|
|
|
51
51
|
this.atEnd = false;
|
|
52
52
|
}
|
|
53
53
|
ngOnInit() {
|
|
54
|
+
this.getScreenSize();
|
|
54
55
|
this.content = this.data?.content;
|
|
55
56
|
this.style = this.data?.styles;
|
|
56
57
|
this.deleteSelected = this.delete;
|
|
57
58
|
}
|
|
59
|
+
getScreenSize() {
|
|
60
|
+
this.screenWidth = window.innerWidth;
|
|
61
|
+
}
|
|
58
62
|
get stylesLayout() {
|
|
59
63
|
return { ...this.style?.layout };
|
|
60
64
|
}
|
|
@@ -198,7 +202,7 @@ export class VideoGridSectionComponent extends BaseSection {
|
|
|
198
202
|
}
|
|
199
203
|
}
|
|
200
204
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VideoGridSectionComponent, deps: [{ token: i1.MessageService }, { token: i2.CartService }, { token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: VideoGridSectionComponent, isStandalone: true, selector: "simpo-video-grid-section", inputs: { data: "data", index: "index", edit: "edit", customClass: "customClass", delete: "delete", nextComponentColor: "nextComponentColor" }, providers: [MessageService], viewQueries: [{ propertyName: "videogrid", first: true, predicate: ["videogrid"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div #mainContainer [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div class=\"row w-100\" [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\"\r\n [ngStyle]=\"style?.fullWidth ? {'padding': '0px'} : {}\">\r\n <!-- [ngClass]=\"{'w-100':style?.gridStyle === 'Style2'}\" -->\r\n <div *ngFor=\"let text of data?.content?.inputText\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\">\r\n <ng-container *ngIf=\"edit || (text.value && text.value.length > 0)\">\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style1'\"> -->\r\n <button class=\"scroll-btn left p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollLeft()\"\r\n [disabled]=\"atStart\"><mat-icon>keyboard_arrow_left</mat-icon>\r\n </button>\r\n <div class=\"main-image-section d-flex position-relative\" [class.row]=\"style?.direction == 'ROW' \"\r\n [class.wrap-scroll]=\"style?.direction == 'ROW'\" [class.flex-wrap]=\"style?.direction == 'COLUMN'\"\r\n [id]=\"data?.id\" #videogrid [style.justifyContent]=\"getJustifyContent()\" (scroll)=\"onScroll()\">\r\n <div class=\"video-section p-3 w-auto d-flex flex-column gap-2 align-items-center\"\r\n *ngFor=\"let video of content?.listItem?.data\" [simpoColumnDirective]=\"style?.size\"\r\n [id]=\"data?.id\"\r\n [attr.style]=\"style?.removeGaps ? 'padding: 0px !important; margin: 0px !important;' : {}\">\r\n <ng-container *ngIf=\"content?.display?.showText\">\r\n <div class=\"w-fit position-relative d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\"\r\n class=\"h-100 cursor-pointer\" [muted]=\"style?.muteVideos\" autoplay\r\n (click)=\"openFullscreen(videoEl)\" loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20px\">\r\n </div>\r\n <simpo-text-editor [(value)]=\"video.video.description\"\r\n [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n <ng-container *ngIf=\"!content?.display?.showText\">\r\n <div class=\"video-wrapper position-relative\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\" autoplay loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <div class=\"position-absolute products-cards w-100 p-3 d-flex gap-3 overflow-x-auto cursor-pointer\"\r\n *ngIf=\"video?.video?.products?.length > 0\">\r\n <ng-container *ngFor=\"let product of video.video.products\">\r\n <div class=\"product-badge\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <img [src]=\"product?.itemImages[0].imgUrl\" alt=\"Ring\"\r\n class=\"product-img\" /></a>\r\n <div class=\"product-info\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <div class=\"product-details d-flex flex-column gap-1\">\r\n <div class=\"product-title\">\r\n {{product.name.length > 16 ? product.name.trim().slice(0,15)\r\n +\r\n '...' :\r\n product.name }}\r\n </div>\r\n <div class=\"product-price d-flex align-items-start\">\r\n \u20B9{{product?.price.sellingPrice}}\r\n </div>\r\n </div>\r\n </a>\r\n <div class=\"d-flex align-items-center justify-content-center gap-1\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/700072c1770270395432favourite-svgrepo-com.svg\"\r\n style=\"width: 18px;\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\"\r\n *ngIf=\"!product.whislist\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/304116c1770274132910favourite-svgrepo-com_(1).svg\"\r\n style=\"width: 18px;\" *ngIf=\"product.whislist\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/695144c1770270669546cart-shopping-svgrepo-com.svg\"\r\n style=\"width:19px\"\r\n (click)=\"addItemToCart($event, product, 'ADD')\"\r\n *ngIf=\"product.quantity <= 0\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795342c1770275383344shopping-cart-fill-svgrepo-com.svg\"\r\n style=\"width:19px\" *ngIf=\"product.quantity >= 1\"\r\n (click)=\"addItemToCart($event, product, 'SUBSTRACT')\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n class=\"position-absolute d-flex align-items-center justify-content-center\"\r\n style=\"padding: 9px;top: 47%;left: 40%;background: lightgrey;border-radius: 50%;background: rgba(240, 240, 240, 0.6);backdrop-filter: blur(4px);-webkit-backdrop-filter: blur(4px);\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/935060c1770214072755play-svgrepo-com.svg\"\r\n class=\"\" style=\"width:25px;margin-left:1.5px\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <button class=\"scroll-btn right p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollRight()\"\r\n [disabled]=\"atEnd\"><mat-icon>keyboard_arrow_right</mat-icon>\r\n </button>\r\n <!-- </ng-container> -->\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style2'\">\r\n <div class=\"video-grid-section h-100\" [class.remove-gap]=\"style?.removeGaps\"\r\n [class.p-0]=\"style?.fullWidth\">\r\n <div class=\"video-section\" *ngFor=\"let video of content?.listItem?.data\" style=\"min-width:300px\"\r\n [ngClass]=\"{'position-relative d-flex align-items-center justify-content-center' : !video?.video?.isVideoPlaying && style?.hoverPlay}\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id+video.video.id\" [simpoObjectPosition]=\"video.video.position\"\r\n [src]=\"video.video.url\" loading=\"lazy\" class=\"h-100\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl,video.video)\"\r\n [muted]=\"style?.muteVideos\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl,video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{'cursor-pointer' : style?.hoverPlay}\"></video>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20%;height:20%;max-width:40px\">\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>", styles: [".total-container{height:auto;position:relative}.main-image-section{margin-bottom:1.5rem}.mb-1{margin-bottom:1.5rem!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.wrap-scroll{overflow:scroll;flex-wrap:nowrap}@media screen and (min-width : 1200px){.grid{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:auto;grid-gap:5px}.video-grid-section{display:grid;grid-auto-flow:column;grid-template-rows:repeat(2,170px);column-gap:10px;row-gap:10px;max-height:340px;overflow-x:scroll;overflow-y:hidden;grid-auto-columns:1fr;width:100%}.grid img:first-child:last-child{grid-column:1 / span 2}.grid img:first-child:nth-last-child(2),.grid img:nth-child(2):last-child{grid-column:span 1;height:100%}.grid img:nth-child(3n+1):not(:last-child){grid-column:1;grid-row:span 2;height:100%}.grid img:nth-child(3n+2){grid-column:2}.grid img:nth-child(3n+3){grid-column:2;align-self:end}.grid img:nth-child(3n+4){grid-column:1 / span 2}}.remove-gap{grid-gap:0!important}@media screen and (min-width: 760px){.cards{padding-bottom:24px}}.main-image-container{width:100%}@media screen and (max-width: 760px){.scroll-btn{display:none!important}}.right-column-container{display:flex;flex-direction:column;height:100%;padding:0}.image-half-height{height:50%!important;flex:1}.image-half-height:first-child{margin-bottom:2px}.scroll-btn{position:absolute;top:50%;z-index:10;font-size:18px;width:36px!important;height:36px!important;border-radius:50%;border:none}.w-fit{width:fit-content!important}.video-section{text-align:center}.video-section .video-wrapper{width:270px;aspect-ratio:9 / 16;margin:0 auto;position:relative}.video-section video{width:100%;height:100%;object-fit:cover}.scroll-btn.left{left:8px}.scroll-btn.right{right:8px}.product-badge{display:flex;align-items:center;gap:12px;padding:5px 10px;background:#fff9;border-radius:10px;width:90%;box-shadow:0 6px 18px #00000026;transition:background .3s ease,box-shadow .3s ease;min-width:230px}.product-badge:hover{background:#f0f0f0e6;box-shadow:0 8px 22px #0003}.product-img{width:42px;height:42px;object-fit:contain;flex-shrink:0}.product-info{display:flex;gap:4px}.product-title{font-size:12px;font-weight:500;color:#1a1a1a;max-width:210px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.product-link{text-decoration:none;color:inherit}.products-cards{bottom:0;overflow-x:scroll}.product-price{font-size:16px;font-weight:700;color:#000}\n"], dependencies: [{ kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label"], outputs: ["valueChange"] }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i4.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i5.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i6.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type:
|
|
205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: VideoGridSectionComponent, isStandalone: true, selector: "simpo-video-grid-section", inputs: { data: "data", index: "index", edit: "edit", customClass: "customClass", delete: "delete", nextComponentColor: "nextComponentColor" }, host: { listeners: { "window: resize": "getScreenSize($event)" } }, providers: [MessageService], viewQueries: [{ propertyName: "videogrid", first: true, predicate: ["videogrid"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div #mainContainer [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div class=\"row w-100\" [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\"\r\n [ngStyle]=\"style?.fullWidth ? {'padding': '0px'} : {}\"\r\n [ngClass]=\"{'justify-content-center' : screenWidth < 475}\">\r\n <!-- [ngClass]=\"{'w-100':style?.gridStyle === 'Style2'}\" -->\r\n <div *ngFor=\"let text of data?.content?.inputText\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\">\r\n <ng-container *ngIf=\"edit || (text.value && text.value.length > 0)\">\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style1'\"> -->\r\n <button class=\"scroll-btn left p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollLeft()\"\r\n [disabled]=\"atStart\"><mat-icon>keyboard_arrow_left</mat-icon>\r\n </button>\r\n <div class=\"main-image-section d-flex position-relative\" [class.row]=\"style?.direction == 'ROW' \"\r\n [class.wrap-scroll]=\"style?.direction == 'ROW'\" [class.flex-wrap]=\"style?.direction == 'COLUMN'\"\r\n [id]=\"data?.id\" #videogrid [style.justifyContent]=\"getJustifyContent()\" (scroll)=\"onScroll()\"\r\n [ngClass]=\"{'flex-column' : screenWidth < 475}\">\r\n <div class=\"video-section p-3 w-auto d-flex flex-column gap-2 align-items-center\"\r\n *ngFor=\"let video of content?.listItem?.data\" [simpoColumnDirective]=\"style?.size\"\r\n [id]=\"data?.id\"\r\n [attr.style]=\"style?.removeGaps ? 'padding: 0px !important; margin: 0px !important;' : {}\">\r\n <ng-container *ngIf=\"content?.display?.showText\">\r\n <div class=\"w-fit position-relative d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\"\r\n class=\"h-100 cursor-pointer\" [muted]=\"style?.muteVideos\" autoplay\r\n (click)=\"openFullscreen(videoEl)\" loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20px\">\r\n </div>\r\n <simpo-text-editor [(value)]=\"video.video.description\"\r\n [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n <ng-container *ngIf=\"!content?.display?.showText\">\r\n <div class=\"video-wrapper position-relative\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\" autoplay loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <div class=\"position-absolute products-cards w-100 p-3 d-flex gap-3 overflow-x-auto cursor-pointer\"\r\n *ngIf=\"video?.video?.products?.length > 0\">\r\n <ng-container *ngFor=\"let product of video.video.products\">\r\n <div class=\"product-badge\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <img [src]=\"product?.itemImages[0].imgUrl\" alt=\"Ring\"\r\n class=\"product-img\" /></a>\r\n <div class=\"product-info\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <div class=\"product-details d-flex flex-column gap-1\">\r\n <div class=\"product-title\">\r\n {{product.name.length > 16 ? product.name.trim().slice(0,15)\r\n +\r\n '...' :\r\n product.name }}\r\n </div>\r\n <div class=\"product-price d-flex align-items-start\">\r\n \u20B9{{product?.price.sellingPrice}}\r\n </div>\r\n </div>\r\n </a>\r\n <div class=\"d-flex align-items-center justify-content-center gap-1\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/700072c1770270395432favourite-svgrepo-com.svg\"\r\n style=\"width: 18px;\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\"\r\n *ngIf=\"!product.whislist\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/304116c1770274132910favourite-svgrepo-com_(1).svg\"\r\n style=\"width: 18px;\" *ngIf=\"product.whislist\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/695144c1770270669546cart-shopping-svgrepo-com.svg\"\r\n style=\"width:19px\"\r\n (click)=\"addItemToCart($event, product, 'ADD')\"\r\n *ngIf=\"product.quantity <= 0\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795342c1770275383344shopping-cart-fill-svgrepo-com.svg\"\r\n style=\"width:19px\" *ngIf=\"product.quantity >= 1\"\r\n (click)=\"addItemToCart($event, product, 'SUBSTRACT')\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n class=\"position-absolute d-flex align-items-center justify-content-center\"\r\n style=\"padding: 9px;top: 47%;left: 40%;background: lightgrey;border-radius: 50%;background: rgba(240, 240, 240, 0.6);backdrop-filter: blur(4px);-webkit-backdrop-filter: blur(4px);\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/935060c1770214072755play-svgrepo-com.svg\"\r\n class=\"\" style=\"width:25px;margin-left:1.5px\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <button class=\"scroll-btn right p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollRight()\"\r\n [disabled]=\"atEnd\"><mat-icon>keyboard_arrow_right</mat-icon>\r\n </button>\r\n <!-- </ng-container> -->\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style2'\">\r\n <div class=\"video-grid-section h-100\" [class.remove-gap]=\"style?.removeGaps\"\r\n [class.p-0]=\"style?.fullWidth\">\r\n <div class=\"video-section\" *ngFor=\"let video of content?.listItem?.data\" style=\"min-width:300px\"\r\n [ngClass]=\"{'position-relative d-flex align-items-center justify-content-center' : !video?.video?.isVideoPlaying && style?.hoverPlay}\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id+video.video.id\" [simpoObjectPosition]=\"video.video.position\"\r\n [src]=\"video.video.url\" loading=\"lazy\" class=\"h-100\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl,video.video)\"\r\n [muted]=\"style?.muteVideos\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl,video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{'cursor-pointer' : style?.hoverPlay}\"></video>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20%;height:20%;max-width:40px\">\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>", styles: [".total-container{height:auto;position:relative}.main-image-section{margin-bottom:1.5rem}.mb-1{margin-bottom:1.5rem!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.wrap-scroll{overflow:scroll;flex-wrap:nowrap}@media screen and (min-width : 1200px){.grid{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:auto;grid-gap:5px}.video-grid-section{display:grid;grid-auto-flow:column;grid-template-rows:repeat(2,170px);column-gap:10px;row-gap:10px;max-height:340px;overflow-x:scroll;overflow-y:hidden;grid-auto-columns:1fr;width:100%}.grid img:first-child:last-child{grid-column:1 / span 2}.grid img:first-child:nth-last-child(2),.grid img:nth-child(2):last-child{grid-column:span 1;height:100%}.grid img:nth-child(3n+1):not(:last-child){grid-column:1;grid-row:span 2;height:100%}.grid img:nth-child(3n+2){grid-column:2}.grid img:nth-child(3n+3){grid-column:2;align-self:end}.grid img:nth-child(3n+4){grid-column:1 / span 2}}.remove-gap{grid-gap:0!important}@media screen and (min-width: 760px){.cards{padding-bottom:24px}}.main-image-container{width:100%}@media screen and (max-width: 760px){.scroll-btn{display:none!important}}.right-column-container{display:flex;flex-direction:column;height:100%;padding:0}.image-half-height{height:50%!important;flex:1}.image-half-height:first-child{margin-bottom:2px}.scroll-btn{position:absolute;top:50%;z-index:10;font-size:18px;width:36px!important;height:36px!important;border-radius:50%;border:none}.w-fit{width:fit-content!important}.video-section{text-align:center}.video-section .video-wrapper{width:270px;aspect-ratio:9 / 16;margin:0 auto;position:relative}.video-section video{width:100%;height:100%;object-fit:cover}.scroll-btn.left{left:8px}.scroll-btn.right{right:8px}.product-badge{display:flex;align-items:center;gap:12px;padding:5px 10px;background:#fff9;border-radius:10px;width:90%;box-shadow:0 6px 18px #00000026;transition:background .3s ease,box-shadow .3s ease;min-width:230px}.product-badge:hover{background:#f0f0f0e6;box-shadow:0 8px 22px #0003}.product-img{width:42px;height:42px;object-fit:contain;flex-shrink:0}.product-info{display:flex;gap:4px}.product-title{font-size:12px;font-weight:500;color:#1a1a1a;max-width:210px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.product-link{text-decoration:none;color:inherit}.products-cards{bottom:0;overflow-x:scroll}.product-price{font-size:16px;font-weight:700;color:#000}\n"], dependencies: [{ kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label"], outputs: ["valueChange"] }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i4.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i5.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i6.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type:
|
|
202
206
|
//Directives
|
|
203
207
|
AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: ContentTitleDirective, selector: "[simpoContentTitleSpace]", inputs: ["simpoContentTitleSpace"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: VideoDirectiveDirective, selector: "[simpoVideoDirective]", inputs: ["simpoVideoDirective"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
204
208
|
}
|
|
@@ -234,7 +238,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
234
238
|
ObjectPositionDirective,
|
|
235
239
|
VideoDirectiveDirective,
|
|
236
240
|
MatIcon
|
|
237
|
-
], providers: [MessageService], template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div #mainContainer [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div class=\"row w-100\" [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\"\r\n [ngStyle]=\"style?.fullWidth ? {'padding': '0px'} : {}\">\r\n <!-- [ngClass]=\"{'w-100':style?.gridStyle === 'Style2'}\" -->\r\n <div *ngFor=\"let text of data?.content?.inputText\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\">\r\n <ng-container *ngIf=\"edit || (text.value && text.value.length > 0)\">\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style1'\"> -->\r\n <button class=\"scroll-btn left p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollLeft()\"\r\n [disabled]=\"atStart\"><mat-icon>keyboard_arrow_left</mat-icon>\r\n </button>\r\n <div class=\"main-image-section d-flex position-relative\" [class.row]=\"style?.direction == 'ROW' \"\r\n [class.wrap-scroll]=\"style?.direction == 'ROW'\" [class.flex-wrap]=\"style?.direction == 'COLUMN'\"\r\n [id]=\"data?.id\" #videogrid [style.justifyContent]=\"getJustifyContent()\" (scroll)=\"onScroll()\">\r\n <div class=\"video-section p-3 w-auto d-flex flex-column gap-2 align-items-center\"\r\n *ngFor=\"let video of content?.listItem?.data\" [simpoColumnDirective]=\"style?.size\"\r\n [id]=\"data?.id\"\r\n [attr.style]=\"style?.removeGaps ? 'padding: 0px !important; margin: 0px !important;' : {}\">\r\n <ng-container *ngIf=\"content?.display?.showText\">\r\n <div class=\"w-fit position-relative d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\"\r\n class=\"h-100 cursor-pointer\" [muted]=\"style?.muteVideos\" autoplay\r\n (click)=\"openFullscreen(videoEl)\" loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20px\">\r\n </div>\r\n <simpo-text-editor [(value)]=\"video.video.description\"\r\n [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n <ng-container *ngIf=\"!content?.display?.showText\">\r\n <div class=\"video-wrapper position-relative\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\" autoplay loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <div class=\"position-absolute products-cards w-100 p-3 d-flex gap-3 overflow-x-auto cursor-pointer\"\r\n *ngIf=\"video?.video?.products?.length > 0\">\r\n <ng-container *ngFor=\"let product of video.video.products\">\r\n <div class=\"product-badge\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <img [src]=\"product?.itemImages[0].imgUrl\" alt=\"Ring\"\r\n class=\"product-img\" /></a>\r\n <div class=\"product-info\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <div class=\"product-details d-flex flex-column gap-1\">\r\n <div class=\"product-title\">\r\n {{product.name.length > 16 ? product.name.trim().slice(0,15)\r\n +\r\n '...' :\r\n product.name }}\r\n </div>\r\n <div class=\"product-price d-flex align-items-start\">\r\n \u20B9{{product?.price.sellingPrice}}\r\n </div>\r\n </div>\r\n </a>\r\n <div class=\"d-flex align-items-center justify-content-center gap-1\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/700072c1770270395432favourite-svgrepo-com.svg\"\r\n style=\"width: 18px;\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\"\r\n *ngIf=\"!product.whislist\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/304116c1770274132910favourite-svgrepo-com_(1).svg\"\r\n style=\"width: 18px;\" *ngIf=\"product.whislist\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/695144c1770270669546cart-shopping-svgrepo-com.svg\"\r\n style=\"width:19px\"\r\n (click)=\"addItemToCart($event, product, 'ADD')\"\r\n *ngIf=\"product.quantity <= 0\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795342c1770275383344shopping-cart-fill-svgrepo-com.svg\"\r\n style=\"width:19px\" *ngIf=\"product.quantity >= 1\"\r\n (click)=\"addItemToCart($event, product, 'SUBSTRACT')\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n class=\"position-absolute d-flex align-items-center justify-content-center\"\r\n style=\"padding: 9px;top: 47%;left: 40%;background: lightgrey;border-radius: 50%;background: rgba(240, 240, 240, 0.6);backdrop-filter: blur(4px);-webkit-backdrop-filter: blur(4px);\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/935060c1770214072755play-svgrepo-com.svg\"\r\n class=\"\" style=\"width:25px;margin-left:1.5px\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <button class=\"scroll-btn right p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollRight()\"\r\n [disabled]=\"atEnd\"><mat-icon>keyboard_arrow_right</mat-icon>\r\n </button>\r\n <!-- </ng-container> -->\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style2'\">\r\n <div class=\"video-grid-section h-100\" [class.remove-gap]=\"style?.removeGaps\"\r\n [class.p-0]=\"style?.fullWidth\">\r\n <div class=\"video-section\" *ngFor=\"let video of content?.listItem?.data\" style=\"min-width:300px\"\r\n [ngClass]=\"{'position-relative d-flex align-items-center justify-content-center' : !video?.video?.isVideoPlaying && style?.hoverPlay}\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id+video.video.id\" [simpoObjectPosition]=\"video.video.position\"\r\n [src]=\"video.video.url\" loading=\"lazy\" class=\"h-100\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl,video.video)\"\r\n [muted]=\"style?.muteVideos\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl,video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{'cursor-pointer' : style?.hoverPlay}\"></video>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20%;height:20%;max-width:40px\">\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>", styles: [".total-container{height:auto;position:relative}.main-image-section{margin-bottom:1.5rem}.mb-1{margin-bottom:1.5rem!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.wrap-scroll{overflow:scroll;flex-wrap:nowrap}@media screen and (min-width : 1200px){.grid{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:auto;grid-gap:5px}.video-grid-section{display:grid;grid-auto-flow:column;grid-template-rows:repeat(2,170px);column-gap:10px;row-gap:10px;max-height:340px;overflow-x:scroll;overflow-y:hidden;grid-auto-columns:1fr;width:100%}.grid img:first-child:last-child{grid-column:1 / span 2}.grid img:first-child:nth-last-child(2),.grid img:nth-child(2):last-child{grid-column:span 1;height:100%}.grid img:nth-child(3n+1):not(:last-child){grid-column:1;grid-row:span 2;height:100%}.grid img:nth-child(3n+2){grid-column:2}.grid img:nth-child(3n+3){grid-column:2;align-self:end}.grid img:nth-child(3n+4){grid-column:1 / span 2}}.remove-gap{grid-gap:0!important}@media screen and (min-width: 760px){.cards{padding-bottom:24px}}.main-image-container{width:100%}@media screen and (max-width: 760px){.scroll-btn{display:none!important}}.right-column-container{display:flex;flex-direction:column;height:100%;padding:0}.image-half-height{height:50%!important;flex:1}.image-half-height:first-child{margin-bottom:2px}.scroll-btn{position:absolute;top:50%;z-index:10;font-size:18px;width:36px!important;height:36px!important;border-radius:50%;border:none}.w-fit{width:fit-content!important}.video-section{text-align:center}.video-section .video-wrapper{width:270px;aspect-ratio:9 / 16;margin:0 auto;position:relative}.video-section video{width:100%;height:100%;object-fit:cover}.scroll-btn.left{left:8px}.scroll-btn.right{right:8px}.product-badge{display:flex;align-items:center;gap:12px;padding:5px 10px;background:#fff9;border-radius:10px;width:90%;box-shadow:0 6px 18px #00000026;transition:background .3s ease,box-shadow .3s ease;min-width:230px}.product-badge:hover{background:#f0f0f0e6;box-shadow:0 8px 22px #0003}.product-img{width:42px;height:42px;object-fit:contain;flex-shrink:0}.product-info{display:flex;gap:4px}.product-title{font-size:12px;font-weight:500;color:#1a1a1a;max-width:210px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.product-link{text-decoration:none;color:inherit}.products-cards{bottom:0;overflow-x:scroll}.product-price{font-size:16px;font-weight:700;color:#000}\n"] }]
|
|
241
|
+
], providers: [MessageService], template: "<section [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div #mainContainer [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div class=\"row w-100\" [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\"\r\n [ngStyle]=\"style?.fullWidth ? {'padding': '0px'} : {}\"\r\n [ngClass]=\"{'justify-content-center' : screenWidth < 475}\">\r\n <!-- [ngClass]=\"{'w-100':style?.gridStyle === 'Style2'}\" -->\r\n <div *ngFor=\"let text of data?.content?.inputText\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\">\r\n <ng-container *ngIf=\"edit || (text.value && text.value.length > 0)\">\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style1'\"> -->\r\n <button class=\"scroll-btn left p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollLeft()\"\r\n [disabled]=\"atStart\"><mat-icon>keyboard_arrow_left</mat-icon>\r\n </button>\r\n <div class=\"main-image-section d-flex position-relative\" [class.row]=\"style?.direction == 'ROW' \"\r\n [class.wrap-scroll]=\"style?.direction == 'ROW'\" [class.flex-wrap]=\"style?.direction == 'COLUMN'\"\r\n [id]=\"data?.id\" #videogrid [style.justifyContent]=\"getJustifyContent()\" (scroll)=\"onScroll()\"\r\n [ngClass]=\"{'flex-column' : screenWidth < 475}\">\r\n <div class=\"video-section p-3 w-auto d-flex flex-column gap-2 align-items-center\"\r\n *ngFor=\"let video of content?.listItem?.data\" [simpoColumnDirective]=\"style?.size\"\r\n [id]=\"data?.id\"\r\n [attr.style]=\"style?.removeGaps ? 'padding: 0px !important; margin: 0px !important;' : {}\">\r\n <ng-container *ngIf=\"content?.display?.showText\">\r\n <div class=\"w-fit position-relative d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\"\r\n class=\"h-100 cursor-pointer\" [muted]=\"style?.muteVideos\" autoplay\r\n (click)=\"openFullscreen(videoEl)\" loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20px\">\r\n </div>\r\n <simpo-text-editor [(value)]=\"video.video.description\"\r\n [editable]=\"edit || false\"></simpo-text-editor>\r\n </ng-container>\r\n <ng-container *ngIf=\"!content?.display?.showText\">\r\n <div class=\"video-wrapper position-relative\" [id]=\"data?.id\">\r\n <ng-container *ngIf=\"style?.autoPlay && !style?.hoverPlay;else normalVideo\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\" autoplay loop></video>\r\n </ng-container>\r\n <ng-template #normalVideo>\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id + video.video.id\" [src]=\"video.video.url\" class=\"h-100\"\r\n [muted]=\"style?.muteVideos\" [simpoVideoDirective]=\"style?.image\"\r\n [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl, video.video)\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl, video.video)\"\r\n (click)=\"openFullVideo(video.video)\"\r\n [ngClass]=\"{ 'cursor-pointer': style?.hoverPlay }\"></video>\r\n </ng-template>\r\n <div class=\"position-absolute products-cards w-100 p-3 d-flex gap-3 overflow-x-auto cursor-pointer\"\r\n *ngIf=\"video?.video?.products?.length > 0\">\r\n <ng-container *ngFor=\"let product of video.video.products\">\r\n <div class=\"product-badge\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <img [src]=\"product?.itemImages[0].imgUrl\" alt=\"Ring\"\r\n class=\"product-img\" /></a>\r\n <div class=\"product-info\">\r\n <a [href]=\"product.redirectionUrl\" class=\"product-link\">\r\n <div class=\"product-details d-flex flex-column gap-1\">\r\n <div class=\"product-title\">\r\n {{product.name.length > 16 ? product.name.trim().slice(0,15)\r\n +\r\n '...' :\r\n product.name }}\r\n </div>\r\n <div class=\"product-price d-flex align-items-start\">\r\n \u20B9{{product?.price.sellingPrice}}\r\n </div>\r\n </div>\r\n </a>\r\n <div class=\"d-flex align-items-center justify-content-center gap-1\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/700072c1770270395432favourite-svgrepo-com.svg\"\r\n style=\"width: 18px;\"\r\n (click)=\"toggleItemToFav($event, product, 'ADD')\"\r\n *ngIf=\"!product.whislist\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/304116c1770274132910favourite-svgrepo-com_(1).svg\"\r\n style=\"width: 18px;\" *ngIf=\"product.whislist\"\r\n (click)=\"toggleItemToFav($event, product, 'REMOVE')\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/695144c1770270669546cart-shopping-svgrepo-com.svg\"\r\n style=\"width:19px\"\r\n (click)=\"addItemToCart($event, product, 'ADD')\"\r\n *ngIf=\"product.quantity <= 0\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/795342c1770275383344shopping-cart-fill-svgrepo-com.svg\"\r\n style=\"width:19px\" *ngIf=\"product.quantity >= 1\"\r\n (click)=\"addItemToCart($event, product, 'SUBSTRACT')\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n class=\"position-absolute d-flex align-items-center justify-content-center\"\r\n style=\"padding: 9px;top: 47%;left: 40%;background: lightgrey;border-radius: 50%;background: rgba(240, 240, 240, 0.6);backdrop-filter: blur(4px);-webkit-backdrop-filter: blur(4px);\">\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/935060c1770214072755play-svgrepo-com.svg\"\r\n class=\"\" style=\"width:25px;margin-left:1.5px\">\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <button class=\"scroll-btn right p-0 d-flex align-items-center justify-content-center\"\r\n *ngIf=\"style?.direction === 'ROW' && isOverflowing\" (click)=\"scrollRight()\"\r\n [disabled]=\"atEnd\"><mat-icon>keyboard_arrow_right</mat-icon>\r\n </button>\r\n <!-- </ng-container> -->\r\n <!-- <ng-container *ngIf=\"style?.gridStyle == 'Style2'\">\r\n <div class=\"video-grid-section h-100\" [class.remove-gap]=\"style?.removeGaps\"\r\n [class.p-0]=\"style?.fullWidth\">\r\n <div class=\"video-section\" *ngFor=\"let video of content?.listItem?.data\" style=\"min-width:300px\"\r\n [ngClass]=\"{'position-relative d-flex align-items-center justify-content-center' : !video?.video?.isVideoPlaying && style?.hoverPlay}\">\r\n <video loading=\"lazy\" [simpoCorner]=\"style?.corners\" [id]=\"data?.id\" #videoEl\r\n [class]=\"data?.id+video.video.id\" [simpoObjectPosition]=\"video.video.position\"\r\n [src]=\"video.video.url\" loading=\"lazy\" class=\"h-100\" [controls]=\"!style?.hoverPlay\"\r\n (mouseenter)=\"style?.hoverPlay && onVideoHover(videoEl,video.video)\"\r\n [muted]=\"style?.muteVideos\"\r\n (mouseleave)=\"style?.hoverPlay && onVideoLeave(videoEl,video.video)\"\r\n (click)=\"openFullscreen(videoEl)\"\r\n [ngClass]=\"{'cursor-pointer' : style?.hoverPlay}\"></video>\r\n <img src=\"https://d2z9497xp8xb12.cloudfront.net/prod-images/172648c1769671647159play-fill-svgrepo-com.svg\"\r\n class=\"position-absolute\" *ngIf=\"!video?.video?.isVideoPlaying && style?.hoverPlay\"\r\n style=\"width:20%;height:20%;max-width:40px\">\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>", styles: [".total-container{height:auto;position:relative}.main-image-section{margin-bottom:1.5rem}.mb-1{margin-bottom:1.5rem!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.wrap-scroll{overflow:scroll;flex-wrap:nowrap}@media screen and (min-width : 1200px){.grid{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:auto;grid-gap:5px}.video-grid-section{display:grid;grid-auto-flow:column;grid-template-rows:repeat(2,170px);column-gap:10px;row-gap:10px;max-height:340px;overflow-x:scroll;overflow-y:hidden;grid-auto-columns:1fr;width:100%}.grid img:first-child:last-child{grid-column:1 / span 2}.grid img:first-child:nth-last-child(2),.grid img:nth-child(2):last-child{grid-column:span 1;height:100%}.grid img:nth-child(3n+1):not(:last-child){grid-column:1;grid-row:span 2;height:100%}.grid img:nth-child(3n+2){grid-column:2}.grid img:nth-child(3n+3){grid-column:2;align-self:end}.grid img:nth-child(3n+4){grid-column:1 / span 2}}.remove-gap{grid-gap:0!important}@media screen and (min-width: 760px){.cards{padding-bottom:24px}}.main-image-container{width:100%}@media screen and (max-width: 760px){.scroll-btn{display:none!important}}.right-column-container{display:flex;flex-direction:column;height:100%;padding:0}.image-half-height{height:50%!important;flex:1}.image-half-height:first-child{margin-bottom:2px}.scroll-btn{position:absolute;top:50%;z-index:10;font-size:18px;width:36px!important;height:36px!important;border-radius:50%;border:none}.w-fit{width:fit-content!important}.video-section{text-align:center}.video-section .video-wrapper{width:270px;aspect-ratio:9 / 16;margin:0 auto;position:relative}.video-section video{width:100%;height:100%;object-fit:cover}.scroll-btn.left{left:8px}.scroll-btn.right{right:8px}.product-badge{display:flex;align-items:center;gap:12px;padding:5px 10px;background:#fff9;border-radius:10px;width:90%;box-shadow:0 6px 18px #00000026;transition:background .3s ease,box-shadow .3s ease;min-width:230px}.product-badge:hover{background:#f0f0f0e6;box-shadow:0 8px 22px #0003}.product-img{width:42px;height:42px;object-fit:contain;flex-shrink:0}.product-info{display:flex;gap:4px}.product-title{font-size:12px;font-weight:500;color:#1a1a1a;max-width:210px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.product-link{text-decoration:none;color:inherit}.products-cards{bottom:0;overflow-x:scroll}.product-price{font-size:16px;font-weight:700;color:#000}\n"] }]
|
|
238
242
|
}], ctorParameters: () => [{ type: i1.MessageService }, { type: i2.CartService }, { type: i3.DialogService }], propDecorators: { videogrid: [{
|
|
239
243
|
type: ViewChild,
|
|
240
244
|
args: ['videogrid', { static: false }]
|
|
@@ -250,5 +254,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
250
254
|
type: Input
|
|
251
255
|
}], nextComponentColor: [{
|
|
252
256
|
type: Input
|
|
257
|
+
}], getScreenSize: [{
|
|
258
|
+
type: HostListener,
|
|
259
|
+
args: ["window: resize", ["$event"]]
|
|
253
260
|
}] } });
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tZ3JpZC1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvdmlkZW8tZ3JpZC1zZWN0aW9uL3ZpZGVvLWdyaWQtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3ZpZGVvLWdyaWQtc2VjdGlvbi92aWRlby1ncmlkLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDO0FBR3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFD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Qjt3QkFDdkIsdUJBQXVCO3dCQUN2QixPQUFPO3FCQUNSLGFBQ1UsQ0FBQyxjQUFjLENBQUM7eUlBWWdCLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDaEMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IFZpZGVvR3JpZENvbnRlbnRNb2RhbCwgVmlkZW9HcmlkU2VjdGlvbk1vZGVsLCBWaWRlb0dyaWRTdHlsZXNNb2RlbCB9IGZyb20gJy4vdmlkZW8tZ3JpZC1zZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZE1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IE9yZGVyZWRJdGVtcyB9IGZyb20gJy4uLy4uL2Vjb21tZXJjZS9zdHlsZXMvT3JkZXJlZEl0ZW1zLm1vZGFsJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpbXBvRWxlbWVudHNNb2R1bGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWZpci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1hbGlnbm1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9mb290ZXItbGF5b3V0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudFRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtdGl0bGUtc3BhY2luZy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTUEFDSU5HIH0gZnJvbSAnLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEltYWdlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVmlkZW9EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvdmlkZW8tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvV3JhcENvbW50YWluZXIgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvd3JhcC1jb250YWluZXJzLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgSXRlbVZhcmlhbnQsIFByb2R1Y3QgfSBmcm9tICdwcm9qZWN0cy9zaW1wby11aS9zcmMvcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmlkZW9TaG93Y2FzZUNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZGVvLXNob3djYXNlL3ZpZGVvLXNob3djYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tdmlkZW8tZ3JpZC1zZWN0aW9uJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFRleHRFZGl0b3JDb21wb25lbnQsXHJcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAvL0RpcmVjdGl2ZXNcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29udGFpbmVyRml0RGlyZWN0aXZlLFxyXG4gICAgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXHJcbiAgICBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXHJcbiAgICBDb250ZW50VGl0bGVEaXJlY3RpdmUsXHJcbiAgICBJbWFnZUVkaXRvckRpcmVjdGl2ZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9XcmFwQ29tbnRhaW5lcixcclxuICAgIE9iamVjdFBvc2l0aW9uRGlyZWN0aXZlLFxyXG4gICAgVmlkZW9EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBNYXRJY29uXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZGVvLWdyaWQtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3ZpZGVvLWdyaWQtc2VjdGlvbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlkZW9HcmlkU2VjdGlvbkNvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ3ZpZGVvZ3JpZCcsIHsgc3RhdGljOiBmYWxzZSB9KSB2aWRlb2dyaWQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBASW5wdXQoKSBkYXRhPzogVmlkZW9HcmlkU2VjdGlvbk1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xyXG4gIGNvbnRlbnQ/OiBWaWRlb0dyaWRDb250ZW50TW9kYWw7XHJcbiAgc3R5bGU/OiBWaWRlb0dyaWRTdHlsZXNNb2RlbDtcclxuICBwcml2YXRlIFVTRVJfV0lTSExJU1Q6IE9yZGVyZWRJdGVtc1tdID0gW107XHJcbiAgcHJpdmF0ZSBVU0VSX0NBUlQ6IE9yZGVyZWRJdGVtc1tdID0gW107XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmRlbGV0ZVNlbGVjdGVkID0gdGhpcy5kZWxldGVcclxuICB9XHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xyXG4gIH1cclxuICBnZXQgaGVhZGluZ1NwYWNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGU/LmxheW91dD8uaGVhZGluZ1NwYWNpbmcgYXMgU1BBQ0lORztcclxuICB9XHJcbiAgaXNPdmVyZmxvd2luZyA9IGZhbHNlOyBhdFN0YXJ0ID0gdHJ1ZTsgYXRFbmQgPSBmYWxzZTtcclxuICBwcml2YXRlIGdldCBzY3JvbGxTdGVwKCkgeyByZXR1cm4gTWF0aC5yb3VuZCgodGhpcy52aWRlb2dyaWQ/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWVudFdpZHRoIHx8IDMwMCkgKiAwLjgpOyB9XHJcbiAgcHJpdmF0ZSB1cGRhdGVFZGdlcygpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy52aWRlb2dyaWQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIWVsKSByZXR1cm47XHJcbiAgICB0aGlzLmF0U3RhcnQgPSBlbC5zY3JvbGxMZWZ0IDw9IDU7XHJcbiAgICB0aGlzLmF0RW5kID0gZWwuc2Nyb2xsTGVmdCArIGVsLmNsaWVudFdpZHRoID49IGVsLnNjcm9sbFdpZHRoIC0gNTtcclxuICB9XHJcbiAgc2Nyb2xsTGVmdCgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy52aWRlb2dyaWQ/Lm5hdGl2ZUVsZW1lbnQ7IGlmICghZWwpIHJldHVybjtcclxuICAgIGVsLnNjcm9sbEJ5KHsgbGVmdDogLXRoaXMuc2Nyb2xsU3RlcCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZUVkZ2VzKCksIDMwMCk7XHJcbiAgfVxyXG4gIGdldEp1c3RpZnlDb250ZW50KCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLnZpZGVvZ3JpZD8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghZWwpIHJldHVybiAnJztcclxuICAgIHRoaXMuaXNPdmVyZmxvd2luZyA9IGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XHJcbiAgICBpZiAodGhpcy5pc092ZXJmbG93aW5nKSB7XHJcbiAgICAgIHJldHVybiAnZmxleC1zdGFydCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIG9uU2Nyb2xsKCkgeyB0aGlzLnVwZGF0ZUVkZ2VzKCk7IH1cclxuXHJcbiAgc2Nyb2xsUmlnaHQoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMudmlkZW9ncmlkPy5uYXRpdmVFbGVtZW50OyBpZiAoIWVsKSByZXR1cm47XHJcbiAgICBlbC5zY3JvbGxCeSh7IGxlZnQ6IHRoaXMuc2Nyb2xsU3RlcCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZUVkZ2VzKCksIDMwMCk7XHJcbiAgfVxyXG4gIG9uVmlkZW9Ib3Zlcih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgdmlkZW9FbGVtZW50PzogYW55KSB7XHJcbiAgICB2aWRlby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICB2aWRlby5wbGF5KCkuY2F0Y2goKCkgPT4geyB9KTtcclxuICAgIHZpZGVvRWxlbWVudC5pc1ZpZGVvUGxheWluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblZpZGVvTGVhdmUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHZpZGVvRWxlbWVudD86IGFueSkge1xyXG4gICAgdmlkZW8ucGF1c2UoKTtcclxuICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgIHZpZGVvRWxlbWVudC5pc1ZpZGVvUGxheWluZyA9IGZhbHNlO1xyXG4gIH1cclxuICBvcGVuRnVsbFZpZGVvKHZpZGVvOiBhbnkpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuRGlhbG9nKFZpZGVvU2hvd2Nhc2VDb21wb25lbnQsXHJcbiAgICAgICcxMDB2aCcsXHJcbiAgICAgICcxMDB2dycsXHJcbiAgICAgIHtcclxuICAgICAgICB2aWRlb3M6IHRoaXMuY29udGVudD8ubGlzdEl0ZW0uZGF0YSxcclxuICAgICAgICBpbml0aWF0ZVZpZGVvSWQ6IHZpZGVvLmlkXHJcbiAgICAgIH0sXHJcbiAgICAgICdkaWFsb2ctdHJhbnNwYXJlbnQnXHJcbiAgICApXHJcbiAgfVxyXG4gIG9wZW5GdWxsc2NyZWVuKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KSB7XHJcbiAgICBpZiAodGhpcy5zdHlsZT8uaG92ZXJQbGF5KSB7XHJcbiAgICAgIGlmICh2aWRlby5yZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICAgIHZpZGVvLnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoKHZpZGVvIGFzIGFueSkud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAvLyBTYWZhcmlcclxuICAgICAgICAodmlkZW8gYXMgYW55KS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKCh2aWRlbyBhcyBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICAvLyBJRTExXHJcbiAgICAgICAgKHZpZGVvIGFzIGFueSkubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBPcHRpb25hbDogcGxheSB3aGVuIGZ1bGxzY3JlZW4gb3BlbnNcclxuICAgICAgdmlkZW8ucGxheSgpLmNhdGNoKCgpID0+IHsgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEl0ZW1WYXJpZW50KHByb2R1Y3Q6IFByb2R1Y3QsIHZhcmllbnRJZDogc3RyaW5nKTogSXRlbVZhcmlhbnQgfCBudWxsIHtcclxuICAgIGxldCBzZWxlY3RlZFZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm9kdWN0Py5pdGVtVmFyaWFudD8uZm9yRWFjaCgodmFyaWVudDogSXRlbVZhcmlhbnQpID0+IHtcclxuICAgICAgaWYgKHZhcmllbnQudmFyaWFudElkID09PSB2YXJpZW50SWQpXHJcbiAgICAgICAgc2VsZWN0ZWRWYXJpZW50ID0gdmFyaWVudDtcclxuICAgIH0pXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYXJpZW50O1xyXG4gIH1cclxuICB0b2dnbGVJdGVtVG9GYXYoZXZlbnQ6IFBvaW50ZXJFdmVudCB8IE1vdXNlRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1JFTU9WRScpIHtcclxuICAgIGlmICh0eXBlID09ICdBREQnKSB7XHJcbiAgICAgIHByb2R1Y3Qud2hpc2xpc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdXaXNobGlzdCcsIGRldGFpbDogJ0l0ZW0gYWRkZWQgdG8geW91ciB3aXNobGlzdCcgfSk7XHJcbiAgICAgIGlmIChwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICAgIGlmIChpdGVtVmFyaWVudCkge1xyXG4gICAgICAgICAgaXRlbVZhcmllbnQud2lzaGxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9GYXZvdXJpdGUocHJvZHVjdCBhcyBQcm9kdWN0LCBpdGVtVmFyaWVudC52YXJpYW50SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0Zhdm91cml0ZShwcm9kdWN0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHByb2R1Y3Qud2hpc2xpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2luZm8nLCBzdW1tYXJ5OiAnV2lzaGxpc3QnLCBkZXRhaWw6ICdJdGVtIHJlbW92ZWQgZnJvbSB5b3VyIHdpc2hsaXN0JyB9KTtcclxuICAgICAgdGhpcy5jYXJ0U2VydmljZS5yZW1vdmVJdGVtRnJvbUZhdm91cml0ZShwcm9kdWN0LnZhcmllbnRJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvZHVjdC53aGlzbGlzdCkge1xyXG4gICAgICB0aGlzLlVTRVJfV0lTSExJU1Q/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX1dJU0hMSVNUID0gdGhpcy5VU0VSX1dJU0hMSVNUPy5maWx0ZXIoKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4gaXRlbS52YXJpZW50SWQgIT0gcHJvZHVjdC52YXJpZW50SWQpID8/IFtdO1xyXG4gICAgfVxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIGlzSXRlbU91dE9mU3RvY2socHJvZHVjdDogUHJvZHVjdCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHByb2R1Y3QuaXRlbUludmVudG9yeT8ub3BlbmluZ1N0b2NrID09IDA7XHJcbiAgfVxyXG4gIGFkZEl0ZW1Ub0NhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCB8IE1vdXNlRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QsIHR5cGU6ICdBREQnIHwgJ1NVQlNUUkFDVCcpIHtcclxuICAgIGlmICh0aGlzLmlzSXRlbU91dE9mU3RvY2socHJvZHVjdCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnQ2FydCcsIGRldGFpbDogJ0l0ZW0gaXMgbm90IGF2YWlsYWJsZSBhcyBvZiBub3cuIFdlIHdpbGwgbm90aWZ5IHlvdSBvbmNlIGF2YWlsYWJsZScgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHByb2R1Y3QucXVhbnRpdHkgKz0gKHR5cGUgPT0gJ0FERCcgPyAxIDogLTEpO1xyXG4gICAgaWYgKHByb2R1Y3Q/Lml0ZW1WYXJpYW50Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgaXRlbVZhcmllbnQ6IEl0ZW1WYXJpYW50IHwgbnVsbCA9IHRoaXMuZ2V0SXRlbVZhcmllbnQocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICBpdGVtVmFyaWVudC5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9DYXJ0KHByb2R1Y3QsIGl0ZW1WYXJpZW50LnZhcmlhbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0KTtcclxuICAgIH1cclxuICAgIGlmIChwcm9kdWN0LnF1YW50aXR5KSB7XHJcbiAgICAgIGxldCBpc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQ/LmZvckVhY2goKGl0ZW06IE9yZGVyZWRJdGVtcykgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnZhcmllbnRJZCA9PSBwcm9kdWN0LnZhcmllbnRJZCkge1xyXG4gICAgICAgICAgaXRlbS5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHk7XHJcbiAgICAgICAgICBpc1ByZXNlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKCFpc1ByZXNlbnQpXHJcbiAgICAgICAgdGhpcy5VU0VSX0NBUlQ/LnB1c2gobmV3IE9yZGVyZWRJdGVtcyhwcm9kdWN0LCBwcm9kdWN0LnZhcmllbnRJZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5VU0VSX0NBUlQgPSB0aGlzLlVTRVJfQ0FSVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZT8uYmFja2dyb3VuZFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCJcclxuICAgIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIj5cclxuICAgIDxkaXYgI21haW5Db250YWluZXIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZT8uYmFja2dyb3VuZFwiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQm9yZGVyXT1cInN0eWxlPy5ib3JkZXJcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGU/LmxheW91dFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHctMTAwXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQW5pbWF0aW9uXT1cInN0eWxlPy5hbmltYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwic3R5bGU/LmZ1bGxXaWR0aCA/IHsncGFkZGluZyc6ICcwcHgnfSA6IHt9XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFtuZ0NsYXNzXT1cInsndy0xMDAnOnN0eWxlPy5ncmlkU3R5bGUgPT09ICdTdHlsZTInfVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGV4dCBvZiBkYXRhPy5jb250ZW50Py5pbnB1dFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZy1sYXJnZSBjb250ZW50LXNpZGVcIiBbc2ltcG9Db250ZW50VGl0bGVTcGFjZV09XCJoZWFkaW5nU3BhY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXQgfHwgICh0ZXh0LnZhbHVlICYmIHRleHQudmFsdWUubGVuZ3RoID4gMClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaW1wby10ZXh0LWVkaXRvciBbKHZhbHVlKV09XCJ0ZXh0LnZhbHVlXCIgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIj48L3NpbXBvLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlPy5ncmlkU3R5bGUgPT0gJ1N0eWxlMSdcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Nyb2xsLWJ0biBsZWZ0IHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3R5bGU/LmRpcmVjdGlvbiA9PT0gJ1JPVycgJiYgaXNPdmVyZmxvd2luZ1wiIChjbGljayk9XCJzY3JvbGxMZWZ0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhdFN0YXJ0XCI+PG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1pbWFnZS1zZWN0aW9uIGQtZmxleCBwb3NpdGlvbi1yZWxhdGl2ZVwiIFtjbGFzcy5yb3ddPVwic3R5bGU/LmRpcmVjdGlvbiA9PSAnUk9XJyBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy53cmFwLXNjcm9sbF09XCJzdHlsZT8uZGlyZWN0aW9uID09ICdST1cnXCIgW2NsYXNzLmZsZXgtd3JhcF09XCJzdHlsZT8uZGlyZWN0aW9uID09ICdDT0xVTU4nXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIiAjdmlkZW9ncmlkIFtzdHlsZS5qdXN0aWZ5Q29udGVudF09XCJnZXRKdXN0aWZ5Q29udGVudCgpXCIgKHNjcm9sbCk9XCJvblNjcm9sbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZGVvLXNlY3Rpb24gcC0zIHctYXV0byBkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZpZGVvIG9mIGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhXCIgW3NpbXBvQ29sdW1uRGlyZWN0aXZlXT1cInN0eWxlPy5zaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3R5bGVdPVwic3R5bGU/LnJlbW92ZUdhcHMgPyAncGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMHB4ICFpbXBvcnRhbnQ7JyA6IHt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5kaXNwbGF5Py5zaG93VGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZml0IHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZT8uYXV0b1BsYXkgJiYgIXN0eWxlPy5ob3ZlclBsYXk7ZWxzZSBub3JtYWxWaWRlb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gbG9hZGluZz1cImxhenlcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGU/LmNvcm5lcnNcIiBbaWRdPVwiZGF0YT8uaWRcIiAjdmlkZW9FbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkICsgdmlkZW8udmlkZW8uaWRcIiBbc3JjXT1cInZpZGVvLnZpZGVvLnVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTAwIGN1cnNvci1wb2ludGVyXCIgW211dGVkXT1cInN0eWxlPy5tdXRlVmlkZW9zXCIgYXV0b3BsYXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbHNjcmVlbih2aWRlb0VsKVwiIGxvb3A+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbFZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gbG9hZGluZz1cImxhenlcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGU/LmNvcm5lcnNcIiBbaWRdPVwiZGF0YT8uaWRcIiAjdmlkZW9FbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkICsgdmlkZW8udmlkZW8uaWRcIiBbc3JjXT1cInZpZGVvLnZpZGVvLnVybFwiIGNsYXNzPVwiaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211dGVkXT1cInN0eWxlPy5tdXRlVmlkZW9zXCIgW2NvbnRyb2xzXT1cIiFzdHlsZT8uaG92ZXJQbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInN0eWxlPy5ob3ZlclBsYXkgJiYgb25WaWRlb0hvdmVyKHZpZGVvRWwsIHZpZGVvLnZpZGVvKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJzdHlsZT8uaG92ZXJQbGF5ICYmIG9uVmlkZW9MZWF2ZSh2aWRlb0VsLCB2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GdWxsc2NyZWVuKHZpZGVvRWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2N1cnNvci1wb2ludGVyJzogc3R5bGU/LmhvdmVyUGxheSB9XCI+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy8xNzI2NDhjMTc2OTY3MTY0NzE1OXBsYXktZmlsbC1zdmdyZXBvLWNvbS5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCIgKm5nSWY9XCIhdmlkZW8/LnZpZGVvPy5pc1ZpZGVvUGxheWluZyAmJiBzdHlsZT8uaG92ZXJQbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoyMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaW1wby10ZXh0LWVkaXRvciBbKHZhbHVlKV09XCJ2aWRlby52aWRlby5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIj48L3NpbXBvLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZW50Py5kaXNwbGF5Py5zaG93VGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZGVvLXdyYXBwZXIgcG9zaXRpb24tcmVsYXRpdmVcIiBbaWRdPVwiZGF0YT8uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmF1dG9QbGF5ICYmICFzdHlsZT8uaG92ZXJQbGF5O2Vsc2Ugbm9ybWFsVmlkZW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGxvYWRpbmc9XCJsYXp5XCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCIgW2lkXT1cImRhdGE/LmlkXCIgI3ZpZGVvRWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCArIHZpZGVvLnZpZGVvLmlkXCIgW3NyY109XCJ2aWRlby52aWRlby51cmxcIiBjbGFzcz1cImgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdXRlZF09XCJzdHlsZT8ubXV0ZVZpZGVvc1wiIFtzaW1wb1ZpZGVvRGlyZWN0aXZlXT1cInN0eWxlPy5pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbHNdPVwic3R5bGU/LmhvdmVyUGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzdHlsZT8uaG92ZXJQbGF5ICYmIG9uVmlkZW9Ib3Zlcih2aWRlb0VsLCB2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwic3R5bGU/LmhvdmVyUGxheSAmJiBvblZpZGVvTGVhdmUodmlkZW9FbCwgdmlkZW8udmlkZW8pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbFZpZGVvKHZpZGVvLnZpZGVvKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjdXJzb3ItcG9pbnRlcic6IHN0eWxlPy5ob3ZlclBsYXkgfVwiIGF1dG9wbGF5IGxvb3A+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbFZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gbG9hZGluZz1cImxhenlcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGU/LmNvcm5lcnNcIiBbaWRdPVwiZGF0YT8uaWRcIiAjdmlkZW9FbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkICsgdmlkZW8udmlkZW8uaWRcIiBbc3JjXT1cInZpZGVvLnZpZGVvLnVybFwiIGNsYXNzPVwiaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211dGVkXT1cInN0eWxlPy5tdXRlVmlkZW9zXCIgW3NpbXBvVmlkZW9EaXJlY3RpdmVdPVwic3R5bGU/LmltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sc109XCIhc3R5bGU/LmhvdmVyUGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzdHlsZT8uaG92ZXJQbGF5ICYmIG9uVmlkZW9Ib3Zlcih2aWRlb0VsLCB2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwic3R5bGU/LmhvdmVyUGxheSAmJiBvblZpZGVvTGVhdmUodmlkZW9FbCwgdmlkZW8udmlkZW8pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbFZpZGVvKHZpZGVvLnZpZGVvKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjdXJzb3ItcG9pbnRlcic6IHN0eWxlPy5ob3ZlclBsYXkgfVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgcHJvZHVjdHMtY2FyZHMgdy0xMDAgcC0zIGQtZmxleCBnYXAtMyBvdmVyZmxvdy14LWF1dG8gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpZGVvPy52aWRlbz8ucHJvZHVjdHM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiB2aWRlby52aWRlby5wcm9kdWN0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtYmFkZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJwcm9kdWN0LnJlZGlyZWN0aW9uVXJsXCIgY2xhc3M9XCJwcm9kdWN0LWxpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInByb2R1Y3Q/Lml0ZW1JbWFnZXNbMF0uaW1nVXJsXCIgYWx0PVwiUmluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3QtaW1nXCIgLz48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJwcm9kdWN0LnJlZGlyZWN0aW9uVXJsXCIgY2xhc3M9XCJwcm9kdWN0LWxpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWRldGFpbHMgZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3twcm9kdWN0Lm5hbWUubGVuZ3RoID4gMTYgPyBwcm9kdWN0Lm5hbWUudHJpbSgpLnNsaWNlKDAsMTUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLicgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1wcmljZSBkLWZsZXggYWxpZ24taXRlbXMtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5e3twcm9kdWN0Py5wcmljZS5zZWxsaW5nUHJpY2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzcwMDA3MmMxNzcwMjcwMzk1NDMyZmF2b3VyaXRlLXN2Z3JlcG8tY29tLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMThweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtVG9GYXYoJGV2ZW50LCBwcm9kdWN0LCAnQUREJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXByb2R1Y3Qud2hpc2xpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy8zMDQxMTZjMTc3MDI3NDEzMjkxMGZhdm91cml0ZS1zdmdyZXBvLWNvbV8oMSkuc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxOHB4O1wiICpuZ0lmPVwicHJvZHVjdC53aGlzbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUl0ZW1Ub0ZhdigkZXZlbnQsIHByb2R1Y3QsICdSRU1PVkUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzY5NTE0NGMxNzcwMjcwNjY5NTQ2Y2FydC1zaG9wcGluZy1zdmdyZXBvLWNvbS5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTlweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQoJGV2ZW50LCBwcm9kdWN0LCAnQUREJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdC5xdWFudGl0eSA8PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNzk1MzQyYzE3NzAyNzUzODMzNDRzaG9wcGluZy1jYXJ0LWZpbGwtc3ZncmVwby1jb20uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjE5cHhcIiAqbmdJZj1cInByb2R1Y3QucXVhbnRpdHkgPj0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW1Ub0NhcnQoJGV2ZW50LCBwcm9kdWN0LCAnU1VCU1RSQUNUJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiF2aWRlbz8udmlkZW8/LmlzVmlkZW9QbGF5aW5nICYmIHN0eWxlPy5ob3ZlclBsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogOXB4O3RvcDogNDclO2xlZnQ6IDQwJTtiYWNrZ3JvdW5kOiBsaWdodGdyZXk7Ym9yZGVyLXJhZGl1czogNTAlO2JhY2tncm91bmQ6IHJnYmEoMjQwLCAyNDAsIDI0MCwgMC42KTtiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTM1MDYwYzE3NzAyMTQwNzI3NTVwbGF5LXN2Z3JlcG8tY29tLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIlwiIHN0eWxlPVwid2lkdGg6MjVweDttYXJnaW4tbGVmdDoxLjVweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Nyb2xsLWJ0biByaWdodCBwLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0eWxlPy5kaXJlY3Rpb24gPT09ICdST1cnICYmIGlzT3ZlcmZsb3dpbmdcIiAoY2xpY2spPVwic2Nyb2xsUmlnaHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImF0RW5kXCI+PG1hdC1pY29uPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZT8uZ3JpZFN0eWxlID09ICdTdHlsZTInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZGVvLWdyaWQtc2VjdGlvbiBoLTEwMFwiIFtjbGFzcy5yZW1vdmUtZ2FwXT1cInN0eWxlPy5yZW1vdmVHYXBzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnAtMF09XCJzdHlsZT8uZnVsbFdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWRlby1zZWN0aW9uXCIgKm5nRm9yPVwibGV0IHZpZGVvIG9mIGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhXCIgc3R5bGU9XCJtaW4td2lkdGg6MzAwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXInIDogIXZpZGVvPy52aWRlbz8uaXNWaWRlb1BsYXlpbmcgJiYgc3R5bGU/LmhvdmVyUGxheX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBsb2FkaW5nPVwibGF6eVwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiIFtpZF09XCJkYXRhPy5pZFwiICN2aWRlb0VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkK3ZpZGVvLnZpZGVvLmlkXCIgW3NpbXBvT2JqZWN0UG9zaXRpb25dPVwidmlkZW8udmlkZW8ucG9zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwidmlkZW8udmlkZW8udXJsXCIgbG9hZGluZz1cImxhenlcIiBjbGFzcz1cImgtMTAwXCIgW2NvbnRyb2xzXT1cIiFzdHlsZT8uaG92ZXJQbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzdHlsZT8uaG92ZXJQbGF5ICYmIG9uVmlkZW9Ib3Zlcih2aWRlb0VsLHZpZGVvLnZpZGVvKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211dGVkXT1cInN0eWxlPy5tdXRlVmlkZW9zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJzdHlsZT8uaG92ZXJQbGF5ICYmIG9uVmlkZW9MZWF2ZSh2aWRlb0VsLHZpZGVvLnZpZGVvKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GdWxsc2NyZWVuKHZpZGVvRWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2N1cnNvci1wb2ludGVyJyA6IHN0eWxlPy5ob3ZlclBsYXl9XCI+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy8xNzI2NDhjMTc2OTY3MTY0NzE1OXBsYXktZmlsbC1zdmdyZXBvLWNvbS5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIiAqbmdJZj1cIiF2aWRlbz8udmlkZW8/LmlzVmlkZW9QbGF5aW5nICYmIHN0eWxlPy5ob3ZlclBsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MjAlO2hlaWdodDoyMCU7bWF4LXdpZHRoOjQwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmRldmlkZXI/LmRpc3BsYXlcIj5cclxuICAgICAgICA8c2ltcG8tc3ZnLWRpdmlkZXIgW2RpdmlkZXJUeXBlXT1cInN0eWxlPy5kZXZpZGVyPy5kZXZpZGVyVHlwZVwiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJuZXh0Q29tcG9uZW50Q29sb3I/LmNvbG9yXCI+PC9zaW1wby1zdmctZGl2aWRlcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICAgIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tZ3JpZC1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvdmlkZW8tZ3JpZC1zZWN0aW9uL3ZpZGVvLWdyaWQtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3ZpZGVvLWdyaWQtc2VjdGlvbi92aWRlby1ncmlkLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0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QUNoQixnQ0FBZ0M7d0JBQ2hDLGdDQUFnQzt3QkFDaEMsdUJBQXVCO3dCQUN2QixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQixtQkFBbUI7d0JBQ25CLHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3dCQUN2QixPQUFPO3FCQUNSLGFBQ1UsQ0FBQyxjQUFjLENBQUM7eUlBWWdCLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDaEMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQWFOLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IFZpZGVvR3JpZENvbnRlbnRNb2RhbCwgVmlkZW9HcmlkU2VjdGlvbk1vZGVsLCBWaWRlb0dyaWRTdHlsZXNNb2RlbCB9IGZyb20gJy4vdmlkZW8tZ3JpZC1zZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZE1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IE9yZGVyZWRJdGVtcyB9IGZyb20gJy4uLy4uL2Vjb21tZXJjZS9zdHlsZXMvT3JkZXJlZEl0ZW1zLm1vZGFsJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpbXBvRWxlbWVudHNNb2R1bGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWZpci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1hbGlnbm1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9mb290ZXItbGF5b3V0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudFRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtdGl0bGUtc3BhY2luZy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTUEFDSU5HIH0gZnJvbSAnLi4vLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEltYWdlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVmlkZW9EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvdmlkZW8tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvV3JhcENvbW50YWluZXIgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvd3JhcC1jb250YWluZXJzLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgSXRlbVZhcmlhbnQsIFByb2R1Y3QgfSBmcm9tICdwcm9qZWN0cy9zaW1wby11aS9zcmMvcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmlkZW9TaG93Y2FzZUNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZGVvLXNob3djYXNlL3ZpZGVvLXNob3djYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tdmlkZW8tZ3JpZC1zZWN0aW9uJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFRleHRFZGl0b3JDb21wb25lbnQsXHJcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAvL0RpcmVjdGl2ZXNcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29udGFpbmVyRml0RGlyZWN0aXZlLFxyXG4gICAgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXHJcbiAgICBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXHJcbiAgICBDb250ZW50VGl0bGVEaXJlY3RpdmUsXHJcbiAgICBJbWFnZUVkaXRvckRpcmVjdGl2ZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9XcmFwQ29tbnRhaW5lcixcclxuICAgIE9iamVjdFBvc2l0aW9uRGlyZWN0aXZlLFxyXG4gICAgVmlkZW9EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBNYXRJY29uXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZGVvLWdyaWQtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3ZpZGVvLWdyaWQtc2VjdGlvbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlkZW9HcmlkU2VjdGlvbkNvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ3ZpZGVvZ3JpZCcsIHsgc3RhdGljOiBmYWxzZSB9KSB2aWRlb2dyaWQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBASW5wdXQoKSBkYXRhPzogVmlkZW9HcmlkU2VjdGlvbk1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xyXG4gIGNvbnRlbnQ/OiBWaWRlb0dyaWRDb250ZW50TW9kYWw7XHJcbiAgc3R5bGU/OiBWaWRlb0dyaWRTdHlsZXNNb2RlbDtcclxuICBwcml2YXRlIFVTRVJfV0lTSExJU1Q6IE9yZGVyZWRJdGVtc1tdID0gW107XHJcbiAgcHJpdmF0ZSBVU0VSX0NBUlQ6IE9yZGVyZWRJdGVtc1tdID0gW107XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdldFNjcmVlblNpemUoKTtcclxuICAgIHRoaXMuY29udGVudCA9IHRoaXMuZGF0YT8uY29udGVudDtcclxuICAgIHRoaXMuc3R5bGUgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWQgPSB0aGlzLmRlbGV0ZTtcclxuICB9XHJcbiAgc2NyZWVuV2lkdGg6IGFueTtcclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OiByZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIGdldFNjcmVlblNpemUoKSB7XHJcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlPy5sYXlvdXQgfSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcbiAgZ2V0IGhlYWRpbmdTcGFjZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0eWxlPy5sYXlvdXQ/LmhlYWRpbmdTcGFjaW5nIGFzIFNQQUNJTkc7XHJcbiAgfVxyXG4gIGlzT3ZlcmZsb3dpbmcgPSBmYWxzZTsgYXRTdGFydCA9IHRydWU7IGF0RW5kID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBnZXQgc2Nyb2xsU3RlcCgpIHsgcmV0dXJuIE1hdGgucm91bmQoKHRoaXMudmlkZW9ncmlkPy5uYXRpdmVFbGVtZW50Py5jbGllbnRXaWR0aCB8fCAzMDApICogMC44KTsgfVxyXG4gIHByaXZhdGUgdXBkYXRlRWRnZXMoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMudmlkZW9ncmlkPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCFlbCkgcmV0dXJuO1xyXG4gICAgdGhpcy5hdFN0YXJ0ID0gZWwuc2Nyb2xsTGVmdCA8PSA1O1xyXG4gICAgdGhpcy5hdEVuZCA9IGVsLnNjcm9sbExlZnQgKyBlbC5jbGllbnRXaWR0aCA+PSBlbC5zY3JvbGxXaWR0aCAtIDU7XHJcbiAgfVxyXG4gIHNjcm9sbExlZnQoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMudmlkZW9ncmlkPy5uYXRpdmVFbGVtZW50OyBpZiAoIWVsKSByZXR1cm47XHJcbiAgICBlbC5zY3JvbGxCeSh7IGxlZnQ6IC10aGlzLnNjcm9sbFN0ZXAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVFZGdlcygpLCAzMDApO1xyXG4gIH1cclxuICBnZXRKdXN0aWZ5Q29udGVudCgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy52aWRlb2dyaWQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoIWVsKSByZXR1cm4gJyc7XHJcbiAgICB0aGlzLmlzT3ZlcmZsb3dpbmcgPSBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xyXG4gICAgaWYgKHRoaXMuaXNPdmVyZmxvd2luZykge1xyXG4gICAgICByZXR1cm4gJ2ZsZXgtc3RhcnQnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICBvblNjcm9sbCgpIHsgdGhpcy51cGRhdGVFZGdlcygpOyB9XHJcblxyXG4gIHNjcm9sbFJpZ2h0KCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLnZpZGVvZ3JpZD8ubmF0aXZlRWxlbWVudDsgaWYgKCFlbCkgcmV0dXJuO1xyXG4gICAgZWwuc2Nyb2xsQnkoeyBsZWZ0OiB0aGlzLnNjcm9sbFN0ZXAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVFZGdlcygpLCAzMDApO1xyXG4gIH1cclxuICBvblZpZGVvSG92ZXIodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIHZpZGVvRWxlbWVudD86IGFueSkge1xyXG4gICAgdmlkZW8uY3VycmVudFRpbWUgPSAwO1xyXG4gICAgdmlkZW8ucGxheSgpLmNhdGNoKCgpID0+IHsgfSk7XHJcbiAgICB2aWRlb0VsZW1lbnQuaXNWaWRlb1BsYXlpbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25WaWRlb0xlYXZlKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCB2aWRlb0VsZW1lbnQ/OiBhbnkpIHtcclxuICAgIHZpZGVvLnBhdXNlKCk7XHJcbiAgICB2aWRlby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICB2aWRlb0VsZW1lbnQuaXNWaWRlb1BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcbiAgb3BlbkZ1bGxWaWRlbyh2aWRlbzogYW55KSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkRpYWxvZyhWaWRlb1Nob3djYXNlQ29tcG9uZW50LFxyXG4gICAgICAnMTAwdmgnLFxyXG4gICAgICAnMTAwdncnLFxyXG4gICAgICB7XHJcbiAgICAgICAgdmlkZW9zOiB0aGlzLmNvbnRlbnQ/Lmxpc3RJdGVtLmRhdGEsXHJcbiAgICAgICAgaW5pdGlhdGVWaWRlb0lkOiB2aWRlby5pZFxyXG4gICAgICB9LFxyXG4gICAgICAnZGlhbG9nLXRyYW5zcGFyZW50J1xyXG4gICAgKVxyXG4gIH1cclxuICBvcGVuRnVsbHNjcmVlbih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXMuc3R5bGU/LmhvdmVyUGxheSkge1xyXG4gICAgICBpZiAodmlkZW8ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICB2aWRlby5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKCh2aWRlbyBhcyBhbnkpLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgLy8gU2FmYXJpXHJcbiAgICAgICAgKHZpZGVvIGFzIGFueSkud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgfSBlbHNlIGlmICgodmlkZW8gYXMgYW55KS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgLy8gSUUxMVxyXG4gICAgICAgICh2aWRlbyBhcyBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gT3B0aW9uYWw6IHBsYXkgd2hlbiBmdWxsc2NyZWVuIG9wZW5zXHJcbiAgICAgIHZpZGVvLnBsYXkoKS5jYXRjaCgoKSA9PiB7IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRJdGVtVmFyaWVudChwcm9kdWN0OiBQcm9kdWN0LCB2YXJpZW50SWQ6IHN0cmluZyk6IEl0ZW1WYXJpYW50IHwgbnVsbCB7XHJcbiAgICBsZXQgc2VsZWN0ZWRWYXJpZW50OiBJdGVtVmFyaWFudCB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJvZHVjdD8uaXRlbVZhcmlhbnQ/LmZvckVhY2goKHZhcmllbnQ6IEl0ZW1WYXJpYW50KSA9PiB7XHJcbiAgICAgIGlmICh2YXJpZW50LnZhcmlhbnRJZCA9PT0gdmFyaWVudElkKVxyXG4gICAgICAgIHNlbGVjdGVkVmFyaWVudCA9IHZhcmllbnQ7XHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkVmFyaWVudDtcclxuICB9XHJcbiAgdG9nZ2xlSXRlbVRvRmF2KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0LCB0eXBlOiAnQUREJyB8ICdSRU1PVkUnKSB7XHJcbiAgICBpZiAodHlwZSA9PSAnQUREJykge1xyXG4gICAgICBwcm9kdWN0LndoaXNsaXN0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnV2lzaGxpc3QnLCBkZXRhaWw6ICdJdGVtIGFkZGVkIHRvIHlvdXIgd2lzaGxpc3QnIH0pO1xyXG4gICAgICBpZiAocHJvZHVjdD8uaXRlbVZhcmlhbnQ/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1WYXJpZW50OiBJdGVtVmFyaWFudCB8IG51bGwgPSB0aGlzLmdldEl0ZW1WYXJpZW50KHByb2R1Y3QsIHByb2R1Y3QudmFyaWVudElkKTtcclxuICAgICAgICBpZiAoaXRlbVZhcmllbnQpIHtcclxuICAgICAgICAgIGl0ZW1WYXJpZW50Lndpc2hsaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvRmF2b3VyaXRlKHByb2R1Y3QgYXMgUHJvZHVjdCwgaXRlbVZhcmllbnQudmFyaWFudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRJdGVtVG9GYXZvdXJpdGUocHJvZHVjdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwcm9kdWN0LndoaXNsaXN0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdpbmZvJywgc3VtbWFyeTogJ1dpc2hsaXN0JywgZGV0YWlsOiAnSXRlbSByZW1vdmVkIGZyb20geW91ciB3aXNobGlzdCcgfSk7XHJcbiAgICAgIHRoaXMuY2FydFNlcnZpY2UucmVtb3ZlSXRlbUZyb21GYXZvdXJpdGUocHJvZHVjdC52YXJpZW50SWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2R1Y3Qud2hpc2xpc3QpIHtcclxuICAgICAgdGhpcy5VU0VSX1dJU0hMSVNUPy5wdXNoKG5ldyBPcmRlcmVkSXRlbXMocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuVVNFUl9XSVNITElTVCA9IHRoaXMuVVNFUl9XSVNITElTVD8uZmlsdGVyKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IGl0ZW0udmFyaWVudElkICE9IHByb2R1Y3QudmFyaWVudElkKSA/PyBbXTtcclxuICAgIH1cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuICBpc0l0ZW1PdXRPZlN0b2NrKHByb2R1Y3Q6IFByb2R1Y3QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBwcm9kdWN0Lml0ZW1JbnZlbnRvcnk/Lm9wZW5pbmdTdG9jayA9PSAwO1xyXG4gIH1cclxuICBhZGRJdGVtVG9DYXJ0KGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50LCBwcm9kdWN0OiBQcm9kdWN0LCB0eXBlOiAnQUREJyB8ICdTVUJTVFJBQ1QnKSB7XHJcbiAgICBpZiAodGhpcy5pc0l0ZW1PdXRPZlN0b2NrKHByb2R1Y3QpKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ0NhcnQnLCBkZXRhaWw6ICdJdGVtIGlzIG5vdCBhdmFpbGFibGUgYXMgb2Ygbm93LiBXZSB3aWxsIG5vdGlmeSB5b3Ugb25jZSBhdmFpbGFibGUnIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBwcm9kdWN0LnF1YW50aXR5ICs9ICh0eXBlID09ICdBREQnID8gMSA6IC0xKTtcclxuICAgIGlmIChwcm9kdWN0Py5pdGVtVmFyaWFudD8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1WYXJpZW50OiBJdGVtVmFyaWFudCB8IG51bGwgPSB0aGlzLmdldEl0ZW1WYXJpZW50KHByb2R1Y3QsIHByb2R1Y3QudmFyaWVudElkKTtcclxuICAgICAgaWYgKGl0ZW1WYXJpZW50KSB7XHJcbiAgICAgICAgaXRlbVZhcmllbnQucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkSXRlbVRvQ2FydChwcm9kdWN0LCBpdGVtVmFyaWVudC52YXJpYW50SWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEl0ZW1Ub0NhcnQocHJvZHVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvZHVjdC5xdWFudGl0eSkge1xyXG4gICAgICBsZXQgaXNQcmVzZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuVVNFUl9DQVJUPy5mb3JFYWNoKChpdGVtOiBPcmRlcmVkSXRlbXMpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS52YXJpZW50SWQgPT0gcHJvZHVjdC52YXJpZW50SWQpIHtcclxuICAgICAgICAgIGl0ZW0ucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5O1xyXG4gICAgICAgICAgaXNQcmVzZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmICghaXNQcmVzZW50KVxyXG4gICAgICAgIHRoaXMuVVNFUl9DQVJUPy5wdXNoKG5ldyBPcmRlcmVkSXRlbXMocHJvZHVjdCwgcHJvZHVjdC52YXJpZW50SWQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuVVNFUl9DQVJUID0gdGhpcy5VU0VSX0NBUlQ/LmZpbHRlcigoaXRlbTogT3JkZXJlZEl0ZW1zKSA9PiBpdGVtLnZhcmllbnRJZCAhPSBwcm9kdWN0LnZhcmllbnRJZCkgPz8gW107XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGU/LmJhY2tncm91bmRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiXHJcbiAgICBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XHJcbiAgICA8ZGl2ICNtYWluQ29udGFpbmVyIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb092ZXJsYXldPVwic3R5bGU/LmJhY2tncm91bmRcIiBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZT8uYm9yZGVyXCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlPy5sYXlvdXRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZT8uYW5pbWF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInN0eWxlPy5mdWxsV2lkdGggPyB7J3BhZGRpbmcnOiAnMHB4J30gOiB7fVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2p1c3RpZnktY29udGVudC1jZW50ZXInIDogc2NyZWVuV2lkdGggPCA0NzV9XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFtuZ0NsYXNzXT1cInsndy0xMDAnOnN0eWxlPy5ncmlkU3R5bGUgPT09ICdTdHlsZTInfVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGV4dCBvZiBkYXRhPy5jb250ZW50Py5pbnB1dFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZy1sYXJnZSBjb250ZW50LXNpZGVcIiBbc2ltcG9Db250ZW50VGl0bGVTcGFjZV09XCJoZWFkaW5nU3BhY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXQgfHwgICh0ZXh0LnZhbHVlICYmIHRleHQudmFsdWUubGVuZ3RoID4gMClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaW1wby10ZXh0LWVkaXRvciBbKHZhbHVlKV09XCJ0ZXh0LnZhbHVlXCIgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIj48L3NpbXBvLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlPy5ncmlkU3R5bGUgPT0gJ1N0eWxlMSdcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Nyb2xsLWJ0biBsZWZ0IHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3R5bGU/LmRpcmVjdGlvbiA9PT0gJ1JPVycgJiYgaXNPdmVyZmxvd2luZ1wiIChjbGljayk9XCJzY3JvbGxMZWZ0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhdFN0YXJ0XCI+PG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1pbWFnZS1zZWN0aW9uIGQtZmxleCBwb3NpdGlvbi1yZWxhdGl2ZVwiIFtjbGFzcy5yb3ddPVwic3R5bGU/LmRpcmVjdGlvbiA9PSAnUk9XJyBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy53cmFwLXNjcm9sbF09XCJzdHlsZT8uZGlyZWN0aW9uID09ICdST1cnXCIgW2NsYXNzLmZsZXgtd3JhcF09XCJzdHlsZT8uZGlyZWN0aW9uID09ICdDT0xVTU4nXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWRcIiAjdmlkZW9ncmlkIFtzdHlsZS5qdXN0aWZ5Q29udGVudF09XCJnZXRKdXN0aWZ5Q29udGVudCgpXCIgKHNjcm9sbCk9XCJvblNjcm9sbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZsZXgtY29sdW1uJyA6IHNjcmVlbldpZHRoIDwgNDc1fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWRlby1zZWN0aW9uIHAtMyB3LWF1dG8gZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2aWRlbyBvZiBjb250ZW50Py5saXN0SXRlbT8uZGF0YVwiIFtzaW1wb0NvbHVtbkRpcmVjdGl2ZV09XCJzdHlsZT8uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0eWxlXT1cInN0eWxlPy5yZW1vdmVHYXBzID8gJ3BhZGRpbmc6IDBweCAhaW1wb3J0YW50OyBtYXJnaW46IDBweCAhaW1wb3J0YW50OycgOiB7fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uZGlzcGxheT8uc2hvd1RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZpdCBwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmF1dG9QbGF5ICYmICFzdHlsZT8uaG92ZXJQbGF5O2Vsc2Ugbm9ybWFsVmlkZW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGxvYWRpbmc9XCJsYXp5XCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCIgW2lkXT1cImRhdGE/LmlkXCIgI3ZpZGVvRWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCArIHZpZGVvLnZpZGVvLmlkXCIgW3NyY109XCJ2aWRlby52aWRlby51cmxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTEwMCBjdXJzb3ItcG9pbnRlclwiIFttdXRlZF09XCJzdHlsZT8ubXV0ZVZpZGVvc1wiIGF1dG9wbGF5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZ1bGxzY3JlZW4odmlkZW9FbClcIiBsb29wPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxWaWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGxvYWRpbmc9XCJsYXp5XCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCIgW2lkXT1cImRhdGE/LmlkXCIgI3ZpZGVvRWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCArIHZpZGVvLnZpZGVvLmlkXCIgW3NyY109XCJ2aWRlby52aWRlby51cmxcIiBjbGFzcz1cImgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdXRlZF09XCJzdHlsZT8ubXV0ZVZpZGVvc1wiIFtjb250cm9sc109XCIhc3R5bGU/LmhvdmVyUGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzdHlsZT8uaG92ZXJQbGF5ICYmIG9uVmlkZW9Ib3Zlcih2aWRlb0VsLCB2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwic3R5bGU/LmhvdmVyUGxheSAmJiBvblZpZGVvTGVhdmUodmlkZW9FbCwgdmlkZW8udmlkZW8pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbHNjcmVlbih2aWRlb0VsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjdXJzb3ItcG9pbnRlcic6IHN0eWxlPy5ob3ZlclBsYXkgfVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMTcyNjQ4YzE3Njk2NzE2NDcxNTlwbGF5LWZpbGwtc3ZncmVwby1jb20uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiICpuZ0lmPVwiIXZpZGVvPy52aWRlbz8uaXNWaWRlb1BsYXlpbmcgJiYgc3R5bGU/LmhvdmVyUGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MjBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgWyh2YWx1ZSldPVwidmlkZW8udmlkZW8uZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGVudD8uZGlzcGxheT8uc2hvd1RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWRlby13cmFwcGVyIHBvc2l0aW9uLXJlbGF0aXZlXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlPy5hdXRvUGxheSAmJiAhc3R5bGU/LmhvdmVyUGxheTtlbHNlIG5vcm1hbFZpZGVvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBsb2FkaW5nPVwibGF6eVwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZT8uY29ybmVyc1wiIFtpZF09XCJkYXRhPy5pZFwiICN2aWRlb0VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YT8uaWQgKyB2aWRlby52aWRlby5pZFwiIFtzcmNdPVwidmlkZW8udmlkZW8udXJsXCIgY2xhc3M9XCJoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXV0ZWRdPVwic3R5bGU/Lm11dGVWaWRlb3NcIiBbc2ltcG9WaWRlb0RpcmVjdGl2ZV09XCJzdHlsZT8uaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xzXT1cInN0eWxlPy5ob3ZlclBsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic3R5bGU/LmhvdmVyUGxheSAmJiBvblZpZGVvSG92ZXIodmlkZW9FbCwgdmlkZW8udmlkZW8pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInN0eWxlPy5ob3ZlclBsYXkgJiYgb25WaWRlb0xlYXZlKHZpZGVvRWwsIHZpZGVvLnZpZGVvKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZ1bGxWaWRlbyh2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY3Vyc29yLXBvaW50ZXInOiBzdHlsZT8uaG92ZXJQbGF5IH1cIiBhdXRvcGxheSBsb29wPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxWaWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGxvYWRpbmc9XCJsYXp5XCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlPy5jb3JuZXJzXCIgW2lkXT1cImRhdGE/LmlkXCIgI3ZpZGVvRWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCArIHZpZGVvLnZpZGVvLmlkXCIgW3NyY109XCJ2aWRlby52aWRlby51cmxcIiBjbGFzcz1cImgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdXRlZF09XCJzdHlsZT8ubXV0ZVZpZGVvc1wiIFtzaW1wb1ZpZGVvRGlyZWN0aXZlXT1cInN0eWxlPy5pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbHNdPVwiIXN0eWxlPy5ob3ZlclBsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic3R5bGU/LmhvdmVyUGxheSAmJiBvblZpZGVvSG92ZXIodmlkZW9FbCwgdmlkZW8udmlkZW8pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInN0eWxlPy5ob3ZlclBsYXkgJiYgb25WaWRlb0xlYXZlKHZpZGVvRWwsIHZpZGVvLnZpZGVvKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZ1bGxWaWRlbyh2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY3Vyc29yLXBvaW50ZXInOiBzdHlsZT8uaG92ZXJQbGF5IH1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHByb2R1Y3RzLWNhcmRzIHctMTAwIHAtMyBkLWZsZXggZ2FwLTMgb3ZlcmZsb3cteC1hdXRvIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ2aWRlbz8udmlkZW8/LnByb2R1Y3RzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgdmlkZW8udmlkZW8ucHJvZHVjdHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWJhZGdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwicHJvZHVjdC5yZWRpcmVjdGlvblVybFwiIGNsYXNzPVwicHJvZHVjdC1saW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJwcm9kdWN0Py5pdGVtSW1hZ2VzWzBdLmltZ1VybFwiIGFsdD1cIlJpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9kdWN0LWltZ1wiIC8+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwicHJvZHVjdC5yZWRpcmVjdGlvblVybFwiIGNsYXNzPVwicHJvZHVjdC1saW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1kZXRhaWxzIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cHJvZHVjdC5uYW1lLmxlbmd0aCA+IDE2ID8gcHJvZHVjdC5uYW1lLnRyaW0oKS5zbGljZSgwLDE1KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4nIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtcHJpY2UgZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuXt7cHJvZHVjdD8ucHJpY2Uuc2VsbGluZ1ByaWNlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy83MDAwNzJjMTc3MDI3MDM5NTQzMmZhdm91cml0ZS1zdmdyZXBvLWNvbS5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE4cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSXRlbVRvRmF2KCRldmVudCwgcHJvZHVjdCwgJ0FERCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcm9kdWN0LndoaXNsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMzA0MTE2YzE3NzAyNzQxMzI5MTBmYXZvdXJpdGUtc3ZncmVwby1jb21fKDEpLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMThweDtcIiAqbmdJZj1cInByb2R1Y3Qud2hpc2xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtVG9GYXYoJGV2ZW50LCBwcm9kdWN0LCAnUkVNT1ZFJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy82OTUxNDRjMTc3MDI3MDY2OTU0NmNhcnQtc2hvcHBpbmctc3ZncmVwby1jb20uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjE5cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KCRldmVudCwgcHJvZHVjdCwgJ0FERCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2R1Y3QucXVhbnRpdHkgPD0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzc5NTM0MmMxNzcwMjc1MzgzMzQ0c2hvcHBpbmctY2FydC1maWxsLXN2Z3JlcG8tY29tLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxOXB4XCIgKm5nSWY9XCJwcm9kdWN0LnF1YW50aXR5ID49IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtVG9DYXJ0KCRldmVudCwgcHJvZHVjdCwgJ1NVQlNUUkFDVCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhdmlkZW8/LnZpZGVvPy5pc1ZpZGVvUGxheWluZyAmJiBzdHlsZT8uaG92ZXJQbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDlweDt0b3A6IDQ3JTtsZWZ0OiA0MCU7YmFja2dyb3VuZDogbGlnaHRncmV5O2JvcmRlci1yYWRpdXM6IDUwJTtiYWNrZ3JvdW5kOiByZ2JhKDI0MCwgMjQwLCAyNDAsIDAuNik7YmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Qyejk0OTd4cDh4YjEyLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzkzNTA2MGMxNzcwMjE0MDcyNzU1cGxheS1zdmdyZXBvLWNvbS5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcIiBzdHlsZT1cIndpZHRoOjI1cHg7bWFyZ2luLWxlZnQ6MS41cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNjcm9sbC1idG4gcmlnaHQgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdHlsZT8uZGlyZWN0aW9uID09PSAnUk9XJyAmJiBpc092ZXJmbG93aW5nXCIgKGNsaWNrKT1cInNjcm9sbFJpZ2h0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhdEVuZFwiPjxtYXQtaWNvbj5rZXlib2FyZF9hcnJvd19yaWdodDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmdyaWRTdHlsZSA9PSAnU3R5bGUyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWRlby1ncmlkLXNlY3Rpb24gaC0xMDBcIiBbY2xhc3MucmVtb3ZlLWdhcF09XCJzdHlsZT8ucmVtb3ZlR2Fwc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wLTBdPVwic3R5bGU/LmZ1bGxXaWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmlkZW8tc2VjdGlvblwiICpuZ0Zvcj1cImxldCB2aWRlbyBvZiBjb250ZW50Py5saXN0SXRlbT8uZGF0YVwiIHN0eWxlPVwibWluLXdpZHRoOjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyA6ICF2aWRlbz8udmlkZW8/LmlzVmlkZW9QbGF5aW5nICYmIHN0eWxlPy5ob3ZlclBsYXl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gbG9hZGluZz1cImxhenlcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGU/LmNvcm5lcnNcIiBbaWRdPVwiZGF0YT8uaWRcIiAjdmlkZW9FbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCt2aWRlby52aWRlby5pZFwiIFtzaW1wb09iamVjdFBvc2l0aW9uXT1cInZpZGVvLnZpZGVvLnBvc2l0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInZpZGVvLnZpZGVvLnVybFwiIGxvYWRpbmc9XCJsYXp5XCIgY2xhc3M9XCJoLTEwMFwiIFtjb250cm9sc109XCIhc3R5bGU/LmhvdmVyUGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic3R5bGU/LmhvdmVyUGxheSAmJiBvblZpZGVvSG92ZXIodmlkZW9FbCx2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdXRlZF09XCJzdHlsZT8ubXV0ZVZpZGVvc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwic3R5bGU/LmhvdmVyUGxheSAmJiBvblZpZGVvTGVhdmUodmlkZW9FbCx2aWRlby52aWRlbylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbHNjcmVlbih2aWRlb0VsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjdXJzb3ItcG9pbnRlcicgOiBzdHlsZT8uaG92ZXJQbGF5fVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMTcyNjQ4YzE3Njk2NzE2NDcxNTlwbGF5LWZpbGwtc3ZncmVwby1jb20uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCIgKm5nSWY9XCIhdmlkZW8/LnZpZGVvPy5pc1ZpZGVvUGxheWluZyAmJiBzdHlsZT8uaG92ZXJQbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjIwJTtoZWlnaHQ6MjAlO21heC13aWR0aDo0MHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlPy5kZXZpZGVyPy5kaXNwbGF5XCI+XHJcbiAgICAgICAgPHNpbXBvLXN2Zy1kaXZpZGVyIFtkaXZpZGVyVHlwZV09XCJzdHlsZT8uZGV2aWRlcj8uZGV2aWRlclR5cGVcIlxyXG4gICAgICAgICAgICBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cclxuICAgICAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPiJdfQ==
|