simpo-component-library 3.6.560 → 3.6.561
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/ecommerce/sections/authentication-required/authentication-required.component.mjs +4 -4
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +33 -24
- package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +7 -5
- package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +2 -2
- package/esm2022/lib/elements/link-editor/link-editor.component.mjs +10 -4
- package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +3 -3
- package/fesm2022/simpo-component-library.mjs +47 -28
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/directive/background-directive.d.ts +1 -1
- package/lib/directive/button-directive.directive.d.ts +1 -1
- package/lib/directive/color.directive.d.ts +1 -1
- package/lib/ecommerce/sections/cart/cart.component.d.ts +3 -1
- package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +1 -1
- package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +2 -2
- package/lib/ecommerce/sections/product-list/product-list.component.d.ts +1 -1
- package/lib/ecommerce/sections/schemes/schemes.component.d.ts +1 -1
- package/lib/ecommerce/sections/store-list/store-list.component.d.ts +1 -1
- package/lib/ecommerce/sections/store-page/store-page.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/banner-grid-section/banner-grid-section.component.d.ts +1 -1
- package/lib/sections/carousel-banner/carousel-banner.component.d.ts +1 -1
- package/lib/sections/contact-us/contact-us.component.d.ts +2 -2
- package/lib/sections/faq-section/faq-section.component.d.ts +1 -1
- package/lib/sections/header-section/header-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/moving-text/moving-text.component.d.ts +1 -1
- package/lib/sections/new-testimonials/new-testimonials.component.d.ts +1 -1
- package/lib/sections/pricing-section/pricing-section.component.d.ts +3 -3
- package/package.json +1 -1
- package/simpo-component-library-3.6.561.tgz +0 -0
- package/simpo-component-library-3.6.560.tgz +0 -0
|
@@ -7,7 +7,6 @@ import { MatInputModule } from '@angular/material/input';
|
|
|
7
7
|
import { MatSelectModule } from '@angular/material/select';
|
|
8
8
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
9
9
|
import { MatIconModule } from '@angular/material/icon';
|
|
10
|
-
import { ButtonDirectiveDirective } from '../../directive/button-directive.directive';
|
|
11
10
|
import { MediaSelectorComponent } from '../media-selector/media-selector.component';
|
|
12
11
|
import { MatSliderModule } from '@angular/material/slider';
|
|
13
12
|
import { MatProgressSpinner } from '@angular/material/progress-spinner';
|
|
@@ -123,6 +122,13 @@ export class LinkEditorComponent {
|
|
|
123
122
|
if (this.data.buttonStyle && this.data.buttonStyle.gradientDirection)
|
|
124
123
|
this.data.buttonStyle.gradientDirection = this.data?.buttonStyle?.gradientDirection || GradientDirection.DOWN;
|
|
125
124
|
}
|
|
125
|
+
if (this.data?.buttonStyle?.type == 'Outline' || this.data?.buttonStyle?.type == 'Text') {
|
|
126
|
+
this.backgroundType = ['Solid'];
|
|
127
|
+
this.data.buttonStyle.colorType = 'Solid';
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this.backgroundType = ['Solid', 'Gradient'];
|
|
131
|
+
}
|
|
126
132
|
this.getTemplatePage();
|
|
127
133
|
}
|
|
128
134
|
closeDialog() {
|
|
@@ -239,13 +245,13 @@ export class LinkEditorComponent {
|
|
|
239
245
|
}
|
|
240
246
|
}
|
|
241
247
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkEditorComponent, deps: [{ token: i1.ElementServiceService }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3.EventsService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
242
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkEditorComponent, isStandalone: true, selector: "simpo-link-editor", ngImport: i0, template: "<section>\n <div class=\"header\">\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\n </div>\n\n <div class=\"body\">\n <div>\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\n <p class=\"desc\">This is the text that will be displayed to users</p>\n </div>\n\n <hr>\n\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <select>\n <ng-container *ngFor=\"let style of styles\">\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\n </ng-container>\n <select>\n </ng-container> -->\n\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <div class=\"field-container mb-2\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label class=\"link-text mb-1\">Button</label>\n <div class=\"colorType d-flex align-items-center justify-content-center\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of buttonTypes\">\n <option [value]=\"type.type\">\n {{type.type | titlecase}}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div>\n <div class=\"preview d-flex justify-content-center\">\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\n [style.background]=\"setBackground()\">\n <span\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\n [ngStyle]=\"{\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\n }\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\n [style.color]=\"data.buttonStyle.background\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n </button>\n\n </div>\n </div>\n </div>\n\n <div class=\"field-container\">\n <label class=\"link-text\">Button Style</label>\n <div class=\"color-container row\">\n <div class=\"color br-10\">\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\n <div class=\"left-side\">Color</div>\n <div class=\"right-side\">\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\n (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of backgroundType\">\n <option style=\"padding: 10px;\">\n {{ type | titlecase }}</option>\n </ng-container>\n </select>\n </div>\n </div>\n </div>\n <div class=\"color-bottom\">\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"display: none;\"\n #colorInput>\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\n <div class=\"w-100 d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput1>\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput>\n <div class=\"w-100 d-flex mt-2\">\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\n (click)=\"colorInput1.click()\"></div>\n </div>\n </div>\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"gradient-direction\">\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\n <div class=\"right-direction\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10 w-80\">\n <ng-container *ngFor=\"let direction of directionType\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput3>\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\n <div class=\"w-100 d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\n (click)=\"colorInput3.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\n *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"sub-text-1 d-flex align-items-center\">\n Corner Radius\n </div>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10\">\n <ng-container *ngFor=\"let shape of buttonShapes\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\n class=\"transition-image\">\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\n loading=\"lazy\" class=\"transition-image\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\n <div class=\"fw-bold\">Show Icon</div>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\n </div>\n </div>\n <div>\n <!-- <p class=\"heading mb-0\">Image</p> -->\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\n <img loading=\"lazy\"\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\n alt=\"\">\n <p class=\"upload-text mb-0\">Upload a file</p>\n <p class=\"upload-text mb-0\">or select an existing one</p>\n <span class=\"upload-text\">up to 32MB</span>\n </div>\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\n <ng-container *ngIf=\"!imgLoader\">\n <img [src]=\"link?.icon?.url\">\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\n </path>\n </svg>\n </div>\n\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\n </path>\n </svg>\n </div>\n </ng-container>\n <ng-container *ngIf=\"imgLoader\">\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n </div>\n\n\n </div>\n\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\n {{tab | titlecase}}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\n\n\n <div class=\"groups cp\">\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\n (click)=\"changeType(type.type)\">{{type.type}}</div>\n </div>\n\n <div class=\"field-container mt-3\">\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\n <option value=\"\" selected>Select from your existing pages</option>\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\n {{page.pageName}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\n </div>\n\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Section</option>\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\n </option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n </div>\n\n <div\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Type</option>\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\n </div>\n\n <div class=\"d-flex justify-content-between mt-10\">\n <label class=\"input-label-2\">Open in a new browser tab</label>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\n </div>\n </div>\n\n </div>\n\n <div class=\"footer w-100 align-items-center justify-content-center\">\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\n </div>\n\n </ng-container>\n\n </div>\n\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{text-align:center;border:1px solid var(--primary-bg-color);color:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040;border-radius:10px}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid var(--primary-bg-color)}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
248
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkEditorComponent, isStandalone: true, selector: "simpo-link-editor", ngImport: i0, template: "<section>\n <div class=\"header\">\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\n </div>\n\n <div class=\"body\">\n <div>\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\n <p class=\"desc\">This is the text that will be displayed to users</p>\n </div>\n\n <hr>\n\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <select>\n <ng-container *ngFor=\"let style of styles\">\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\n </ng-container>\n <select>\n </ng-container> -->\n\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <div class=\"field-container mb-2\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label class=\"link-text mb-1\">Button</label>\n <div class=\"colorType d-flex align-items-center justify-content-center\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of buttonTypes\">\n <option [value]=\"type.type\">\n {{type.type | titlecase}}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div>\n <div class=\"preview d-flex justify-content-center\">\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\n [style.background]=\"setBackground()\">\n <span\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\n [ngStyle]=\"{\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\n }\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\n [style.color]=\"data.buttonStyle.background\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n </button>\n\n </div>\n </div>\n </div>\n\n <div class=\"field-container\">\n <label class=\"link-text\">Button Style</label>\n <div class=\"color-container row\">\n <div class=\"color br-10\">\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\n <div class=\"left-side\">Color</div>\n <div class=\"right-side\">\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\n (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of backgroundType\">\n <option style=\"padding: 10px;\">\n {{ type | titlecase }}</option>\n </ng-container>\n </select>\n </div>\n </div>\n </div>\n <div class=\"color-bottom\">\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\n <div class=\"text-background\">\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\n <div class=\"w-100 d-flex justify-content-center\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"visibility: hidden;\"\n #colorInput>\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"visibility: hidden;\" #colorInput1>\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"visibility: hidden;\" #colorInput>\n <div class=\"w-100 d-flex mt-2\">\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\n (click)=\"colorInput1.click()\"></div>\n </div>\n </div>\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"gradient-direction\">\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\n <div class=\"right-direction\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10 w-80\">\n <ng-container *ngFor=\"let direction of directionType\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"visibility: hidden;\" #colorInput3>\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\n <!-- <div class=\"w-100 d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\n (click)=\"colorInput3.click()\"></div>\n </div> -->\n </div>\n </div>\n </div>\n\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\n *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"sub-text-1 d-flex align-items-center\">\n Corner Radius\n </div>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10\">\n <ng-container *ngFor=\"let shape of buttonShapes\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\n class=\"transition-image\">\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\n loading=\"lazy\" class=\"transition-image\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\n <div class=\"fw-bold\">Show Icon</div>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\n </div>\n </div>\n <div>\n <!-- <p class=\"heading mb-0\">Image</p> -->\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\n <img loading=\"lazy\"\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\n alt=\"\">\n <p class=\"upload-text mb-0\">Upload a file</p>\n <p class=\"upload-text mb-0\">or select an existing one</p>\n <span class=\"upload-text\">up to 32MB</span>\n </div>\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\n <ng-container *ngIf=\"!imgLoader\">\n <img [src]=\"link?.icon?.url\">\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\n </path>\n </svg>\n </div>\n\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\n </path>\n </svg>\n </div>\n </ng-container>\n <ng-container *ngIf=\"imgLoader\">\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n </div>\n\n\n </div>\n\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\n {{tab | titlecase}}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\n\n\n <div class=\"groups cp\">\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\n (click)=\"changeType(type.type)\">{{type.type}}</div>\n </div>\n\n <div class=\"field-container mt-3\">\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\n <option value=\"\" selected>Select from your existing pages</option>\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\n {{page.pageName}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\n </div>\n\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Section</option>\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\n </option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n </div>\n\n <div\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Type</option>\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\n </div>\n\n <div class=\"d-flex justify-content-between mt-10\">\n <label class=\"input-label-2\">Open in a new browser tab</label>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\n </div>\n </div>\n\n </div>\n\n <div class=\"footer w-100 align-items-center justify-content-center\">\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\n </div>\n\n </ng-container>\n\n </div>\n\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{text-align:center;border:1px solid var(--primary-bg-color);color:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040;border-radius:10px}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid var(--primary-bg-color)}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
243
249
|
}
|
|
244
250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkEditorComponent, decorators: [{
|
|
245
251
|
type: Component,
|
|
246
|
-
args: [{ selector: 'simpo-link-editor', standalone: true, imports: [CommonModule, FormsModule, MatOptionModule, MatInputModule, MatSelectModule, MatIconModule, ButtonDirectiveDirective, MatSliderModule, MatProgressSpinner], template: "<section>\n <div class=\"header\">\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\n </div>\n\n <div class=\"body\">\n <div>\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\n <p class=\"desc\">This is the text that will be displayed to users</p>\n </div>\n\n <hr>\n\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <select>\n <ng-container *ngFor=\"let style of styles\">\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\n </ng-container>\n <select>\n </ng-container> -->\n\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <div class=\"field-container mb-2\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label class=\"link-text mb-1\">Button</label>\n <div class=\"colorType d-flex align-items-center justify-content-center\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of buttonTypes\">\n <option [value]=\"type.type\">\n {{type.type | titlecase}}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div>\n <div class=\"preview d-flex justify-content-center\">\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\n [style.background]=\"setBackground()\">\n <span\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\n [ngStyle]=\"{\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\n }\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\n [style.color]=\"data.buttonStyle.background\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n </button>\n\n </div>\n </div>\n </div>\n\n <div class=\"field-container\">\n <label class=\"link-text\">Button Style</label>\n <div class=\"color-container row\">\n <div class=\"color br-10\">\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\n <div class=\"left-side\">Color</div>\n <div class=\"right-side\">\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\n (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of backgroundType\">\n <option style=\"padding: 10px;\">\n {{ type | titlecase }}</option>\n </ng-container>\n </select>\n </div>\n </div>\n </div>\n <div class=\"color-bottom\">\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"display: none;\"\n #colorInput>\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\n <div class=\"w-100 d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput1>\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput>\n <div class=\"w-100 d-flex mt-2\">\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\n (click)=\"colorInput1.click()\"></div>\n </div>\n </div>\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"gradient-direction\">\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\n <div class=\"right-direction\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10 w-80\">\n <ng-container *ngFor=\"let direction of directionType\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"display: none;\" #colorInput3>\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\n <div class=\"w-100 d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\n (click)=\"colorInput3.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\n *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"sub-text-1 d-flex align-items-center\">\n Corner Radius\n </div>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10\">\n <ng-container *ngFor=\"let shape of buttonShapes\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\n class=\"transition-image\">\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\n loading=\"lazy\" class=\"transition-image\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\n <div class=\"fw-bold\">Show Icon</div>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\n </div>\n </div>\n <div>\n <!-- <p class=\"heading mb-0\">Image</p> -->\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\n <img loading=\"lazy\"\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\n alt=\"\">\n <p class=\"upload-text mb-0\">Upload a file</p>\n <p class=\"upload-text mb-0\">or select an existing one</p>\n <span class=\"upload-text\">up to 32MB</span>\n </div>\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\n <ng-container *ngIf=\"!imgLoader\">\n <img [src]=\"link?.icon?.url\">\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\n </path>\n </svg>\n </div>\n\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\n </path>\n </svg>\n </div>\n </ng-container>\n <ng-container *ngIf=\"imgLoader\">\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n </div>\n\n\n </div>\n\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\n {{tab | titlecase}}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\n\n\n <div class=\"groups cp\">\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\n (click)=\"changeType(type.type)\">{{type.type}}</div>\n </div>\n\n <div class=\"field-container mt-3\">\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\n <option value=\"\" selected>Select from your existing pages</option>\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\n {{page.pageName}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\n </div>\n\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Section</option>\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\n </option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n </div>\n\n <div\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Type</option>\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\n </div>\n\n <div class=\"d-flex justify-content-between mt-10\">\n <label class=\"input-label-2\">Open in a new browser tab</label>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\n </div>\n </div>\n\n </div>\n\n <div class=\"footer w-100 align-items-center justify-content-center\">\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\n </div>\n\n </ng-container>\n\n </div>\n\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{text-align:center;border:1px solid var(--primary-bg-color);color:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040;border-radius:10px}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid var(--primary-bg-color)}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"] }]
|
|
252
|
+
args: [{ selector: 'simpo-link-editor', standalone: true, imports: [CommonModule, FormsModule, MatOptionModule, MatInputModule, MatSelectModule, MatIconModule, MatSliderModule, MatProgressSpinner], template: "<section>\n <div class=\"header\">\n <p>{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Settings</p>\n <mat-icon (click)=\"closeDialog()\" class=\"f-18 d-flex align-items-center justify-content-center cp\">close</mat-icon>\n </div>\n\n <div class=\"body\">\n <div>\n <label class=\"link-text\">{{data.type == 'BUTTON' ? \"Button\" : \"Link\"}} Text</label><br>\n <input type=\"text\" class=\"input-text link-text-input\" [(ngModel)]=\"link.label\">\n <p class=\"desc\">This is the text that will be displayed to users</p>\n </div>\n\n <hr>\n\n <!-- <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <select>\n <ng-container *ngFor=\"let style of styles\">\n <option (click)=\"changeButtonStyle(style)\" [value]=\"style.name\">{{style.name}}</option>\n </ng-container>\n <select>\n </ng-container> -->\n\n <ng-container *ngIf=\"data.type == 'BUTTON'\">\n <div class=\"field-container mb-2\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <label class=\"link-text mb-1\">Button</label>\n <div class=\"colorType d-flex align-items-center justify-content-center\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.type\" (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of buttonTypes\">\n <option [value]=\"type.type\">\n {{type.type | titlecase}}\n </option>\n </ng-container>\n </select>\n </div>\n </div>\n <div>\n <div class=\"preview d-flex justify-content-center\">\n <button class=\"btn-style w-80\" [style.borderRadius]=\"setBorderRadius()\" [style.border]=\"setBorder()\"\n [style.background]=\"setBackground()\">\n <span\n *ngIf=\"(data?.buttonStyle?.type === 'Text' || data?.buttonStyle?.type === 'Outline') && data?.buttonStyle?.colorType === 'Gradient'\"\n [ngStyle]=\"{\n 'background': 'linear-gradient(90deg, ' + data?.buttonStyle?.background + ' 0%, ' + data?.buttonStyle.secondaryBackground + ' 100%)'\n }\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.style?.colorType == 'Solid' || data?.buttonStyle?.type == 'Solid'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Outline'\"\n [style.color]=\"setColor()\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n <span *ngIf=\"data?.buttonStyle?.type === 'Text'\"\n [style.color]=\"data.buttonStyle.background\">\n {{ link.label ? link.label : \"Button Text\"}}\n </span>\n </button>\n\n </div>\n </div>\n </div>\n\n <div class=\"field-container\">\n <label class=\"link-text\">Button Style</label>\n <div class=\"color-container row\">\n <div class=\"color br-10\">\n <div class=\"color-top d-flex justify-content-between mb-2 align-items-center\">\n <div class=\"left-side\">Color</div>\n <div class=\"right-side\">\n <div class=\"colorType d-flex align-items-center justify-content-center w-100\">\n <select class=\"border-0 w-100\" [(ngModel)]=\"data.buttonStyle.colorType\"\n (ngModelChange)=\"changeButtonStyle()\">\n <ng-container *ngFor=\"let type of backgroundType\">\n <option style=\"padding: 10px;\">\n {{ type | titlecase }}</option>\n </ng-container>\n </select>\n </div>\n </div>\n </div>\n <div class=\"color-bottom\">\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Solid'\">\n <div class=\"text-background\">\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\"> {{ getColorLabel()}}</label>\n <div class=\"w-100 d-flex justify-content-center\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"getContrastTextColor(data.buttonStyle.background)\" style=\"visibility: hidden;\"\n #colorInput>\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.background\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.colorType === 'Gradient'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.background\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"visibility: hidden;\" #colorInput1>\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.secondaryBackground\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"visibility: hidden;\" #colorInput>\n <div class=\"w-100 d-flex mt-2\">\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 1</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.background\"\n (click)=\"colorInput1.click()\"></div>\n </div>\n </div>\n <div class=\"w-100 d-flex flex-column\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Color 2</label>\n <div class=\"d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data?.buttonStyle?.secondaryBackground\"\n (click)=\"colorInput.click()\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"gradient-direction\">\n <div class=\"left-direction mt-3 mb-1\"> Direction</div>\n <div class=\"right-direction\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10 w-80\">\n <ng-container *ngFor=\"let direction of directionType\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle?.gradientDirection === direction.type}\"\n (click)=\"data.buttonStyle.gradientDirection = direction.type;changeButtonStyle()\">\n <img class=\"w-10\" [src]=\"direction.icon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection !== direction.type\" loading=\"lazy\">\n <img class=\"w-10\" [src]=\"direction.activeIcon\" alt=\"icon\"\n *ngIf=\"data.buttonStyle?.gradientDirection === direction.type\" loading=\"lazy\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"mt-20\" *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"text-background\">\n <input type=\"color\" class=\"color\" [(ngModel)]=\"data.buttonStyle.textColor\"\n (ngModelChange)=\"changeButtonStyle()\" style=\"visibility: hidden;\" #colorInput3>\n <div class=\"w-100 d-flex flex-column mt-2\">\n <label class=\"color-text mb-1 d-flex justify-content-center\">Text Color</label>\n <!-- <div class=\"w-100 d-flex justify-content-center\">\n <div class=\"custom-input\" [style.background]=\"data.buttonStyle.textColor\"\n (click)=\"colorInput3.click()\"></div>\n </div> -->\n </div>\n </div>\n </div>\n\n <div class=\"corner-radius bg-white p-2 br-10 d-flex justify-content-between\"\n *ngIf=\"data.buttonStyle.type != 'Text'\">\n <div class=\"sub-text-1 d-flex align-items-center\">\n Corner Radius\n </div>\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"box-shadow d-flex br-10\">\n <ng-container *ngFor=\"let shape of buttonShapes\">\n <div class=\"color-box d-flex p-2 align-items-center justify-content-center br-10\"\n [ngClass]=\"{'selected' : data.buttonStyle.shape === shape.type}\"\n (click)=\"data.buttonStyle.shape = shape.type;changeButtonStyle()\">\n <img [src]=\"shape.icon\" alt=\"icon\" *ngIf=\"data.buttonStyle.shape !== shape.type\" loading=\"lazy\"\n class=\"transition-image\">\n <img [src]=\"shape.activeIcon\" alt=\"icon\" *ngIf=\"data.buttonStyle?.shape === shape.type\"\n loading=\"lazy\" class=\"transition-image\">\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"p-2 d-flex justify-content-between align-items-center mt-20\">\n <div class=\"fw-bold\">Show Icon</div>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.showIcon\" role=\"switch\">\n </div>\n </div>\n <div>\n <!-- <p class=\"heading mb-0\">Image</p> -->\n <div class=\"upload-image cp\" *ngIf=\"link.showIcon && !link?.icon?.url\" (click)=\"updateImage()\">\n <img loading=\"lazy\"\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\n alt=\"\">\n <p class=\"upload-text mb-0\">Upload a file</p>\n <p class=\"upload-text mb-0\">or select an existing one</p>\n <span class=\"upload-text\">up to 32MB</span>\n </div>\n <div class=\"sec d-flex align-items-center\" *ngIf=\"link.showIcon && link?.icon?.url\">\n <ng-container *ngIf=\"!imgLoader\">\n <img [src]=\"link?.icon?.url\">\n <div class=\"repalce-image cursor-pointer\" (click)=\"updateImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon w-4 h-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m4 16 4.58579-4.5858c.78104-.781 2.04741-.781 2.82841 0L16 16m-2-2 1.5858-1.5858c.781-.781 2.0474-.781 2.8284 0L20 14m-6-6h.01M6 20h12c1.1046 0 2-.8954 2-2V6c0-1.10457-.8954-2-2-2H6c-1.10457 0-2 .89543-2 2v12c0 1.1046.89543 2 2 2Z\">\n </path>\n </svg>\n </div>\n\n <div class=\"delete-image cursor-pointer \" (click)=\"deleteImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"#ffffff\" viewBox=\"0 0 24 24\" width=\"24\"\n height=\"24\" class=\"icon h-4 w-4\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"\n d=\"m19 7-.8673 12.1425C18.0579 20.1891 17.187 21 16.1378 21H7.86224c-1.04928 0-1.92016-.8109-1.99492-1.8575L5 7m5 4v6m4-6v6m1-10V4c0-.55228-.4477-1-1-1h-4c-.55228 0-1 .44772-1 1v3M4 7h16\">\n </path>\n </svg>\n </div>\n </ng-container>\n <ng-container *ngIf=\"imgLoader\">\n <div class=\"upload_spinner d-flex w-100 h-100 justify-content-center align-items-center\">\n <mat-spinner></mat-spinner>\n </div>\n </ng-container>\n </div>\n\n\n </div>\n\n <div class=\"fw-bold p-2 mb-2\">Icon Position</div>\n <div class=\"tabs d-flex px-2 gap-3 mb-2\" *ngIf=\"link.showIcon\">\n <div class=\"tab px-3 py-2\" *ngFor=\"let tab of ['left','right']\" (click)=\"link.icon.iconPosition = tab\"\n [class.selectedTab]=\"link?.icon?.iconPosition == tab\">\n {{tab | titlecase}}\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"data?.linkData?.length != 0\">\n\n\n <div class=\"groups cp\">\n <div *ngFor=\"let type of linkType\" [ngClass]=\"{'selectedType' : type.type === selectedType}\"\n (click)=\"changeType(type.type)\">{{type.type}}</div>\n </div>\n\n <div class=\"field-container mt-3\">\n <div *ngIf=\"link.linkType === RedirectionLink.Page\">\n <label class=\"input-label-1 mt-3 mb-2\">Select Page</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" (ngModelChange)=\"setRedirectUrl()\">\n <option value=\"\" selected>Select from your existing pages</option>\n <option *ngFor=\"let page of templatePage\" [value]=\"page.id\" style=\"padding: 10px;\">\n {{page.pageName}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <!-- <div class=\"sub-text\">Select from your existing pages</div> -->\n </div>\n\n <div *ngIf=\"link.linkType === RedirectionLink.section\">\n <label class=\"mt-3 mb-2 input-label-1\">Section</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.pageId\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Section</option>\n <option *ngFor=\"let section of templatePage[0].components\" [value]=\"section.id\">{{section.sectionName}}\n </option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n </div>\n\n <div\n *ngIf=\"link.linkType === RedirectionLink.External || link.linkType === RedirectionLink.Email || link.linkType === RedirectionLink.Phone\">\n <label class=\"mt-3 mb-2 input-label-1\">Select type</label>\n <div class=\"drop-down-container w-100 d-flex mb-2\">\n <select [(ngModel)]=\"link.linkType\" style=\"cursor:pointer\">\n <option value=\"\" selected>Select the Type</option>\n <option *ngFor=\"let type of externalLinkType\" [value]=\"type.type\">{{type.type}}</option>\n </select>\n <div class=\"down-arrow d-flex align-items-center justify-content-center\"><img\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/268410c1742286052940Down%202.png\"\n alt=\"\">\n </div>\n </div>\n <label class=\"input-label mb-2\">{{link.linkType === RedirectionLink.External ? 'Website' : link.linkType ===\n RedirectionLink.Email ? 'Email Address' : 'Phone Number'}}</label>\n <input type=\"text\" class=\"input-text\" [(ngModel)]=\"link.redirectionUrl\"\n [placeholder]=\"link.linkType === RedirectionLink.External ? 'example : https://facebook.com': ''\">\n </div>\n\n <div class=\"d-flex justify-content-between mt-10\">\n <label class=\"input-label-2\">Open in a new browser tab</label>\n <div class=\"form-check form-switch ml-auto\">\n <input class=\"form-check-input switch-btn\" type=\"checkbox\" [(ngModel)]=\"link.newTab\" role=\"switch\">\n </div>\n </div>\n\n </div>\n\n <div class=\"footer w-100 align-items-center justify-content-center\">\n <button *ngIf=\"addLink\" (click)=\"addNewLink()\">Update Link</button>\n </div>\n\n </ng-container>\n\n </div>\n\n</section>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}:host{--grey-color: rgba(250, 250, 250, 1)}.br-7{border-radius:7px}.br-10{border-radius:10px}.switch-btn{position:relative;z-index:10}.upload-image{border:3px dashed rgba(44,44,44,.6);display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2rem;margin:10px 10px 22px;border-radius:20px;box-shadow:#0000000d 0 1px 2px}.upload-image img{margin-bottom:8px;height:40px}.upload-text{background:var(--primary-bg-color);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:500}.sec{padding:10px 10px 22px;position:relative}.sec img{width:100%;height:200px;border-radius:20px}.delete-image{background-color:#d92d20;width:30px;height:30px;border-radius:6px;display:flex;justify-content:center;align-items:center;position:absolute;top:20px;right:20px}.repalce-image{display:flex;align-items:center;background:#fff;padding:2px;border-radius:6px;position:absolute;bottom:30px;left:20px}.selectedTab{background:#39393934;font-weight:700}.tab{border:1px solid rgba(44,44,44,.6);border-radius:12px}.w-90{width:90%}.sub-text-1{font-size:15px;color:#000}.w-48{width:48%}.box-shadow{box-shadow:0 0 4px #00000040}.color-box{width:50px}.selected{background:var(--primary-bg-color)}.header{height:45px;display:flex;justify-content:space-between;border-bottom:2px solid #F0F0F0;align-items:center;padding-left:15px;padding-right:15px}.header p{font-size:16px;font-weight:600;font-family:var(--primary-font-family)}.body{padding:15px}.footer{height:45px;position:absolute;bottom:0;left:0;padding:0 15px}.footer button{border:unset;border-radius:10px;font-size:15px;font-weight:500;padding:5px;color:#fff;text-align:center;background:var(--primary-bg-color)}p{margin-bottom:0!important}.link-text{font-size:15px;font-weight:600;font-family:var(--primary-font-family);color:#434343;margin-bottom:10px}.input-text{height:37px;width:100%;border:1px solid var(--grey-color);border-radius:5px;outline:none;font-size:14px;padding:10px 20px;font-weight:400;color:#090909e6}.link-text-input{background-color:var(--grey-color)}.desc{margin-top:10px;font-size:13px;color:#09090980;font-weight:400;font-family:Inter;margin-bottom:25px!important}hr{border:1px solid rgba(116,116,116,.2)}.groups{display:flex;justify-content:space-between;margin-top:25px}.groups div{font-size:15px;font-weight:600;color:#2c2c2c99;padding:6px 30px;cursor:pointer}.selectedType{text-align:center;border:1px solid var(--primary-bg-color);color:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040;border-radius:10px}.f-18{font-size:18px}.mt-10{margin-top:10px}.drop-down-container{padding:10px;border-radius:8px;background:#fff}.drop-down-container select{width:90%;appearance:none;position:relative;outline:unset;border:unset;border-right:3px solid rgba(230,230,230,1);background:#fff;font-size:14px;padding:0 10px;border-radius:unset}.drop-down-container .down-arrow{width:10%;padding:0 6px}select option{padding:10px;background:#fff;color:#000}.field-container{background:var(--grey-color);border-radius:13px;padding:10px}.sub-text{font-size:13px;color:#09090980}.input-label-1{font-size:16px;font-weight:600}.input-label-2{color:#09090980}option:hover{background:var(--primary-bg-color)}.cp{cursor:pointer}.colorType{padding:3px 10px;box-shadow:0 0 4px #00000040;border-radius:10px;width:25%;border:1px solid var(--primary-bg-color)}.colorType select{background:transparent}.border-0{outline:unset}.transition-image{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.color{background:#fff;padding:1rem}.custom-mat-form{width:100%;margin:10px 0;background-color:#f9f9f9;border-radius:8px}.custom-mat-form.mat-form-field-appearance-outline .mat-form-field-outline{color:#1976d2;border-color:#1976d2}.custom-mat-form .mat-form-field-label{color:#666;font-weight:500}.custom-mat-form .mat-select-trigger{padding:10px;font-size:14px;color:#333}::ng-deep .mat-select-panel{background-color:#fff;color:#333}::ng-deep .mat-option{font-size:14px;padding:10px 16px}::ng-deep .mat-option:hover{background-color:#e0f7fa}.color-container{padding:7px;gap:10px;border-radius:10px}.custom-input{height:35px;width:80%;border-radius:2rem;box-shadow:0 1px 3px #3c404326,0 1px 2px #3c404326}.outline-btn{border:2px solid #374151;color:#374151;background:transparent}.solid-btn{background-color:#374151;border:2px solid #374151;color:#fff}.text-btn{border:unset;color:#000}.btn-style{padding-top:5px;padding-bottom:5px;font-size:16px!important;margin-top:14px}.box-shadow{height:40px}.gradientStyle{-webkit-background-clip:text!important;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}\n"] }]
|
|
247
253
|
}], ctorParameters: () => [{ type: i1.ElementServiceService }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{
|
|
248
254
|
type: Inject,
|
|
249
255
|
args: [MAT_DIALOG_DATA]
|
|
250
256
|
}] }, { type: i3.EventsService }, { type: i2.MatDialog }] });
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9saW5rLWVkaXRvci9saW5rLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2xpbmstZWRpdG9yL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQVN4RSxNQUFNLE9BQU8sbUJBQW1C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QUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDaEQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNoRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNySixDQUFDO0lBR0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lB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Z0JBQ2xELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDeEIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQTtRQUM3QixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtnQkFDcEMsTUFBSztZQUNQLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0FyUFUsbUJBQW1CLG1GQXFHcEIsZUFBZTttR0FyR2QsbUJBQW1CLDZFQzFCaEMseXBoQkEwVFUsNnFKRHBTRSxZQUFZLCtlQUFFLFdBQVcsMHJDQUFFLGVBQWUsOEJBQUUsY0FBYyw4QkFBRSxlQUFlLDhCQUFFLGFBQWEsbUxBQTRCLGVBQWUsK0JBQUUsa0JBQWtCOzs0RkFJeEosbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUM7OzBCQXlHakssTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b24sIEJ1dHRvblN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgR3JhZGllbnREaXJlY3Rpb24sIFJlZGlyZWN0aW9uTGlua1R5cGUgfSBmcm9tICcuLi8uLi9zdHlsZXMvaW5kZXgnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1lZGlhU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9tZWRpYS1zZWxlY3Rvci9tZWRpYS1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0U2xpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW1wby1saW5rLWVkaXRvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXRPcHRpb25Nb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUsIE1hdEljb25Nb2R1bGUsIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSwgTWF0U2xpZGVyTW9kdWxlLCBNYXRQcm9ncmVzc1NwaW5uZXJdLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluay1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbGluay1lZGl0b3IuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTGlua0VkaXRvckNvbXBvbmVudCB7XG4gIGxpbms6IEJ1dHRvbiA9IHtcbiAgICBsaW5rVHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5QYWdlLFxuICAgIGxhYmVsOiAnJyxcbiAgICByZWRpcmVjdGlvblVybDogJycsXG4gICAgcGFnZUlkOiAnJyxcbiAgICBuZXdUYWI6IGZhbHNlLFxuICB9O1xuXG4gIFJlZGlyZWN0aW9uTGluayA9IFJlZGlyZWN0aW9uTGlua1R5cGVcbiAgZXh0ZXJuYWxMaW5rVHlwZTogQXJyYXk8dHlwZT4gPSBbXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FbWFpbFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5QaG9uZVxuICAgIH1cbiAgICAvLyB7XG4gICAgLy8gICB0eXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLnNlY3Rpb25cbiAgICAvLyB9XG4gIF1cblxuICBzZWxlY3RlZFR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUgPSBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2U7XG4gIGxpbmtUeXBlOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuc2VjdGlvblxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbFxuICAgIH1cbiAgXVxuXG4gIGJ1dHRvblR5cGVzOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBcIlNvbGlkXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFwiT3V0bGluZVwiXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcIlRleHRcIlxuICAgIH1cbiAgXVxuXG4gIGJ1dHRvblNoYXBlczogYW55W10gPSBbXG4gICAge1xuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzgzMjk2OGMxNzQ3MjIxMjcwODU2VmVjdG9yJTIwNDglMjAoMikucG5nXCIsXG4gICAgICBhY3RpdmVJY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNDgxODUwYzE3NDcyMjA5Mzc2OTNWZWN0b3IlMjA0OCUyMCgxKS5wbmdcIixcbiAgICAgIHR5cGU6IFwiU3F1YXJlXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIGljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy84MzA4NDJjMTc0NzIyMDc1NzQ1M1ZlY3RvciUyMDQ5LnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzc4MDYwMWMxNzQ3MjIxMjQzNjEzVmVjdG9yJTIwNDklMjAoMSkucG5nXCIsXG4gICAgICB0eXBlOiBcIkN1cnZlXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIGljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy8yMTAzNTBjMTc0NzIyMDgwMzUyMVZlY3RvciUyMDUwLnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzkzOTYxMWMxNzQ3MjIwOTAwMTI0VmVjdG9yJTIwNTAlMjAoMSkucG5nXCIsXG4gICAgICB0eXBlOiBcIlJvdW5kXCJcbiAgICB9XG4gIF1cblxuICBkaXJlY3Rpb25UeXBlOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNjY0NDAzYzE3NDczMDY4NDAzMDRhcnJvdy1kb3duLnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzU4NzQzMGMxNzQ3MzA2ODk4NDY1YXJyb3ctZG93bi5wbmdcIixcbiAgICAgIHR5cGU6IFwiRE9XTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMTkzMzU5YzE3NDczMDY5NDk1MjJhcnJvdy1yaWdodC5wbmdcIixcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy80NTA5NDNjMTc0NzMxNzc1OTM4OGFycm93LXJpZ2h0ICgyKS5wbmdcIixcbiAgICAgIHR5cGU6IFwiUklHSFRcIlxuICAgIH0sXG4gICAge1xuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzQ5MzgzOGMxNzQ3MzA3MDk0ODIxYXJyb3ctcmlnaHQgKDMpLnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzY5OTkzMmMxNzQ3MzA3MTU3OTQ0YXJyb3ctcmlnaHQgKDQpLnBuZ1wiLFxuICAgICAgdHlwZTogXCJESUFHT05BTF9SSUdIVFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTExOTcxYzE3NDczMDcxOTkxMTVhcnJvdy1yaWdodCAoNSkucG5nXCIsXG4gICAgICBhY3RpdmVJY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTY4NzI2YzE3NDczMDcyMjcyNTVhcnJvdy1yaWdodCAoNikucG5nXCIsXG4gICAgICB0eXBlOiBcIkRJQUdPTkFMX0xFRlRcIlxuICAgIH1cblxuICBdXG5cblxuXG5cblxuICB0ZW1wbGF0ZVBhZ2U6IGFueVtdID0gW107XG4gIGFkZExpbms6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWRpdG9yU2VydmljZTogRWxlbWVudFNlcnZpY2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxMaW5rRWRpdG9yQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWRkTGluayA9IHRydWU7XG4gICAgaWYgKHRoaXMuZGF0YT8ubGlua0RhdGEpIHtcbiAgICAgIHRoaXMubGluayA9IHRoaXMuZGF0YS5saW5rRGF0YTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gdGhpcy5saW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmtUeXBlLkVtYWlsIHx8IHRoaXMubGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rVHlwZS5QaG9uZSA/IFJlZGlyZWN0aW9uTGlua1R5cGUuRXh0ZXJuYWwgOiB0aGlzLmxpbmsubGlua1R5cGU7XG4gICAgICB0aGlzLmFkZExpbmsgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUgJiYgdGhpcy5kYXRhLmJ1dHRvblN0eWxlLmdyYWRpZW50RGlyZWN0aW9uKVxuICAgICAgICB0aGlzLmRhdGEuYnV0dG9uU3R5bGUuZ3JhZGllbnREaXJlY3Rpb24gPSB0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy5ncmFkaWVudERpcmVjdGlvbiB8fCBHcmFkaWVudERpcmVjdGlvbi5ET1dOO1xuICAgIH1cbiAgICB0aGlzLmdldFRlbXBsYXRlUGFnZSgpO1xuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGdldFRlbXBsYXRlUGFnZSgpIHtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0VGVtcGxhdGUoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLnRlbXBsYXRlUGFnZSA9IHJlcy5kYXRhO1xuICAgIH0pXG4gIH1cblxuICBjaGFuZ2VUeXBlKHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUpIHtcbiAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IHR5cGU7XG4gICAgdGhpcy5saW5rLmxpbmtUeXBlID0gdGhpcy5zZWxlY3RlZFR5cGU7XG4gIH1cblxuICBhZGROZXdMaW5rKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbGluazogdGhpcy5saW5rIH0pXG4gIH1cblxuICBnZXRDb2xvckxhYmVsKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnR5cGUgPT0gJ091dGxpbmUnKSB7XG4gICAgICByZXR1cm4gJ091dGxpbmUgQ29sb3InO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnR5cGUgPT0gJ1RleHQnKSB7XG4gICAgICByZXR1cm4gJ1RleHQgQ29sb3InO1xuICAgIH1cbiAgICByZXR1cm4gJ0J1dHRvbiBDb2xvcic7XG4gIH1cblxuXG4gIGJ1dHRvblN0eWxlczogYW55O1xuICBjaGFuZ2VCdXR0b25TdHlsZSgpIHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGlmICh0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdPdXRsaW5lJyB8fCB0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdUZXh0Jykge1xuICAgICAgdGhpcy5iYWNrZ3JvdW5kVHlwZSA9IFsnU29saWQnXTtcbiAgICAgIHRoaXMuZGF0YS5idXR0b25TdHlsZS5jb2xvclR5cGUgPSAnU29saWQnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYmFja2dyb3VuZFR5cGUgPSBbJ1NvbGlkJywgJ0dyYWRpZW50J107XG4gICAgfVxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmJ1dHRvblN0eWxlQ2hhbmdlQ2hlY2tzLmVtaXQoeyBpZDogdGhpcy5kYXRhLmJ1dHRvbklkLCBzdHlsZTogdGhpcy5kYXRhLmJ1dHRvblN0eWxlLCBiYWNrZ3JvdW5kSW5mbzogdGhpcy5kYXRhLmJhY2tncm91bmRJbmZvIH0pO1xuICB9XG4gIGdldENvbnRyYXN0VGV4dENvbG9yKGJhY2tncm91bmRIZXg6IGFueSkge1xuICAgIGxldCBoZXggPSBiYWNrZ3JvdW5kSGV4Py5yZXBsYWNlKCcjJywgJycpO1xuXG4gICAgaWYgKGhleD8ubGVuZ3RoID09PSAzKSB7XG4gICAgICBoZXggPSBoZXguc3BsaXQoJycpLm1hcCgoYzogYW55KSA9PiBjICsgYykuam9pbignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDAsIDIpLCAxNikgLyAyNTU7XG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDIsIDIpLCAxNikgLyAyNTU7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDQsIDIpLCAxNikgLyAyNTU7XG5cbiAgICBjb25zdCBsdW1pbmFuY2UgPSAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG5cbiAgICB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudGV4dENvbG9yID0gbHVtaW5hbmNlIDwgMC41ID8gXCIjRkZGRkZGXCIgOiBcIiMwMDAwMDBcIjtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5idXR0b25TdHlsZUNoYW5nZUNoZWNrcy5lbWl0KHsgaWQ6IHRoaXMuZGF0YS5idXR0b25JZCwgc3R5bGU6IHRoaXMuZGF0YS5idXR0b25TdHlsZSwgYmFja2dyb3VuZEluZm86IHRoaXMuZGF0YS5iYWNrZ3JvdW5kSW5mbyB9KTtcbiAgfVxuICBiYWNrZ3JvdW5kVHlwZTogc3RyaW5nW10gPSBbJ1NvbGlkJywgJ0dyYWRpZW50J107XG5cbiAgc2V0Qm9yZGVyUmFkaXVzKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnVGV4dCcpIHtcbiAgICAgIHJldHVybiAnMHB4JztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS5zaGFwZSA9PSAnU3F1YXJlJykge1xuICAgICAgcmV0dXJuICcwcHgnO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09ICdDdXJ2ZScpIHtcbiAgICAgIHJldHVybiAnN3B4JztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS5zaGFwZSA9PSAnUm91bmQnKSB7XG4gICAgICByZXR1cm4gJzk5cHgnO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cbiAgc2V0Qm9yZGVyKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnVGV4dCcpIHtcbiAgICAgIHJldHVybiAndW5zZXQnO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnR5cGUgPT0gJ1NvbGlkJykge1xuICAgICAgcmV0dXJuIGB1bnNldGA7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnT3V0bGluZScpIHtcbiAgICAgIHJldHVybiBgMnB4IHNvbGlkICR7dGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kfWA7XG4gICAgfVxuICAgIHJldHVybiAndW5zZXQnO1xuICB9XG4gIHNldENvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnRleHRDb2xvciB8fCAnI2ZmZmZmZic7XG4gIH1cbiAgc2V0QmFja2dyb3VuZCgpIHtcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5jb2xvclR5cGUgPT0gJ1NvbGlkJyAmJiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5jb2xvclR5cGUgPT0gJ0dyYWRpZW50JyAmJiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBHcmFkaWVudERpcmVjdGlvblt0aGlzLmRhdGEuYnV0dG9uU3R5bGUuZ3JhZGllbnREaXJlY3Rpb24gYXMgdW5rbm93biBhcyBrZXlvZiB0eXBlb2YgR3JhZGllbnREaXJlY3Rpb24gfHwgR3JhZGllbnREaXJlY3Rpb24uRE9XTl07XG4gICAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgke2RpcmVjdGlvbn0sICR7dGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kfSwgJHt0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnNlY29uZGFyeUJhY2tncm91bmR9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxuXG4gIGltZ0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhc3luYyB1cGRhdGVJbWFnZSgpIHtcbiAgICB0aGlzLmltZ0xvYWRlciA9IHRydWU7XG4gICAgY29uc3QgbWVkaWFTZWxlY3RvckRpYWxvZyA9IHRoaXMubWF0RGlhbG9nLm9wZW4oTWVkaWFTZWxlY3RvckNvbXBvbmVudCwgeyBkYXRhOiB7IG11bHRpcGxlOiBmYWxzZSB9LCBwYW5lbENsYXNzOiBcIm1lZGlhLXNlbGVjdG9yXCIgfSlcbiAgICBtZWRpYVNlbGVjdG9yRGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5saW5rLmljb24udXJsID0gcmVzWzBdLmFzc2V0c1swXS51cmwgPz8gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltZ0xvYWRlciA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRlbGV0ZUltYWdlKCkge1xuICAgIHRoaXMubGluay5pY29uLnVybCA9ICcnO1xuICB9XG5cbiAgc2V0UmVkaXJlY3RVcmwoKSB7XG4gICAgdGhpcy5saW5rLnJlZGlyZWN0aW9uVXJsID0gJydcbiAgICBmb3IgKGxldCBwYWdlIG9mIHRoaXMudGVtcGxhdGVQYWdlKSB7XG4gICAgICBpZiAocGFnZS5pZCA9PT0gdGhpcy5saW5rLnBhZ2VJZCkge1xuICAgICAgICB0aGlzLmxpbmsucmVkaXJlY3Rpb25VcmwgPSBwYWdlLnBhdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cbmludGVyZmFjZSB0eXBlIHtcbiAgdHlwZTogc3RyaW5nO1xufVxuIiwiPHNlY3Rpb24+XG4gIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICA8cD57e2RhdGEudHlwZSA9PSAnQlVUVE9OJyA/IFwiQnV0dG9uXCIgOiBcIkxpbmtcIn19IFNldHRpbmdzPC9wPlxuICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIGNsYXNzPVwiZi0xOCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3BcIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJib2R5XCI+XG4gICAgPGRpdj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImxpbmstdGV4dFwiPnt7ZGF0YS50eXBlID09ICdCVVRUT04nID8gXCJCdXR0b25cIiA6IFwiTGlua1wifX0gVGV4dDwvbGFiZWw+PGJyPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGxpbmstdGV4dC1pbnB1dFwiIFsobmdNb2RlbCldPVwibGluay5sYWJlbFwiPlxuICAgICAgPHAgY2xhc3M9XCJkZXNjXCI+VGhpcyBpcyB0aGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIHRvIHVzZXJzPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGhyPlxuXG4gICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlID09ICdCVVRUT04nXCI+XG4gICAgICA8c2VsZWN0PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdHlsZSBvZiBzdHlsZXNcIj5cbiAgICAgICAgICA8b3B0aW9uIChjbGljayk9XCJjaGFuZ2VCdXR0b25TdHlsZShzdHlsZSlcIiBbdmFsdWVdPVwic3R5bGUubmFtZVwiPnt7c3R5bGUubmFtZX19PC9vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNlbGVjdD5cbiAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlID09ICdCVVRUT04nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIG1iLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsaW5rLXRleHQgbWItMVwiPkJ1dHRvbjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJib3JkZXItMCB3LTEwMFwiIFsobmdNb2RlbCldPVwiZGF0YS5idXR0b25TdHlsZS50eXBlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQnV0dG9uU3R5bGUoKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mIGJ1dHRvblR5cGVzXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwidHlwZS50eXBlXCI+XG4gICAgICAgICAgICAgICAgICB7e3R5cGUudHlwZSB8IHRpdGxlY2FzZX19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXN0eWxlIHctODBcIiBbc3R5bGUuYm9yZGVyUmFkaXVzXT1cInNldEJvcmRlclJhZGl1cygpXCIgW3N0eWxlLmJvcmRlcl09XCJzZXRCb3JkZXIoKVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInNldEJhY2tncm91bmQoKVwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnVGV4dCcgfHwgZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdPdXRsaW5lJykgJiYgZGF0YT8uYnV0dG9uU3R5bGU/LmNvbG9yVHlwZSA9PT0gJ0dyYWRpZW50J1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnbGluZWFyLWdyYWRpZW50KDkwZGVnLCAnICsgZGF0YT8uYnV0dG9uU3R5bGU/LmJhY2tncm91bmQgKyAnIDAlLCAnICsgZGF0YT8uYnV0dG9uU3R5bGUuc2Vjb25kYXJ5QmFja2dyb3VuZCArICcgMTAwJSknXG4gICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIHt7IGxpbmsubGFiZWwgPyBsaW5rLmxhYmVsIDogXCJCdXR0b24gVGV4dFwifX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LnN0eWxlPy5jb2xvclR5cGUgPT0gJ1NvbGlkJyB8fCBkYXRhPy5idXR0b25TdHlsZT8udHlwZSA9PSAnU29saWQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic2V0Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGxpbmsubGFiZWwgPyBsaW5rLmxhYmVsIDogXCJCdXR0b24gVGV4dFwifX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnT3V0bGluZSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZXRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdUZXh0J1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHt7IGxpbmsubGFiZWwgPyBsaW5rLmxhYmVsIDogXCJCdXR0b24gVGV4dFwifX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJsaW5rLXRleHRcIj5CdXR0b24gU3R5bGU8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItY29udGFpbmVyIHJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvciBici0xMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXRvcCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtc2lkZVwiPkNvbG9yPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zaWRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJib3JkZXItMCB3LTEwMFwiIFsobmdNb2RlbCldPVwiZGF0YS5idXR0b25TdHlsZS5jb2xvclR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHR5cGUgb2YgYmFja2dyb3VuZFR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHN0eWxlPVwicGFkZGluZzogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHR5cGUgfCB0aXRsZWNhc2UgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIwXCIgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlLmNvbG9yVHlwZSA9PT0gJ1NvbGlkJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhY2tncm91bmRcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJnZXRDb250cmFzdFRleHRDb2xvcihkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmQpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiXG4gICAgICAgICAgICAgICAgICAgICNjb2xvcklucHV0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPiB7eyBnZXRDb2xvckxhYmVsKCl9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQuY2xpY2soKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMjBcIiAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlID09PSAnR3JhZGllbnQnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFja2dyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUJ1dHRvblN0eWxlKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI2NvbG9ySW5wdXQxPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUuc2Vjb25kYXJ5QmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUJ1dHRvblN0eWxlKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI2NvbG9ySW5wdXQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbG9yLXRleHQgbWItMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPkNvbG9yIDE8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRhdGE/LmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQxLmNsaWNrKClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2xvci10ZXh0IG1iLTEgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5Db2xvciAyPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5idXR0b25TdHlsZT8uc2Vjb25kYXJ5QmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2xvcklucHV0LmNsaWNrKClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JhZGllbnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1kaXJlY3Rpb24gbXQtMyBtYi0xXCI+IERpcmVjdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWRpcmVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC1zaGFkb3cgZC1mbGV4IGJyLTEwIHctODBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRpcmVjdGlvbiBvZiBkaXJlY3Rpb25UeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1ib3ggZC1mbGV4IHAtMiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBici0xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZCcgOiBkYXRhLmJ1dHRvblN0eWxlPy5ncmFkaWVudERpcmVjdGlvbiA9PT0gZGlyZWN0aW9uLnR5cGV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YS5idXR0b25TdHlsZS5ncmFkaWVudERpcmVjdGlvbiA9IGRpcmVjdGlvbi50eXBlO2NoYW5nZUJ1dHRvblN0eWxlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMFwiIFtzcmNdPVwiZGlyZWN0aW9uLmljb25cIiBhbHQ9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZT8uZ3JhZGllbnREaXJlY3Rpb24gIT09IGRpcmVjdGlvbi50eXBlXCIgbG9hZGluZz1cImxhenlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMFwiIFtzcmNdPVwiZGlyZWN0aW9uLmFjdGl2ZUljb25cIiBhbHQ9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZT8uZ3JhZGllbnREaXJlY3Rpb24gPT09IGRpcmVjdGlvbi50eXBlXCIgbG9hZGluZz1cImxhenlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yMFwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZS50eXBlICE9ICdUZXh0J1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFja2dyb3VuZFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvclwiIFsobmdNb2RlbCldPVwiZGF0YS5idXR0b25TdHlsZS50ZXh0Q29sb3JcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUJ1dHRvblN0eWxlKClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgI2NvbG9ySW5wdXQzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIG10LTJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2xvci10ZXh0IG1iLTEgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5UZXh0IENvbG9yPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhLmJ1dHRvblN0eWxlLnRleHRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2xvcklucHV0My5jbGljaygpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ybmVyLXJhZGl1cyBiZy13aGl0ZSBwLTIgIGJyLTEwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUudHlwZSAhPSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgQ29ybmVyIFJhZGl1c1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtc2hhZG93IGQtZmxleCBici0xMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNoYXBlIG9mIGJ1dHRvblNoYXBlc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWJveCBkLWZsZXggcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJyLTEwXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZCcgOiBkYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09PSBzaGFwZS50eXBlfVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRhLmJ1dHRvblN0eWxlLnNoYXBlID0gc2hhcGUudHlwZTtjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzaGFwZS5pY29uXCIgYWx0PVwiaWNvblwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZS5zaGFwZSAhPT0gc2hhcGUudHlwZVwiIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyYW5zaXRpb24taW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInNoYXBlLmFjdGl2ZUljb25cIiBhbHQ9XCJpY29uXCIgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlPy5zaGFwZSA9PT0gc2hhcGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIiBjbGFzcz1cInRyYW5zaXRpb24taW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTIwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+U2hvdyBJY29uPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG1sLWF1dG9cIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IHN3aXRjaC1idG5cIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImxpbmsuc2hvd0ljb25cIiByb2xlPVwic3dpdGNoXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8IS0tIDxwIGNsYXNzPVwiaGVhZGluZyBtYi0wXCI+SW1hZ2U8L3A+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWltYWdlIGNwXCIgKm5nSWY9XCJsaW5rLnNob3dJY29uICYmICFsaW5rPy5pY29uPy51cmxcIiAoY2xpY2spPVwidXBkYXRlSW1hZ2UoKVwiPlxuICAgICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81NDc1MDBjMTc0NDY5ODgzMDM0M3VwbG9hZC1vbmUlMjAlMjgxJTI5LnBuZ1wiXG4gICAgICAgICAgICBhbHQ9XCJcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC10ZXh0IG1iLTBcIj5VcGxvYWQgYSBmaWxlPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXRleHQgbWItMFwiPm9yIHNlbGVjdCBhbiBleGlzdGluZyBvbmU8L3A+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtdGV4dFwiPnVwIHRvIDMyTUI8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImxpbmsuc2hvd0ljb24gJiYgbGluaz8uaWNvbj8udXJsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWdMb2FkZXJcIj5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJsaW5rPy5pY29uPy51cmxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBhbGNlLWltYWdlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInVwZGF0ZUltYWdlKClcIj5cbiAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIiBjbGFzcz1cImljb24gdy00IGgtNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICBkPVwibTQgMTYgNC41ODU3OS00LjU4NThjLjc4MTA0LS43ODEgMi4wNDc0MS0uNzgxIDIuODI4NDEgMEwxNiAxNm0tMi0yIDEuNTg1OC0xLjU4NThjLjc4MS0uNzgxIDIuMDQ3NC0uNzgxIDIuODI4NCAwTDIwIDE0bS02LTZoLjAxTTYgMjBoMTJjMS4xMDQ2IDAgMi0uODk1NCAyLTJWNmMwLTEuMTA0NTctLjg5NTQtMi0yLTJINmMtMS4xMDQ1NyAwLTIgLjg5NTQzLTIgMnYxMmMwIDEuMTA0Ni44OTU0MyAyIDIgMlpcIj5cbiAgICAgICAgICAgICAgICA8L3BhdGg+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtaW1hZ2UgY3Vyc29yLXBvaW50ZXIgXCIgKGNsaWNrKT1cImRlbGV0ZUltYWdlKClcIj5cbiAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCIgY2xhc3M9XCJpY29uIGgtNCB3LTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgZD1cIm0xOSA3LS44NjczIDEyLjE0MjVDMTguMDU3OSAyMC4xODkxIDE3LjE4NyAyMSAxNi4xMzc4IDIxSDcuODYyMjRjLTEuMDQ5MjggMC0xLjkyMDE2LS44MTA5LTEuOTk0OTItMS44NTc1TDUgN201IDR2Nm00LTZ2Nm0xLTEwVjRjMC0uNTUyMjgtLjQ0NzctMS0xLTFoLTRjLS41NTIyOCAwLTEgLjQ0NzcyLTEgMXYzTTQgN2gxNlwiPlxuICAgICAgICAgICAgICAgIDwvcGF0aD5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nTG9hZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkX3NwaW5uZXIgZC1mbGV4IHctMTAwIGgtMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBwLTIgbWItMlwiPkljb24gUG9zaXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzIGQtZmxleCBweC0yIGdhcC0zIG1iLTJcIiAqbmdJZj1cImxpbmsuc2hvd0ljb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYiBweC0zIHB5LTJcIiAqbmdGb3I9XCJsZXQgdGFiIG9mIFsnbGVmdCcsJ3JpZ2h0J11cIiAoY2xpY2spPVwibGluay5pY29uLmljb25Qb3NpdGlvbiA9IHRhYlwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkVGFiXT1cImxpbms/Lmljb24/Lmljb25Qb3NpdGlvbiA9PSB0YWJcIj5cbiAgICAgICAgICB7e3RhYiB8IHRpdGxlY2FzZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubGlua0RhdGE/Lmxlbmd0aCAhPSAwXCI+XG5cblxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwcyBjcFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0eXBlIG9mIGxpbmtUeXBlXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFR5cGUnIDogdHlwZS50eXBlID09PSBzZWxlY3RlZFR5cGV9XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVHlwZSh0eXBlLnR5cGUpXCI+e3t0eXBlLnR5cGV9fTwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgbXQtM1wiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLlBhZ2VcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbnB1dC1sYWJlbC0xIG10LTMgbWItMlwiPlNlbGVjdCBQYWdlPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsucGFnZUlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0UmVkaXJlY3RVcmwoKVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+U2VsZWN0IGZyb20geW91ciBleGlzdGluZyBwYWdlczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwYWdlIG9mIHRlbXBsYXRlUGFnZVwiIFt2YWx1ZV09XCJwYWdlLmlkXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgIHt7cGFnZS5wYWdlTmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3duLWFycm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxpbWdcbiAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzI2ODQxMGMxNzQyMjg2MDUyOTQwRG93biUyMDIucG5nXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+U2VsZWN0IGZyb20geW91ciBleGlzdGluZyBwYWdlczwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGluay5zZWN0aW9uXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibXQtMyBtYi0yIGlucHV0LWxhYmVsLTFcIj5TZWN0aW9uPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsucGFnZUlkXCIgc3R5bGU9XCJjdXJzb3I6cG9pbnRlclwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+U2VsZWN0IHRoZSBTZWN0aW9uPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgdGVtcGxhdGVQYWdlWzBdLmNvbXBvbmVudHNcIiBbdmFsdWVdPVwic2VjdGlvbi5pZFwiPnt7c2VjdGlvbi5zZWN0aW9uTmFtZX19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bi1hcnJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8yNjg0MTBjMTc0MjI4NjA1Mjk0MERvd24lMjAyLnBuZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsIHx8IGxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGluay5FbWFpbCB8fCBsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuUGhvbmVcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtdC0zIG1iLTIgaW5wdXQtbGFiZWwtMVwiPlNlbGVjdCB0eXBlPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsubGlua1R5cGVcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzZWxlY3RlZD5TZWxlY3QgdGhlIFR5cGU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBleHRlcm5hbExpbmtUeXBlXCIgW3ZhbHVlXT1cInR5cGUudHlwZVwiPnt7dHlwZS50eXBlfX08L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvd24tYXJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMjY4NDEwYzE3NDIyODYwNTI5NDBEb3duJTIwMi5wbmdcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwgbWItMlwiPnt7bGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ1dlYnNpdGUnIDogbGluay5saW5rVHlwZSA9PT1cbiAgICAgICAgICAgIFJlZGlyZWN0aW9uTGluay5FbWFpbCA/ICdFbWFpbCBBZGRyZXNzJyA6ICdQaG9uZSBOdW1iZXInfX08L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIFsobmdNb2RlbCldPVwibGluay5yZWRpcmVjdGlvblVybFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ2V4YW1wbGUgOiBodHRwczovL2ZhY2Vib29rLmNvbSc6ICcnXCI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbnB1dC1sYWJlbC0yXCI+T3BlbiBpbiBhIG5ldyBicm93c2VyIHRhYjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbWwtYXV0b1wiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBzd2l0Y2gtYnRuXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaW5rLm5ld1RhYlwiIHJvbGU9XCJzd2l0Y2hcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIHctMTAwICBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWRkTGlua1wiIChjbGljayk9XCJhZGROZXdMaW5rKClcIj5VcGRhdGUgTGluazwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cblxuPC9zZWN0aW9uPiJdfQ==
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9saW5rLWVkaXRvci9saW5rLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2xpbmstZWRpdG9yL2xpbmstZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBMkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7OztBQVN4RSxNQUFNLE9BQU8sbUJBQW1CO0lBbUc5QixZQUFvQixhQUFvQyxFQUMvQyxTQUE0QyxFQUNuQixJQUFTLEVB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QyxZQUFZLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUM7OzBCQXlHdkksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBHcmFkaWVudERpcmVjdGlvbiwgUmVkaXJlY3Rpb25MaW5rVHlwZSB9IGZyb20gJy4uLy4uL3N0eWxlcy9pbmRleCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVkaWFTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL21lZGlhLXNlbGVjdG9yL21lZGlhLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTbGlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLWxpbmstZWRpdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE1hdE9wdGlvbk1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0U2xpZGVyTW9kdWxlLCBNYXRQcm9ncmVzc1NwaW5uZXJdLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluay1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbGluay1lZGl0b3IuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTGlua0VkaXRvckNvbXBvbmVudCB7XG4gIGxpbms6IEJ1dHRvbiA9IHtcbiAgICBsaW5rVHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5QYWdlLFxuICAgIGxhYmVsOiAnJyxcbiAgICByZWRpcmVjdGlvblVybDogJycsXG4gICAgcGFnZUlkOiAnJyxcbiAgICBuZXdUYWI6IGZhbHNlLFxuICB9O1xuXG4gIFJlZGlyZWN0aW9uTGluayA9IFJlZGlyZWN0aW9uTGlua1R5cGVcbiAgZXh0ZXJuYWxMaW5rVHlwZTogQXJyYXk8dHlwZT4gPSBbXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FbWFpbFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5QaG9uZVxuICAgIH1cbiAgICAvLyB7XG4gICAgLy8gICB0eXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLnNlY3Rpb25cbiAgICAvLyB9XG4gIF1cblxuICBzZWxlY3RlZFR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUgPSBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2U7XG4gIGxpbmtUeXBlOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBSZWRpcmVjdGlvbkxpbmtUeXBlLlBhZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUuc2VjdGlvblxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogUmVkaXJlY3Rpb25MaW5rVHlwZS5FeHRlcm5hbFxuICAgIH1cbiAgXVxuXG4gIGJ1dHRvblR5cGVzOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBcIlNvbGlkXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFwiT3V0bGluZVwiXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBcIlRleHRcIlxuICAgIH1cbiAgXVxuXG4gIGJ1dHRvblNoYXBlczogYW55W10gPSBbXG4gICAge1xuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzgzMjk2OGMxNzQ3MjIxMjcwODU2VmVjdG9yJTIwNDglMjAoMikucG5nXCIsXG4gICAgICBhY3RpdmVJY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNDgxODUwYzE3NDcyMjA5Mzc2OTNWZWN0b3IlMjA0OCUyMCgxKS5wbmdcIixcbiAgICAgIHR5cGU6IFwiU3F1YXJlXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIGljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy84MzA4NDJjMTc0NzIyMDc1NzQ1M1ZlY3RvciUyMDQ5LnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzc4MDYwMWMxNzQ3MjIxMjQzNjEzVmVjdG9yJTIwNDklMjAoMSkucG5nXCIsXG4gICAgICB0eXBlOiBcIkN1cnZlXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIGljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy8yMTAzNTBjMTc0NzIyMDgwMzUyMVZlY3RvciUyMDUwLnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzkzOTYxMWMxNzQ3MjIwOTAwMTI0VmVjdG9yJTIwNTAlMjAoMSkucG5nXCIsXG4gICAgICB0eXBlOiBcIlJvdW5kXCJcbiAgICB9XG4gIF1cblxuICBkaXJlY3Rpb25UeXBlOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNjY0NDAzYzE3NDczMDY4NDAzMDRhcnJvdy1kb3duLnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzU4NzQzMGMxNzQ3MzA2ODk4NDY1YXJyb3ctZG93bi5wbmdcIixcbiAgICAgIHR5cGU6IFwiRE9XTlwiXG4gICAgfSxcbiAgICB7XG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvMTkzMzU5YzE3NDczMDY5NDk1MjJhcnJvdy1yaWdodC5wbmdcIixcbiAgICAgIGFjdGl2ZUljb246IFwiaHR0cHM6Ly9kMnl4MTVwbmNnbXU2My5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy80NTA5NDNjMTc0NzMxNzc1OTM4OGFycm93LXJpZ2h0ICgyKS5wbmdcIixcbiAgICAgIHR5cGU6IFwiUklHSFRcIlxuICAgIH0sXG4gICAge1xuICAgICAgaWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzQ5MzgzOGMxNzQ3MzA3MDk0ODIxYXJyb3ctcmlnaHQgKDMpLnBuZ1wiLFxuICAgICAgYWN0aXZlSWNvbjogXCJodHRwczovL2QyeXgxNXBuY2dtdTYzLmNsb3VkZnJvbnQubmV0L3Byb2QtaW1hZ2VzLzY5OTkzMmMxNzQ3MzA3MTU3OTQ0YXJyb3ctcmlnaHQgKDQpLnBuZ1wiLFxuICAgICAgdHlwZTogXCJESUFHT05BTF9SSUdIVFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBpY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTExOTcxYzE3NDczMDcxOTkxMTVhcnJvdy1yaWdodCAoNSkucG5nXCIsXG4gICAgICBhY3RpdmVJY29uOiBcImh0dHBzOi8vZDJ5eDE1cG5jZ211NjMuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvOTY4NzI2YzE3NDczMDcyMjcyNTVhcnJvdy1yaWdodCAoNikucG5nXCIsXG4gICAgICB0eXBlOiBcIkRJQUdPTkFMX0xFRlRcIlxuICAgIH1cblxuICBdXG5cblxuXG5cblxuICB0ZW1wbGF0ZVBhZ2U6IGFueVtdID0gW107XG4gIGFkZExpbms6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWRpdG9yU2VydmljZTogRWxlbWVudFNlcnZpY2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxMaW5rRWRpdG9yQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWRkTGluayA9IHRydWU7XG4gICAgaWYgKHRoaXMuZGF0YT8ubGlua0RhdGEpIHtcbiAgICAgIHRoaXMubGluayA9IHRoaXMuZGF0YS5saW5rRGF0YTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gdGhpcy5saW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmtUeXBlLkVtYWlsIHx8IHRoaXMubGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rVHlwZS5QaG9uZSA/IFJlZGlyZWN0aW9uTGlua1R5cGUuRXh0ZXJuYWwgOiB0aGlzLmxpbmsubGlua1R5cGU7XG4gICAgICB0aGlzLmFkZExpbmsgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUgJiYgdGhpcy5kYXRhLmJ1dHRvblN0eWxlLmdyYWRpZW50RGlyZWN0aW9uKVxuICAgICAgICB0aGlzLmRhdGEuYnV0dG9uU3R5bGUuZ3JhZGllbnREaXJlY3Rpb24gPSB0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy5ncmFkaWVudERpcmVjdGlvbiB8fCBHcmFkaWVudERpcmVjdGlvbi5ET1dOO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhPy5idXR0b25TdHlsZT8udHlwZSA9PSAnT3V0bGluZScgfHwgdGhpcy5kYXRhPy5idXR0b25TdHlsZT8udHlwZSA9PSAnVGV4dCcpIHtcbiAgICAgIHRoaXMuYmFja2dyb3VuZFR5cGUgPSBbJ1NvbGlkJ107XG4gICAgICB0aGlzLmRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlID0gJ1NvbGlkJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJhY2tncm91bmRUeXBlID0gWydTb2xpZCcsICdHcmFkaWVudCddO1xuICAgIH1cbiAgICB0aGlzLmdldFRlbXBsYXRlUGFnZSgpO1xuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGdldFRlbXBsYXRlUGFnZSgpIHtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0VGVtcGxhdGUoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLnRlbXBsYXRlUGFnZSA9IHJlcy5kYXRhO1xuICAgIH0pXG4gIH1cblxuICBjaGFuZ2VUeXBlKHR5cGU6IFJlZGlyZWN0aW9uTGlua1R5cGUpIHtcbiAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IHR5cGU7XG4gICAgdGhpcy5saW5rLmxpbmtUeXBlID0gdGhpcy5zZWxlY3RlZFR5cGU7XG4gIH1cblxuICBhZGROZXdMaW5rKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgbGluazogdGhpcy5saW5rIH0pXG4gIH1cblxuICBnZXRDb2xvckxhYmVsKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnR5cGUgPT0gJ091dGxpbmUnKSB7XG4gICAgICByZXR1cm4gJ091dGxpbmUgQ29sb3InO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnR5cGUgPT0gJ1RleHQnKSB7XG4gICAgICByZXR1cm4gJ1RleHQgQ29sb3InO1xuICAgIH1cbiAgICByZXR1cm4gJ0J1dHRvbiBDb2xvcic7XG4gIH1cblxuXG4gIGJ1dHRvblN0eWxlczogYW55O1xuICBjaGFuZ2VCdXR0b25TdHlsZSgpIHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGlmICh0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdPdXRsaW5lJyB8fCB0aGlzLmRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09ICdUZXh0Jykge1xuICAgICAgdGhpcy5iYWNrZ3JvdW5kVHlwZSA9IFsnU29saWQnXTtcbiAgICAgIHRoaXMuZGF0YS5idXR0b25TdHlsZS5jb2xvclR5cGUgPSAnU29saWQnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYmFja2dyb3VuZFR5cGUgPSBbJ1NvbGlkJywgJ0dyYWRpZW50J107XG4gICAgfVxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmJ1dHRvblN0eWxlQ2hhbmdlQ2hlY2tzLmVtaXQoeyBpZDogdGhpcy5kYXRhLmJ1dHRvbklkLCBzdHlsZTogdGhpcy5kYXRhLmJ1dHRvblN0eWxlLCBiYWNrZ3JvdW5kSW5mbzogdGhpcy5kYXRhLmJhY2tncm91bmRJbmZvIH0pO1xuICB9XG4gIGdldENvbnRyYXN0VGV4dENvbG9yKGJhY2tncm91bmRIZXg6IGFueSkge1xuICAgIGxldCBoZXggPSBiYWNrZ3JvdW5kSGV4Py5yZXBsYWNlKCcjJywgJycpO1xuXG4gICAgaWYgKGhleD8ubGVuZ3RoID09PSAzKSB7XG4gICAgICBoZXggPSBoZXguc3BsaXQoJycpLm1hcCgoYzogYW55KSA9PiBjICsgYykuam9pbignJyk7XG4gICAgfVxuXG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDAsIDIpLCAxNikgLyAyNTU7XG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDIsIDIpLCAxNikgLyAyNTU7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleD8uc3Vic3RyKDQsIDIpLCAxNikgLyAyNTU7XG5cbiAgICBjb25zdCBsdW1pbmFuY2UgPSAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG5cbiAgICB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudGV4dENvbG9yID0gbHVtaW5hbmNlIDwgMC41ID8gXCIjRkZGRkZGXCIgOiBcIiMwMDAwMDBcIjtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5idXR0b25TdHlsZUNoYW5nZUNoZWNrcy5lbWl0KHsgaWQ6IHRoaXMuZGF0YS5idXR0b25JZCwgc3R5bGU6IHRoaXMuZGF0YS5idXR0b25TdHlsZSwgYmFja2dyb3VuZEluZm86IHRoaXMuZGF0YS5iYWNrZ3JvdW5kSW5mbyB9KTtcbiAgfVxuICBiYWNrZ3JvdW5kVHlwZTogc3RyaW5nW10gPSBbJ1NvbGlkJywgJ0dyYWRpZW50J107XG5cbiAgc2V0Qm9yZGVyUmFkaXVzKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnVGV4dCcpIHtcbiAgICAgIHJldHVybiAnMHB4JztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS5zaGFwZSA9PSAnU3F1YXJlJykge1xuICAgICAgcmV0dXJuICcwcHgnO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09ICdDdXJ2ZScpIHtcbiAgICAgIHJldHVybiAnN3B4JztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25TdHlsZS5zaGFwZSA9PSAnUm91bmQnKSB7XG4gICAgICByZXR1cm4gJzk5cHgnO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cbiAgc2V0Qm9yZGVyKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnVGV4dCcpIHtcbiAgICAgIHJldHVybiAndW5zZXQnO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlLnR5cGUgPT0gJ1NvbGlkJykge1xuICAgICAgcmV0dXJuIGB1bnNldGA7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnT3V0bGluZScpIHtcbiAgICAgIHJldHVybiBgMnB4IHNvbGlkICR7dGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kfWA7XG4gICAgfVxuICAgIHJldHVybiAndW5zZXQnO1xuICB9XG4gIHNldENvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnRleHRDb2xvciB8fCAnI2ZmZmZmZic7XG4gIH1cbiAgc2V0QmFja2dyb3VuZCgpIHtcbiAgICBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5jb2xvclR5cGUgPT0gJ1NvbGlkJyAmJiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5jb2xvclR5cGUgPT0gJ0dyYWRpZW50JyAmJiB0aGlzLmRhdGEuYnV0dG9uU3R5bGUudHlwZSA9PSAnU29saWQnKSB7XG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBHcmFkaWVudERpcmVjdGlvblt0aGlzLmRhdGEuYnV0dG9uU3R5bGUuZ3JhZGllbnREaXJlY3Rpb24gYXMgdW5rbm93biBhcyBrZXlvZiB0eXBlb2YgR3JhZGllbnREaXJlY3Rpb24gfHwgR3JhZGllbnREaXJlY3Rpb24uRE9XTl07XG4gICAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgke2RpcmVjdGlvbn0sICR7dGhpcy5kYXRhLmJ1dHRvblN0eWxlPy5iYWNrZ3JvdW5kfSwgJHt0aGlzLmRhdGEuYnV0dG9uU3R5bGU/LnNlY29uZGFyeUJhY2tncm91bmR9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxuXG4gIGltZ0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhc3luYyB1cGRhdGVJbWFnZSgpIHtcbiAgICB0aGlzLmltZ0xvYWRlciA9IHRydWU7XG4gICAgY29uc3QgbWVkaWFTZWxlY3RvckRpYWxvZyA9IHRoaXMubWF0RGlhbG9nLm9wZW4oTWVkaWFTZWxlY3RvckNvbXBvbmVudCwgeyBkYXRhOiB7IG11bHRpcGxlOiBmYWxzZSB9LCBwYW5lbENsYXNzOiBcIm1lZGlhLXNlbGVjdG9yXCIgfSlcbiAgICBtZWRpYVNlbGVjdG9yRGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5saW5rLmljb24udXJsID0gcmVzWzBdLmFzc2V0c1swXS51cmwgPz8gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltZ0xvYWRlciA9IGZhbHNlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRlbGV0ZUltYWdlKCkge1xuICAgIHRoaXMubGluay5pY29uLnVybCA9ICcnO1xuICB9XG5cbiAgc2V0UmVkaXJlY3RVcmwoKSB7XG4gICAgdGhpcy5saW5rLnJlZGlyZWN0aW9uVXJsID0gJydcbiAgICBmb3IgKGxldCBwYWdlIG9mIHRoaXMudGVtcGxhdGVQYWdlKSB7XG4gICAgICBpZiAocGFnZS5pZCA9PT0gdGhpcy5saW5rLnBhZ2VJZCkge1xuICAgICAgICB0aGlzLmxpbmsucmVkaXJlY3Rpb25VcmwgPSBwYWdlLnBhdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cbmludGVyZmFjZSB0eXBlIHtcbiAgdHlwZTogc3RyaW5nO1xufVxuIiwiPHNlY3Rpb24+XG4gIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICA8cD57e2RhdGEudHlwZSA9PSAnQlVUVE9OJyA/IFwiQnV0dG9uXCIgOiBcIkxpbmtcIn19IFNldHRpbmdzPC9wPlxuICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIGNsYXNzPVwiZi0xOCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3BcIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJib2R5XCI+XG4gICAgPGRpdj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImxpbmstdGV4dFwiPnt7ZGF0YS50eXBlID09ICdCVVRUT04nID8gXCJCdXR0b25cIiA6IFwiTGlua1wifX0gVGV4dDwvbGFiZWw+PGJyPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGxpbmstdGV4dC1pbnB1dFwiIFsobmdNb2RlbCldPVwibGluay5sYWJlbFwiPlxuICAgICAgPHAgY2xhc3M9XCJkZXNjXCI+VGhpcyBpcyB0aGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIHRvIHVzZXJzPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGhyPlxuXG4gICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlID09ICdCVVRUT04nXCI+XG4gICAgICA8c2VsZWN0PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdHlsZSBvZiBzdHlsZXNcIj5cbiAgICAgICAgICA8b3B0aW9uIChjbGljayk9XCJjaGFuZ2VCdXR0b25TdHlsZShzdHlsZSlcIiBbdmFsdWVdPVwic3R5bGUubmFtZVwiPnt7c3R5bGUubmFtZX19PC9vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNlbGVjdD5cbiAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlID09ICdCVVRUT04nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIG1iLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsaW5rLXRleHQgbWItMVwiPkJ1dHRvbjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJib3JkZXItMCB3LTEwMFwiIFsobmdNb2RlbCldPVwiZGF0YS5idXR0b25TdHlsZS50eXBlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQnV0dG9uU3R5bGUoKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mIGJ1dHRvblR5cGVzXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwidHlwZS50eXBlXCI+XG4gICAgICAgICAgICAgICAgICB7e3R5cGUudHlwZSB8IHRpdGxlY2FzZX19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXN0eWxlIHctODBcIiBbc3R5bGUuYm9yZGVyUmFkaXVzXT1cInNldEJvcmRlclJhZGl1cygpXCIgW3N0eWxlLmJvcmRlcl09XCJzZXRCb3JkZXIoKVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInNldEJhY2tncm91bmQoKVwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnVGV4dCcgfHwgZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdPdXRsaW5lJykgJiYgZGF0YT8uYnV0dG9uU3R5bGU/LmNvbG9yVHlwZSA9PT0gJ0dyYWRpZW50J1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnbGluZWFyLWdyYWRpZW50KDkwZGVnLCAnICsgZGF0YT8uYnV0dG9uU3R5bGU/LmJhY2tncm91bmQgKyAnIDAlLCAnICsgZGF0YT8uYnV0dG9uU3R5bGUuc2Vjb25kYXJ5QmFja2dyb3VuZCArICcgMTAwJSknXG4gICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIHt7IGxpbmsubGFiZWwgPyBsaW5rLmxhYmVsIDogXCJCdXR0b24gVGV4dFwifX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LnN0eWxlPy5jb2xvclR5cGUgPT0gJ1NvbGlkJyB8fCBkYXRhPy5idXR0b25TdHlsZT8udHlwZSA9PSAnU29saWQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwic2V0Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGxpbmsubGFiZWwgPyBsaW5rLmxhYmVsIDogXCJCdXR0b24gVGV4dFwifX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGE/LmJ1dHRvblN0eWxlPy50eXBlID09PSAnT3V0bGluZSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZXRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCA/IGxpbmsubGFiZWwgOiBcIkJ1dHRvbiBUZXh0XCJ9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YT8uYnV0dG9uU3R5bGU/LnR5cGUgPT09ICdUZXh0J1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHt7IGxpbmsubGFiZWwgPyBsaW5rLmxhYmVsIDogXCJCdXR0b24gVGV4dFwifX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJsaW5rLXRleHRcIj5CdXR0b24gU3R5bGU8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItY29udGFpbmVyIHJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvciBici0xMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXRvcCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtc2lkZVwiPkNvbG9yPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zaWRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yVHlwZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJib3JkZXItMCB3LTEwMFwiIFsobmdNb2RlbCldPVwiZGF0YS5idXR0b25TdHlsZS5jb2xvclR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHR5cGUgb2YgYmFja2dyb3VuZFR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHN0eWxlPVwicGFkZGluZzogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHR5cGUgfCB0aXRsZWNhc2UgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIwXCIgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlLmNvbG9yVHlwZSA9PT0gJ1NvbGlkJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhY2tncm91bmRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2xvci10ZXh0IG1iLTEgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj4ge3sgZ2V0Q29sb3JMYWJlbCgpfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvclwiIFsobmdNb2RlbCldPVwiZGF0YS5idXR0b25TdHlsZS5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZ2V0Q29udHJhc3RUZXh0Q29sb3IoZGF0YS5idXR0b25TdHlsZS5iYWNrZ3JvdW5kKVwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuO1wiXG4gICAgICAgICAgICAgICAgICAgICNjb2xvcklucHV0PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhLmJ1dHRvblN0eWxlLmJhY2tncm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQuY2xpY2soKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMjBcIiAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUuY29sb3JUeXBlID09PSAnR3JhZGllbnQnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFja2dyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUuYmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUJ1dHRvblN0eWxlKClcIiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIiAjY29sb3JJbnB1dDE+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvclwiIFsobmdNb2RlbCldPVwiZGF0YS5idXR0b25TdHlsZS5zZWNvbmRhcnlCYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQnV0dG9uU3R5bGUoKVwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuO1wiICNjb2xvcklucHV0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2xvci10ZXh0IG1iLTEgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5Db2xvciAxPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJkYXRhPy5idXR0b25TdHlsZT8uYmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2xvcklucHV0MS5jbGljaygpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sb3ItdGV4dCBtYi0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+Q29sb3IgMjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWlucHV0XCIgW3N0eWxlLmJhY2tncm91bmRdPVwiZGF0YT8uYnV0dG9uU3R5bGU/LnNlY29uZGFyeUJhY2tncm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sb3JJbnB1dC5jbGljaygpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYWRpZW50LWRpcmVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtZGlyZWN0aW9uIG10LTMgbWItMVwiPiBEaXJlY3Rpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1kaXJlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtc2hhZG93IGQtZmxleCBici0xMCB3LTgwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkaXJlY3Rpb24gb2YgZGlyZWN0aW9uVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItYm94IGQtZmxleCBwLTIgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYnItMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnIDogZGF0YS5idXR0b25TdHlsZT8uZ3JhZGllbnREaXJlY3Rpb24gPT09IGRpcmVjdGlvbi50eXBlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGEuYnV0dG9uU3R5bGUuZ3JhZGllbnREaXJlY3Rpb24gPSBkaXJlY3Rpb24udHlwZTtjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMTBcIiBbc3JjXT1cImRpcmVjdGlvbi5pY29uXCIgYWx0PVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGU/LmdyYWRpZW50RGlyZWN0aW9uICE9PSBkaXJlY3Rpb24udHlwZVwiIGxvYWRpbmc9XCJsYXp5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMTBcIiBbc3JjXT1cImRpcmVjdGlvbi5hY3RpdmVJY29uXCIgYWx0PVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGU/LmdyYWRpZW50RGlyZWN0aW9uID09PSBkaXJlY3Rpb24udHlwZVwiIGxvYWRpbmc9XCJsYXp5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMjBcIiAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUudHlwZSAhPSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhY2tncm91bmRcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3JcIiBbKG5nTW9kZWwpXT1cImRhdGEuYnV0dG9uU3R5bGUudGV4dENvbG9yXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCdXR0b25TdHlsZSgpXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIgI2NvbG9ySW5wdXQzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIG10LTJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2xvci10ZXh0IG1iLTEgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5UZXh0IENvbG9yPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRhdGEuYnV0dG9uU3R5bGUudGV4dENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbG9ySW5wdXQzLmNsaWNrKClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ybmVyLXJhZGl1cyBiZy13aGl0ZSBwLTIgIGJyLTEwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuYnV0dG9uU3R5bGUudHlwZSAhPSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgQ29ybmVyIFJhZGl1c1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtc2hhZG93IGQtZmxleCBici0xMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNoYXBlIG9mIGJ1dHRvblNoYXBlc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWJveCBkLWZsZXggcC0yIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJyLTEwXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZCcgOiBkYXRhLmJ1dHRvblN0eWxlLnNoYXBlID09PSBzaGFwZS50eXBlfVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRhLmJ1dHRvblN0eWxlLnNoYXBlID0gc2hhcGUudHlwZTtjaGFuZ2VCdXR0b25TdHlsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzaGFwZS5pY29uXCIgYWx0PVwiaWNvblwiICpuZ0lmPVwiZGF0YS5idXR0b25TdHlsZS5zaGFwZSAhPT0gc2hhcGUudHlwZVwiIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyYW5zaXRpb24taW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInNoYXBlLmFjdGl2ZUljb25cIiBhbHQ9XCJpY29uXCIgKm5nSWY9XCJkYXRhLmJ1dHRvblN0eWxlPy5zaGFwZSA9PT0gc2hhcGUudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIiBjbGFzcz1cInRyYW5zaXRpb24taW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTIwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+U2hvdyBJY29uPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG1sLWF1dG9cIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IHN3aXRjaC1idG5cIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImxpbmsuc2hvd0ljb25cIiByb2xlPVwic3dpdGNoXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8IS0tIDxwIGNsYXNzPVwiaGVhZGluZyBtYi0wXCI+SW1hZ2U8L3A+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWltYWdlIGNwXCIgKm5nSWY9XCJsaW5rLnNob3dJY29uICYmICFsaW5rPy5pY29uPy51cmxcIiAoY2xpY2spPVwidXBkYXRlSW1hZ2UoKVwiPlxuICAgICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81NDc1MDBjMTc0NDY5ODgzMDM0M3VwbG9hZC1vbmUlMjAlMjgxJTI5LnBuZ1wiXG4gICAgICAgICAgICBhbHQ9XCJcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC10ZXh0IG1iLTBcIj5VcGxvYWQgYSBmaWxlPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXRleHQgbWItMFwiPm9yIHNlbGVjdCBhbiBleGlzdGluZyBvbmU8L3A+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtdGV4dFwiPnVwIHRvIDMyTUI8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImxpbmsuc2hvd0ljb24gJiYgbGluaz8uaWNvbj8udXJsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWdMb2FkZXJcIj5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJsaW5rPy5pY29uPy51cmxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBhbGNlLWltYWdlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInVwZGF0ZUltYWdlKClcIj5cbiAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIiBjbGFzcz1cImljb24gdy00IGgtNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICBkPVwibTQgMTYgNC41ODU3OS00LjU4NThjLjc4MTA0LS43ODEgMi4wNDc0MS0uNzgxIDIuODI4NDEgMEwxNiAxNm0tMi0yIDEuNTg1OC0xLjU4NThjLjc4MS0uNzgxIDIuMDQ3NC0uNzgxIDIuODI4NCAwTDIwIDE0bS02LTZoLjAxTTYgMjBoMTJjMS4xMDQ2IDAgMi0uODk1NCAyLTJWNmMwLTEuMTA0NTctLjg5NTQtMi0yLTJINmMtMS4xMDQ1NyAwLTIgLjg5NTQzLTIgMnYxMmMwIDEuMTA0Ni44OTU0MyAyIDIgMlpcIj5cbiAgICAgICAgICAgICAgICA8L3BhdGg+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtaW1hZ2UgY3Vyc29yLXBvaW50ZXIgXCIgKGNsaWNrKT1cImRlbGV0ZUltYWdlKClcIj5cbiAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCIgY2xhc3M9XCJpY29uIGgtNCB3LTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgZD1cIm0xOSA3LS44NjczIDEyLjE0MjVDMTguMDU3OSAyMC4xODkxIDE3LjE4NyAyMSAxNi4xMzc4IDIxSDcuODYyMjRjLTEuMDQ5MjggMC0xLjkyMDE2LS44MTA5LTEuOTk0OTItMS44NTc1TDUgN201IDR2Nm00LTZ2Nm0xLTEwVjRjMC0uNTUyMjgtLjQ0NzctMS0xLTFoLTRjLS41NTIyOCAwLTEgLjQ0NzcyLTEgMXYzTTQgN2gxNlwiPlxuICAgICAgICAgICAgICAgIDwvcGF0aD5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nTG9hZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkX3NwaW5uZXIgZC1mbGV4IHctMTAwIGgtMTAwIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBwLTIgbWItMlwiPkljb24gUG9zaXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzIGQtZmxleCBweC0yIGdhcC0zIG1iLTJcIiAqbmdJZj1cImxpbmsuc2hvd0ljb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYiBweC0zIHB5LTJcIiAqbmdGb3I9XCJsZXQgdGFiIG9mIFsnbGVmdCcsJ3JpZ2h0J11cIiAoY2xpY2spPVwibGluay5pY29uLmljb25Qb3NpdGlvbiA9IHRhYlwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkVGFiXT1cImxpbms/Lmljb24/Lmljb25Qb3NpdGlvbiA9PSB0YWJcIj5cbiAgICAgICAgICB7e3RhYiB8IHRpdGxlY2FzZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubGlua0RhdGE/Lmxlbmd0aCAhPSAwXCI+XG5cblxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwcyBjcFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0eXBlIG9mIGxpbmtUeXBlXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFR5cGUnIDogdHlwZS50eXBlID09PSBzZWxlY3RlZFR5cGV9XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVHlwZSh0eXBlLnR5cGUpXCI+e3t0eXBlLnR5cGV9fTwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgbXQtM1wiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLlBhZ2VcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbnB1dC1sYWJlbC0xIG10LTMgbWItMlwiPlNlbGVjdCBQYWdlPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsucGFnZUlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0UmVkaXJlY3RVcmwoKVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+U2VsZWN0IGZyb20geW91ciBleGlzdGluZyBwYWdlczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwYWdlIG9mIHRlbXBsYXRlUGFnZVwiIFt2YWx1ZV09XCJwYWdlLmlkXCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgIHt7cGFnZS5wYWdlTmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3duLWFycm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPjxpbWdcbiAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzI2ODQxMGMxNzQyMjg2MDUyOTQwRG93biUyMDIucG5nXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+U2VsZWN0IGZyb20geW91ciBleGlzdGluZyBwYWdlczwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGluay5zZWN0aW9uXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwibXQtMyBtYi0yIGlucHV0LWxhYmVsLTFcIj5TZWN0aW9uPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsucGFnZUlkXCIgc3R5bGU9XCJjdXJzb3I6cG9pbnRlclwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgc2VsZWN0ZWQ+U2VsZWN0IHRoZSBTZWN0aW9uPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgdGVtcGxhdGVQYWdlWzBdLmNvbXBvbmVudHNcIiBbdmFsdWVdPVwic2VjdGlvbi5pZFwiPnt7c2VjdGlvbi5zZWN0aW9uTmFtZX19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bi1hcnJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8yNjg0MTBjMTc0MjI4NjA1Mjk0MERvd24lMjAyLnBuZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsIHx8IGxpbmsubGlua1R5cGUgPT09IFJlZGlyZWN0aW9uTGluay5FbWFpbCB8fCBsaW5rLmxpbmtUeXBlID09PSBSZWRpcmVjdGlvbkxpbmsuUGhvbmVcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtdC0zIG1iLTIgaW5wdXQtbGFiZWwtMVwiPlNlbGVjdCB0eXBlPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWNvbnRhaW5lciB3LTEwMCBkLWZsZXggbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cImxpbmsubGlua1R5cGVcIiBzdHlsZT1cImN1cnNvcjpwb2ludGVyXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBzZWxlY3RlZD5TZWxlY3QgdGhlIFR5cGU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBleHRlcm5hbExpbmtUeXBlXCIgW3ZhbHVlXT1cInR5cGUudHlwZVwiPnt7dHlwZS50eXBlfX08L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvd24tYXJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PGltZ1xuICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvMjY4NDEwYzE3NDIyODYwNTI5NDBEb3duJTIwMi5wbmdcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtbGFiZWwgbWItMlwiPnt7bGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ1dlYnNpdGUnIDogbGluay5saW5rVHlwZSA9PT1cbiAgICAgICAgICAgIFJlZGlyZWN0aW9uTGluay5FbWFpbCA/ICdFbWFpbCBBZGRyZXNzJyA6ICdQaG9uZSBOdW1iZXInfX08L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIFsobmdNb2RlbCldPVwibGluay5yZWRpcmVjdGlvblVybFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGluay5saW5rVHlwZSA9PT0gUmVkaXJlY3Rpb25MaW5rLkV4dGVybmFsID8gJ2V4YW1wbGUgOiBodHRwczovL2ZhY2Vib29rLmNvbSc6ICcnXCI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbnB1dC1sYWJlbC0yXCI+T3BlbiBpbiBhIG5ldyBicm93c2VyIHRhYjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbWwtYXV0b1wiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBzd2l0Y2gtYnRuXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJsaW5rLm5ld1RhYlwiIHJvbGU9XCJzd2l0Y2hcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyIHctMTAwICBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWRkTGlua1wiIChjbGljayk9XCJhZGROZXdMaW5rKClcIj5VcGRhdGUgTGluazwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cblxuPC9zZWN0aW9uPiJdfQ==
|
|
@@ -20,11 +20,11 @@ export class SimpoButtonComponent {
|
|
|
20
20
|
this._eventService.buttonRedirection.emit({ data: this.buttonContent });
|
|
21
21
|
}
|
|
22
22
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SimpoButtonComponent, deps: [{ token: i1.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SimpoButtonComponent, isStandalone: true, selector: "app-button-element", inputs: { buttonContent: "buttonContent", buttonStyle: "buttonStyle", buttonId: "buttonId", color: "color", sectionId: "sectionId", edit: "edit", backgroundInfo: "backgroundInfo" }, ngImport: i0, template: "<button class=\"button gap-2\" (click)=\"redirectTo()\" simpoButtonDirective [id]=\"sectionId+buttonId\"
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SimpoButtonComponent, isStandalone: true, selector: "app-button-element", inputs: { buttonContent: "buttonContent", buttonStyle: "buttonStyle", buttonId: "buttonId", color: "color", sectionId: "sectionId", edit: "edit", backgroundInfo: "backgroundInfo" }, ngImport: i0, template: "<button class=\"button gap-2\" (click)=\"redirectTo()\" simpoButtonDirective [id]=\"sectionId+buttonId\"\n [buttonStyle]=\"buttonStyle\" [color]=\"color\" [appButtonEditor]=\"edit ?? false\" [buttonData]=\"buttonContent\"\n [backgroundInfo]=\"backgroundInfo\" [sectionId]=\"sectionId\" [buttonId]=\"buttonId\"\n [class.flex-row-reverse]=\"buttonContent?.icon?.iconPosition === 'left'\">\n <div>{{buttonContent?.label}}</div>\n <div class=\"btn-icon\" *ngIf=\"buttonContent?.showIcon\" [ngStyle]=\"{\n 'background': buttonStyle?.type == 'Text' ? buttonStyle?.background : buttonStyle?.textColor,\n 'mask-image': 'url(' + buttonContent?.icon?.url + ')',\n 'mask-repeat': 'no-repeat',\n 'mask-size': 'cover',\n 'width': '26px',\n 'height': '26px',\n }\">\n </div>\n</button>", styles: [".button{font-size:16px!important;padding:8px 20px;display:inline-flex;align-items:center;justify-content:center;width:max-content!important;font-weight:700;font-family:var(--website-font-family);height:43px}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.button:hover{box-shadow:#32325d40 0 13px 27px -5px,#0000004d 0 8px 16px -8px;transform:translateY(-3px);transition:all .3s ease-in-out}\n"], dependencies: [{ kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
24
24
|
}
|
|
25
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SimpoButtonComponent, decorators: [{
|
|
26
26
|
type: Component,
|
|
27
|
-
args: [{ selector: 'app-button-element', standalone: true, imports: [ButtonDirectiveDirective, ButtonEditorDirective, CommonModule], template: "<button class=\"button gap-2\" (click)=\"redirectTo()\" simpoButtonDirective [id]=\"sectionId+buttonId\"
|
|
27
|
+
args: [{ selector: 'app-button-element', standalone: true, imports: [ButtonDirectiveDirective, ButtonEditorDirective, CommonModule], template: "<button class=\"button gap-2\" (click)=\"redirectTo()\" simpoButtonDirective [id]=\"sectionId+buttonId\"\n [buttonStyle]=\"buttonStyle\" [color]=\"color\" [appButtonEditor]=\"edit ?? false\" [buttonData]=\"buttonContent\"\n [backgroundInfo]=\"backgroundInfo\" [sectionId]=\"sectionId\" [buttonId]=\"buttonId\"\n [class.flex-row-reverse]=\"buttonContent?.icon?.iconPosition === 'left'\">\n <div>{{buttonContent?.label}}</div>\n <div class=\"btn-icon\" *ngIf=\"buttonContent?.showIcon\" [ngStyle]=\"{\n 'background': buttonStyle?.type == 'Text' ? buttonStyle?.background : buttonStyle?.textColor,\n 'mask-image': 'url(' + buttonContent?.icon?.url + ')',\n 'mask-repeat': 'no-repeat',\n 'mask-size': 'cover',\n 'width': '26px',\n 'height': '26px',\n }\">\n </div>\n</button>", styles: [".button{font-size:16px!important;padding:8px 20px;display:inline-flex;align-items:center;justify-content:center;width:max-content!important;font-weight:700;font-family:var(--website-font-family);height:43px}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.button:hover{box-shadow:#32325d40 0 13px 27px -5px,#0000004d 0 8px 16px -8px;transform:translateY(-3px);transition:all .3s ease-in-out}\n"] }]
|
|
28
28
|
}], ctorParameters: () => [{ type: i1.EventsService }], propDecorators: { buttonContent: [{
|
|
29
29
|
type: Input
|
|
30
30
|
}], buttonStyle: [{
|
|
@@ -40,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
40
40
|
}], backgroundInfo: [{
|
|
41
41
|
type: Input
|
|
42
42
|
}] } });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcG8tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZWxlbWVudHMvc2ltcG8tYnV0dG9uL3NpbXBvLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL3NpbXBvLWJ1dHRvbi9zaW1wby1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFHdkYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBUy9DLE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdkMsYUFBUSxHQUFZLEVBQUUsQ0FBQztRQUV2QixjQUFTLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLFNBQUksR0FBYSxLQUFLLENBQUM7SUFJa0IsQ0FBQztJQUVuRCxRQUFRO0lBQ1IsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGNBQWM7WUFDbkUsT0FBTztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7K0dBbkJVLG9CQUFvQjttR0FBcEIsb0JBQW9CLG9RQ2RqQywreEJBY1MsMGVESkcsd0JBQXdCLHNJQUFFLHFCQUFxQix3S0FBRyxZQUFZOzs0RkFJN0Qsb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRyxZQUFZLENBQUM7a0ZBS2hFLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIEJ1dHRvbiwgQnV0dG9uU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnV0dG9uRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1idXR0b24tZWxlbWVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSAsIENvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW1wby1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2ltcG8tYnV0dG9uLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIFNpbXBvQnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgYnV0dG9uQ29udGVudD8gOiBCdXR0b247XG4gIEBJbnB1dCgpIGJ1dHRvblN0eWxlPyA6IEJ1dHRvblN0eWxlTW9kZWw7XG4gIEBJbnB1dCgpIGJ1dHRvbklkIDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNvbG9yPyA6IHN0cmluZztcbiAgQElucHV0KCkgc2VjdGlvbklkPyA6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiYWNrZ3JvdW5kSW5mbz86IEJhY2tncm91bmRNb2RlbDtcblxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSl7fVxuXG4gIG5nT25Jbml0KCl7XG4gIH1cblxuICByZWRpcmVjdFRvKCl7XG4gICAgaWYoIXRoaXMuYnV0dG9uQ29udGVudD8ucGFnZUlkICYmICF0aGlzLmJ1dHRvbkNvbnRlbnQ/LnJlZGlyZWN0aW9uVXJsKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuX2V2ZW50U2VydmljZS5idXR0b25SZWRpcmVjdGlvbi5lbWl0KHtkYXRhOiB0aGlzLmJ1dHRvbkNvbnRlbnR9KTtcbiAgfVxufVxuIiwiPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBnYXAtMlwiIChjbGljayk9XCJyZWRpcmVjdFRvKClcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwic2VjdGlvbklkK2J1dHRvbklkXCJcbiAgW2J1dHRvblN0eWxlXT1cImJ1dHRvblN0eWxlXCIgW2NvbG9yXT1cImNvbG9yXCIgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbkRhdGFdPVwiYnV0dG9uQ29udGVudFwiXG4gIFtiYWNrZ3JvdW5kSW5mb109XCJiYWNrZ3JvdW5kSW5mb1wiIFtzZWN0aW9uSWRdPVwic2VjdGlvbklkXCIgW2J1dHRvbklkXT1cImJ1dHRvbklkXCJcbiAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwiYnV0dG9uQ29udGVudD8uaWNvbj8uaWNvblBvc2l0aW9uID09PSAnbGVmdCdcIj5cbiAgPGRpdj57e2J1dHRvbkNvbnRlbnQ/LmxhYmVsfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJ0bi1pY29uXCIgKm5nSWY9XCJidXR0b25Db250ZW50Py5zaG93SWNvblwiIFtuZ1N0eWxlXT1cIntcbiAgICAnYmFja2dyb3VuZCc6ICBidXR0b25TdHlsZT8udHlwZSA9PSAnVGV4dCcgPyBidXR0b25TdHlsZT8uYmFja2dyb3VuZCA6IGJ1dHRvblN0eWxlPy50ZXh0Q29sb3IsXG4gICAgJ21hc2staW1hZ2UnOiAndXJsKCcgKyBidXR0b25Db250ZW50Py5pY29uPy51cmwgKyAnKScsXG4gICAgJ21hc2stcmVwZWF0JzogJ25vLXJlcGVhdCcsXG4gICAgJ21hc2stc2l6ZSc6ICdjb3ZlcicsXG4gICAgJ3dpZHRoJzogJzI2cHgnLFxuICAgICdoZWlnaHQnOiAnMjZweCcsXG4gIH1cIj5cbiAgPC9kaXY+XG48L2J1dHRvbj4iXX0=
|