simpo-component-library 2.2.2 → 2.2.21

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.
@@ -1,4 +1,4 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { PortfolioComponent } from '../../elements/portfolio/portfolio.component';
3
3
  import { PropertiesComponent } from '../../elements/properties/properties.component';
4
4
  import { MyDocumentsComponent } from '../../elements/my-documents/my-documents.component';
@@ -10,11 +10,15 @@ import { CommonModule } from '@angular/common';
10
10
  import { KycDetailsComponent } from '../kyc-details/kyc-details.component';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "../../services/rest.service";
13
- import * as i2 from "@angular/common";
13
+ import * as i2 from "@angular/router";
14
+ import * as i3 from "@angular/common";
14
15
  export class ProfileSectionComponent {
15
- constructor(restService) {
16
+ constructor(restService, activatedRoute, router) {
16
17
  this.restService = restService;
18
+ this.activatedRoute = activatedRoute;
19
+ this.router = router;
17
20
  this.selectedPanel = "PORTFOLIO";
21
+ this.tabChanged = new EventEmitter();
18
22
  this.sidePanelTabs = [
19
23
  { value: "PORTFOLIO", viewValue: "My Portfolio" },
20
24
  { value: "PROPERTIES", viewValue: "My Properties" },
@@ -26,6 +30,10 @@ export class ProfileSectionComponent {
26
30
  ];
27
31
  }
28
32
  ngOnInit() {
33
+ this.activatedRoute.queryParams.subscribe((param) => {
34
+ if (window.innerWidth < 475)
35
+ this.selectedPanel = param['type'];
36
+ });
29
37
  this.getInvestorDetails();
30
38
  }
31
39
  getInvestorDetails() {
@@ -38,15 +46,30 @@ export class ProfileSectionComponent {
38
46
  const initials = nameParts?.map((part) => part.charAt(0).toUpperCase()).join('');
39
47
  return initials;
40
48
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProfileSectionComponent, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: ProfileSectionComponent, isStandalone: true, selector: "simpo-profile-section", inputs: { data: "data" }, ngImport: i0, template: "<section class=\"main-container d-flex justify-content-center\">\r\n <div class=\"side-panel\">\r\n <div class=\"details\">\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"logo left w-15\">{{ getInitials() }}</div><div class=\"right name w-85\">{{investorDetails?.fullName || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\"d-flex align-items-center justify-content-center f-18\"> phone</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.phoneNumber || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\" d-flex align-items-center justify-content-center f-18\"> email</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.emailId || 'N/A'}}</div>\r\n </div>\r\n </div>\r\n <div class=\"tab-section\">\r\n <div class=\"tabs cursor-pointer\" *ngFor=\"let ele of sidePanelTabs\" (click)=\"selectedPanel = ele.value\" [class.activeTab]=\"selectedPanel == ele.value\">\r\n {{ele.viewValue}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"display-section\">\r\n <ng-container *ngIf=\"selectedPanel == 'KYC'\">\r\n <simpo-kyc-details></simpo-kyc-details>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PORTFOLIO'\">\r\n <simpo-portfolio></simpo-portfolio>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PROPERTIES'\">\r\n <simpo-properties></simpo-properties>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'ORDERS'\">\r\n <simpo-my-orders></simpo-my-orders>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'DOCUMENTS'\">\r\n <simpo-my-documents></simpo-my-documents>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'STATEMENT'\">\r\n <simpo-my-statement></simpo-my-statement>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'HELP'\">\r\n <simpo-need-help></simpo-need-help>\r\n </ng-container>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans}mat-icon{font-family:Material Icons!important}.main-container{height:85vh;width:100%;padding:10px 0;gap:15px;background:#f1f6ff}.side-panel{width:18%;background:#fff;border:2px solid rgba(241,246,255,1);border-radius:10px}.display-section{width:60%}.w-15{width:15%}.w-85{width:85%}.cursor-pointer{cursor:pointer}.details{background:#19a6c6;border-radius:10px;padding:10px;margin:15px}.left-right{gap:10px;margin-bottom:10px}.logo{background:#e6f0ff;border-radius:50%;font-size:14px;text-align:center;font-weight:600;line-height:24px;padding:3px;color:#405071!important}.name{font-size:14px;font-weight:600;line-height:24px;color:#fff!important}.f-18{font-size:18px}.gap-10{gap:10px}.left{color:#fffc}.right{font-weight:500;font-size:14px;line-height:24px;color:#fffc}.tab-section{margin-top:15px}.tabs{margin-bottom:25px;font-weight:500;font-size:16px;line-height:24px;color:#01161e;margin-left:8px}.activeTab{border-left:8px solid rgba(248,169,56,1);font-weight:700!important;color:#219ebc;margin-right:15px;background:#f1f3f7;padding:10px;border-radius:0 6px 6px 0;margin-left:unset}\n"], dependencies: [{ kind: "component", type: PortfolioComponent, selector: "simpo-portfolio" }, { kind: "component", type: PropertiesComponent, selector: "simpo-properties" }, { kind: "component", type: MyDocumentsComponent, selector: "simpo-my-documents" }, { kind: "component", type: MyOrdersComponent, selector: "simpo-my-orders" }, { kind: "component", type: MyStatementComponent, selector: "simpo-my-statement" }, { kind: "component", type: NeedHelpComponent, selector: "simpo-need-help" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: KycDetailsComponent, selector: "simpo-kyc-details" }] }); }
49
+ get isMobile() {
50
+ return window.innerWidth < 475;
51
+ }
52
+ changeTab(tab) {
53
+ if (!this.isMobile)
54
+ this.selectedPanel = tab;
55
+ if (this.isMobile) {
56
+ this.tabChanged.emit();
57
+ this.router.navigate(['profile'], { queryParams: { type: tab } });
58
+ }
59
+ }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProfileSectionComponent, deps: [{ token: i1.RestService }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
61
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: ProfileSectionComponent, isStandalone: true, selector: "simpo-profile-section", inputs: { data: "data", selectedPanel: "selectedPanel" }, outputs: { tabChanged: "tabChanged" }, ngImport: i0, template: "<section class=\"main-container d-flex justify-content-center\">\r\n <div class=\"side-panel\" *ngIf=\"(isMobile && !selectedPanel) || !isMobile\">\r\n <div class=\"details\">\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"logo left w-15\">{{ getInitials() }}</div><div class=\"right name w-85\">{{investorDetails?.fullName || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\"d-flex align-items-center justify-content-center f-18\"> phone</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.phoneNumber || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\" d-flex align-items-center justify-content-center f-18\"> email</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.emailId || 'N/A'}}</div>\r\n </div>\r\n </div>\r\n <div class=\"tab-section\">\r\n <div class=\"tabs cursor-pointer\" *ngFor=\"let ele of sidePanelTabs\" (click)=\"changeTab(ele.value)\" [class.activeTab]=\"selectedPanel == ele.value\">\r\n {{ele.viewValue}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"display-section\" *ngIf=\"selectedPanel\">\r\n <ng-container *ngIf=\"selectedPanel == 'KYC'\">\r\n <simpo-kyc-details></simpo-kyc-details>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PORTFOLIO'\">\r\n <simpo-portfolio></simpo-portfolio>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PROPERTIES'\">\r\n <simpo-properties></simpo-properties>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'ORDERS'\">\r\n <simpo-my-orders></simpo-my-orders>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'DOCUMENTS'\">\r\n <simpo-my-documents></simpo-my-documents>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'STATEMENT'\">\r\n <simpo-my-statement></simpo-my-statement>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'HELP'\">\r\n <simpo-need-help></simpo-need-help>\r\n </ng-container>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans}mat-icon{font-family:Material Icons!important}.main-container{height:85vh;width:100%;padding:10px 0;gap:15px;background:#f1f6ff}.side-panel{width:18%;background:#fff;border:2px solid rgba(241,246,255,1);border-radius:10px}.display-section{width:60%}.w-15{width:15%}.w-85{width:85%}.cursor-pointer{cursor:pointer}.details{background:#19a6c6;border-radius:10px;padding:10px;margin:15px}.left-right{gap:10px;margin-bottom:10px}.logo{background:#e6f0ff;border-radius:50%;font-size:14px;text-align:center;font-weight:600;line-height:24px;padding:3px;color:#405071!important}.name{font-size:14px;font-weight:600;line-height:24px;color:#fff!important}.f-18{font-size:18px}.gap-10{gap:10px}.left{color:#fffc}.right{font-weight:500;font-size:14px;line-height:24px;color:#fffc}.tab-section{margin-top:15px}.tabs{margin-bottom:25px;font-weight:500;font-size:16px;line-height:24px;color:#01161e;margin-left:8px}.activeTab{border-left:8px solid rgba(248,169,56,1);font-weight:700!important;color:#219ebc;margin-right:15px;background:#f1f3f7;padding:10px;border-radius:0 6px 6px 0;margin-left:unset}@media screen and (max-width: 475px){.side-panel,.display-section{width:100%}}\n"], dependencies: [{ kind: "component", type: PortfolioComponent, selector: "simpo-portfolio" }, { kind: "component", type: PropertiesComponent, selector: "simpo-properties" }, { kind: "component", type: MyDocumentsComponent, selector: "simpo-my-documents" }, { kind: "component", type: MyOrdersComponent, selector: "simpo-my-orders" }, { kind: "component", type: MyStatementComponent, selector: "simpo-my-statement" }, { kind: "component", type: NeedHelpComponent, selector: "simpo-need-help" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: KycDetailsComponent, selector: "simpo-kyc-details" }] }); }
43
62
  }
44
63
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: ProfileSectionComponent, decorators: [{
45
64
  type: Component,
46
65
  args: [{ selector: 'simpo-profile-section', standalone: true, imports: [PortfolioComponent, PropertiesComponent, MyDocumentsComponent, MyOrdersComponent, MyStatementComponent, NeedHelpComponent, MatIcon, CommonModule,
47
66
  KycDetailsComponent
48
- ], template: "<section class=\"main-container d-flex justify-content-center\">\r\n <div class=\"side-panel\">\r\n <div class=\"details\">\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"logo left w-15\">{{ getInitials() }}</div><div class=\"right name w-85\">{{investorDetails?.fullName || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\"d-flex align-items-center justify-content-center f-18\"> phone</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.phoneNumber || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\" d-flex align-items-center justify-content-center f-18\"> email</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.emailId || 'N/A'}}</div>\r\n </div>\r\n </div>\r\n <div class=\"tab-section\">\r\n <div class=\"tabs cursor-pointer\" *ngFor=\"let ele of sidePanelTabs\" (click)=\"selectedPanel = ele.value\" [class.activeTab]=\"selectedPanel == ele.value\">\r\n {{ele.viewValue}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"display-section\">\r\n <ng-container *ngIf=\"selectedPanel == 'KYC'\">\r\n <simpo-kyc-details></simpo-kyc-details>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PORTFOLIO'\">\r\n <simpo-portfolio></simpo-portfolio>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PROPERTIES'\">\r\n <simpo-properties></simpo-properties>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'ORDERS'\">\r\n <simpo-my-orders></simpo-my-orders>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'DOCUMENTS'\">\r\n <simpo-my-documents></simpo-my-documents>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'STATEMENT'\">\r\n <simpo-my-statement></simpo-my-statement>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'HELP'\">\r\n <simpo-need-help></simpo-need-help>\r\n </ng-container>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans}mat-icon{font-family:Material Icons!important}.main-container{height:85vh;width:100%;padding:10px 0;gap:15px;background:#f1f6ff}.side-panel{width:18%;background:#fff;border:2px solid rgba(241,246,255,1);border-radius:10px}.display-section{width:60%}.w-15{width:15%}.w-85{width:85%}.cursor-pointer{cursor:pointer}.details{background:#19a6c6;border-radius:10px;padding:10px;margin:15px}.left-right{gap:10px;margin-bottom:10px}.logo{background:#e6f0ff;border-radius:50%;font-size:14px;text-align:center;font-weight:600;line-height:24px;padding:3px;color:#405071!important}.name{font-size:14px;font-weight:600;line-height:24px;color:#fff!important}.f-18{font-size:18px}.gap-10{gap:10px}.left{color:#fffc}.right{font-weight:500;font-size:14px;line-height:24px;color:#fffc}.tab-section{margin-top:15px}.tabs{margin-bottom:25px;font-weight:500;font-size:16px;line-height:24px;color:#01161e;margin-left:8px}.activeTab{border-left:8px solid rgba(248,169,56,1);font-weight:700!important;color:#219ebc;margin-right:15px;background:#f1f3f7;padding:10px;border-radius:0 6px 6px 0;margin-left:unset}\n"] }]
49
- }], ctorParameters: () => [{ type: i1.RestService }], propDecorators: { data: [{
67
+ ], template: "<section class=\"main-container d-flex justify-content-center\">\r\n <div class=\"side-panel\" *ngIf=\"(isMobile && !selectedPanel) || !isMobile\">\r\n <div class=\"details\">\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"logo left w-15\">{{ getInitials() }}</div><div class=\"right name w-85\">{{investorDetails?.fullName || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\"d-flex align-items-center justify-content-center f-18\"> phone</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.phoneNumber || 'N/A'}}</div>\r\n </div>\r\n <div class=\"left-right d-flex align-items-center gap-10\">\r\n <div class=\"left w-15\"><mat-icon class=\" d-flex align-items-center justify-content-center f-18\"> email</mat-icon>\r\n </div><div class=\"right w-80\">{{investorDetails?.emailId || 'N/A'}}</div>\r\n </div>\r\n </div>\r\n <div class=\"tab-section\">\r\n <div class=\"tabs cursor-pointer\" *ngFor=\"let ele of sidePanelTabs\" (click)=\"changeTab(ele.value)\" [class.activeTab]=\"selectedPanel == ele.value\">\r\n {{ele.viewValue}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"display-section\" *ngIf=\"selectedPanel\">\r\n <ng-container *ngIf=\"selectedPanel == 'KYC'\">\r\n <simpo-kyc-details></simpo-kyc-details>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PORTFOLIO'\">\r\n <simpo-portfolio></simpo-portfolio>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'PROPERTIES'\">\r\n <simpo-properties></simpo-properties>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'ORDERS'\">\r\n <simpo-my-orders></simpo-my-orders>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'DOCUMENTS'\">\r\n <simpo-my-documents></simpo-my-documents>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'STATEMENT'\">\r\n <simpo-my-statement></simpo-my-statement>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedPanel == 'HELP'\">\r\n <simpo-need-help></simpo-need-help>\r\n </ng-container>\r\n </div>\r\n</section>\r\n", styles: ["*{font-family:DM Sans}mat-icon{font-family:Material Icons!important}.main-container{height:85vh;width:100%;padding:10px 0;gap:15px;background:#f1f6ff}.side-panel{width:18%;background:#fff;border:2px solid rgba(241,246,255,1);border-radius:10px}.display-section{width:60%}.w-15{width:15%}.w-85{width:85%}.cursor-pointer{cursor:pointer}.details{background:#19a6c6;border-radius:10px;padding:10px;margin:15px}.left-right{gap:10px;margin-bottom:10px}.logo{background:#e6f0ff;border-radius:50%;font-size:14px;text-align:center;font-weight:600;line-height:24px;padding:3px;color:#405071!important}.name{font-size:14px;font-weight:600;line-height:24px;color:#fff!important}.f-18{font-size:18px}.gap-10{gap:10px}.left{color:#fffc}.right{font-weight:500;font-size:14px;line-height:24px;color:#fffc}.tab-section{margin-top:15px}.tabs{margin-bottom:25px;font-weight:500;font-size:16px;line-height:24px;color:#01161e;margin-left:8px}.activeTab{border-left:8px solid rgba(248,169,56,1);font-weight:700!important;color:#219ebc;margin-right:15px;background:#f1f3f7;padding:10px;border-radius:0 6px 6px 0;margin-left:unset}@media screen and (max-width: 475px){.side-panel,.display-section{width:100%}}\n"] }]
68
+ }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.ActivatedRoute }, { type: i2.Router }], propDecorators: { data: [{
69
+ type: Input
70
+ }], selectedPanel: [{
50
71
  type: Input
72
+ }], tabChanged: [{
73
+ type: Output
51
74
  }] } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvcHJvZmlsZS1zZWN0aW9uL3Byb2ZpbGUtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3Byb2ZpbGUtc2VjdGlvbi9wcm9maWxlLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7OztBQWEzRSxNQUFNLE9BQU8sdUJBQXVCO0lBR2hDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUTVDLGtCQUFhLEdBQVksV0FBVyxDQUFBO1FBRXBDLGtCQUFhLEdBQVc7WUFDdEIsRUFBQyxLQUFLLEVBQUcsV0FBVyxFQUFHLFNBQVMsRUFBRyxjQUFjLEVBQUM7WUFDbEQsRUFBQyxLQUFLLEVBQUcsWUFBWSxFQUFHLFNBQVMsRUFBRyxlQUFlLEVBQUM7WUFDcEQsZ0RBQWdEO1lBQ2hELHNEQUFzRDtZQUN0RCx1REFBdUQ7WUFDdkQsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUM7WUFDaEMsOENBQThDO1NBQy9DLENBQUE7SUFoQkQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBZUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzhHQWxDUSx1QkFBdUI7a0dBQXZCLHVCQUF1QiwyR0N2QnBDLGcxRUE2Q0EsK29DRDVCWSxrQkFBa0IsNERBQUMsbUJBQW1CLDZEQUFDLG9CQUFvQiwrREFBQyxpQkFBaUIsNERBQUMsb0JBQW9CLCtEQUFDLGlCQUFpQiw0REFBQyxPQUFPLDBJQUFDLFlBQVksZ1FBQ2pKLG1CQUFtQjs7MkZBS1YsdUJBQXVCO2tCQVRuQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBQyxtQkFBbUIsRUFBQyxvQkFBb0IsRUFBQyxpQkFBaUIsRUFBQyxvQkFBb0IsRUFBQyxpQkFBaUIsRUFBQyxPQUFPLEVBQUMsWUFBWTt3QkFDakosbUJBQW1CO3FCQUNwQjtnRkFLVSxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBvcnRmb2xpb0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3BvcnRmb2xpby9wb3J0Zm9saW8uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvcGVydGllc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3Byb3BlcnRpZXMvcHJvcGVydGllcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNeURvY3VtZW50c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL215LWRvY3VtZW50cy9teS1kb2N1bWVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXlPcmRlcnNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9teS1vcmRlcnMvbXktb3JkZXJzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE15U3RhdGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvbXktc3RhdGVtZW50L215LXN0YXRlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZWVkSGVscENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL25lZWQtaGVscC9uZWVkLWhlbHAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvZmlsZVNlY3Rpb25Nb2RlbCB9IGZyb20gJy4vcHJvZmlsZS1zZWN0aW9uLm1vZGFsJztcclxuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBLeWNEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi4va3ljLWRldGFpbHMva3ljLWRldGFpbHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tcHJvZmlsZS1zZWN0aW9uJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtQb3J0Zm9saW9Db21wb25lbnQsUHJvcGVydGllc0NvbXBvbmVudCxNeURvY3VtZW50c0NvbXBvbmVudCxNeU9yZGVyc0NvbXBvbmVudCxNeVN0YXRlbWVudENvbXBvbmVudCxOZWVkSGVscENvbXBvbmVudCxNYXRJY29uLENvbW1vbk1vZHVsZSxcclxuICAgIEt5Y0RldGFpbHNDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9maWxlLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wcm9maWxlLXNlY3Rpb24uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZWN0aW9uQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIGRhdGE/OlByb2ZpbGVTZWN0aW9uTW9kZWw7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2Upe1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpe1xyXG4gICAgICB0aGlzLmdldEludmVzdG9yRGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkUGFuZWwgOiBzdHJpbmcgPSBcIlBPUlRGT0xJT1wiXHJcblxyXG4gICAgc2lkZVBhbmVsVGFicyA6IGFueVtdID0gW1xyXG4gICAgICB7dmFsdWUgOiBcIlBPUlRGT0xJT1wiICwgdmlld1ZhbHVlIDogXCJNeSBQb3J0Zm9saW9cIn0sXHJcbiAgICAgIHt2YWx1ZSA6IFwiUFJPUEVSVElFU1wiICwgdmlld1ZhbHVlIDogXCJNeSBQcm9wZXJ0aWVzXCJ9LFxyXG4gICAgICAvLyB7dmFsdWUgOiBcIk9SREVSU1wiICwgdmlld1ZhbHVlIDogXCJNeSBPcmRlcnNcIn0sXHJcbiAgICAgIC8vIHt2YWx1ZSA6IFwiRE9DVU1FTlRTXCIgLCB2aWV3VmFsdWUgOiBcIk15IERvY3VtZW50c1wifSxcclxuICAgICAgLy8ge3ZhbHVlIDogXCJTVEFURU1FTlRcIiAsIHZpZXdWYWx1ZSA6IFwiTXkgU3RhdGVtZW50c1wifSxcclxuICAgICAge3ZhbHVlOiBcIktZQ1wiLCB2aWV3VmFsdWU6IFwiS1lDXCJ9LFxyXG4gICAgICAvLyB7dmFsdWUgOiBcIkhFTFBcIiAsIHZpZXdWYWx1ZSA6IFwiTmVlZCBIZWxwXCJ9LFxyXG4gICAgXVxyXG4gICAgaW52ZXN0b3JEZXRhaWxzOiBhbnk7XHJcblxyXG4gICAgZ2V0SW52ZXN0b3JEZXRhaWxzKCkge1xyXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEludmVzdGVyQnlJZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmludmVzdG9yRGV0YWlscyA9IHJlcy5tZXNzYWdlO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldEluaXRpYWxzKCk6IHN0cmluZyB7XHJcbiAgICAgIGNvbnN0IG5hbWVQYXJ0cyA9IHRoaXMuaW52ZXN0b3JEZXRhaWxzPy5mdWxsTmFtZT8uc3BsaXQoJyAnKTtcclxuICAgICAgY29uc3QgaW5pdGlhbHMgPSBuYW1lUGFydHM/Lm1hcCgocGFydDogYW55KSA9PiBwYXJ0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpKS5qb2luKCcnKTtcclxuICAgICAgcmV0dXJuIGluaXRpYWxzO1xyXG4gICAgfVxyXG5cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cIm1haW4tY29udGFpbmVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2lkZS1wYW5lbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXJpZ2h0IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nbyBsZWZ0IHctMTVcIj57eyBnZXRJbml0aWFscygpIH19PC9kaXY+PGRpdiBjbGFzcz1cInJpZ2h0IG5hbWUgdy04NVwiPnt7aW52ZXN0b3JEZXRhaWxzPy5mdWxsTmFtZSB8fCAnTi9BJ319PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1yaWdodCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQgdy0xNVwiPjxtYXQtaWNvbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmLTE4XCI+IHBob25lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJyaWdodCB3LTgwXCI+e3tpbnZlc3RvckRldGFpbHM/LnBob25lTnVtYmVyIHx8ICdOL0EnfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXJpZ2h0IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdCB3LTE1XCI+PG1hdC1pY29uIGNsYXNzPVwiIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmLTE4XCI+IGVtYWlsPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJyaWdodCB3LTgwXCI+e3tpbnZlc3RvckRldGFpbHM/LmVtYWlsSWQgfHwgJ04vQSd9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnMgY3Vyc29yLXBvaW50ZXJcIiAqbmdGb3I9XCJsZXQgZWxlIG9mIHNpZGVQYW5lbFRhYnNcIiAoY2xpY2spPVwic2VsZWN0ZWRQYW5lbCA9IGVsZS52YWx1ZVwiIFtjbGFzcy5hY3RpdmVUYWJdPVwic2VsZWN0ZWRQYW5lbCA9PSBlbGUudmFsdWVcIj5cclxuICAgICAgICAgICAgICB7e2VsZS52aWV3VmFsdWV9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpc3BsYXktc2VjdGlvblwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRQYW5lbCA9PSAnS1lDJ1wiPlxyXG4gICAgICAgIDxzaW1wby1reWMtZGV0YWlscz48L3NpbXBvLWt5Yy1kZXRhaWxzPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUGFuZWwgPT0gJ1BPUlRGT0xJTydcIj5cclxuICAgICAgICA8c2ltcG8tcG9ydGZvbGlvPjwvc2ltcG8tcG9ydGZvbGlvPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUGFuZWwgPT0gJ1BST1BFUlRJRVMnXCI+XHJcbiAgICAgICAgPHNpbXBvLXByb3BlcnRpZXM+PC9zaW1wby1wcm9wZXJ0aWVzPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUGFuZWwgPT0gJ09SREVSUydcIj5cclxuICAgICAgICA8c2ltcG8tbXktb3JkZXJzPjwvc2ltcG8tbXktb3JkZXJzPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUGFuZWwgPT0gJ0RPQ1VNRU5UUydcIj5cclxuICAgICAgICA8c2ltcG8tbXktZG9jdW1lbnRzPjwvc2ltcG8tbXktZG9jdW1lbnRzPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUGFuZWwgPT0gJ1NUQVRFTUVOVCdcIj5cclxuICAgICAgICA8c2ltcG8tbXktc3RhdGVtZW50Pjwvc2ltcG8tbXktc3RhdGVtZW50PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUGFuZWwgPT0gJ0hFTFAnXCI+XHJcbiAgICAgICAgPHNpbXBvLW5lZWQtaGVscD48L3NpbXBvLW5lZWQtaGVscD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvcHJvZmlsZS1zZWN0aW9uL3Byb2ZpbGUtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3Byb2ZpbGUtc2VjdGlvbi9wcm9maWxlLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7OztBQWMzRSxNQUFNLE9BQU8sdUJBQXVCO0lBTWhDLFlBQW9CLFdBQXdCLEVBQ2xDLGNBQThCLEVBQzlCLE1BQWM7UUFGSixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFD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dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3J0Zm9saW9Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9wb3J0Zm9saW8vcG9ydGZvbGlvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByb3BlcnRpZXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXlEb2N1bWVudHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9teS1kb2N1bWVudHMvbXktZG9jdW1lbnRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE15T3JkZXJzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvbXktb3JkZXJzL215LW9yZGVycy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNeVN0YXRlbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL215LXN0YXRlbWVudC9teS1zdGF0ZW1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmVlZEhlbHBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9uZWVkLWhlbHAvbmVlZC1oZWxwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByb2ZpbGVTZWN0aW9uTW9kZWwgfSBmcm9tICcuL3Byb2ZpbGUtc2VjdGlvbi5tb2RhbCc7XHJcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgS3ljRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4uL2t5Yy1kZXRhaWxzL2t5Yy1kZXRhaWxzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1wcm9maWxlLXNlY3Rpb24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1BvcnRmb2xpb0NvbXBvbmVudCxQcm9wZXJ0aWVzQ29tcG9uZW50LE15RG9jdW1lbnRzQ29tcG9uZW50LE15T3JkZXJzQ29tcG9uZW50LE15U3RhdGVtZW50Q29tcG9uZW50LE5lZWRIZWxwQ29tcG9uZW50LE1hdEljb24sQ29tbW9uTW9kdWxlLFxyXG4gICAgS3ljRGV0YWlsc0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2ZpbGUtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3Byb2ZpbGUtc2VjdGlvbi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZmlsZVNlY3Rpb25Db21wb25lbnQge1xyXG4gICAgQElucHV0KCkgZGF0YT86UHJvZmlsZVNlY3Rpb25Nb2RlbDtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkUGFuZWwgOiBzdHJpbmcgPSBcIlBPUlRGT0xJT1wiO1xyXG4gICAgQE91dHB1dCgpIHRhYkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICAgKXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKXtcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtOiBhbnkpID0+IHtcclxuICAgICAgICBpZih3aW5kb3cuaW5uZXJXaWR0aCA8IDQ3NSlcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYW5lbCA9IHBhcmFtWyd0eXBlJ107XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZ2V0SW52ZXN0b3JEZXRhaWxzKCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBzaWRlUGFuZWxUYWJzIDogYW55W10gPSBbXHJcbiAgICAgIHt2YWx1ZSA6IFwiUE9SVEZPTElPXCIgLCB2aWV3VmFsdWUgOiBcIk15IFBvcnRmb2xpb1wifSxcclxuICAgICAge3ZhbHVlIDogXCJQUk9QRVJUSUVTXCIgLCB2aWV3VmFsdWUgOiBcIk15IFByb3BlcnRpZXNcIn0sXHJcbiAgICAgIC8vIHt2YWx1ZSA6IFwiT1JERVJTXCIgLCB2aWV3VmFsdWUgOiBcIk15IE9yZGVyc1wifSxcclxuICAgICAgLy8ge3ZhbHVlIDogXCJET0NVTUVOVFNcIiAsIHZpZXdWYWx1ZSA6IFwiTXkgRG9jdW1lbnRzXCJ9LFxyXG4gICAgICAvLyB7dmFsdWUgOiBcIlNUQVRFTUVOVFwiICwgdmlld1ZhbHVlIDogXCJNeSBTdGF0ZW1lbnRzXCJ9LFxyXG4gICAgICB7dmFsdWU6IFwiS1lDXCIsIHZpZXdWYWx1ZTogXCJLWUNcIn0sXHJcbiAgICAgIC8vIHt2YWx1ZSA6IFwiSEVMUFwiICwgdmlld1ZhbHVlIDogXCJOZWVkIEhlbHBcIn0sXHJcbiAgICBdXHJcbiAgICBpbnZlc3RvckRldGFpbHM6IGFueTtcclxuXHJcbiAgICBnZXRJbnZlc3RvckRldGFpbHMoKSB7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0SW52ZXN0ZXJCeUlkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW52ZXN0b3JEZXRhaWxzID0gcmVzLm1lc3NhZ2U7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW5pdGlhbHMoKTogc3RyaW5nIHtcclxuICAgICAgY29uc3QgbmFtZVBhcnRzID0gdGhpcy5pbnZlc3RvckRldGFpbHM/LmZ1bGxOYW1lPy5zcGxpdCgnICcpO1xyXG4gICAgICBjb25zdCBpbml0aWFscyA9IG5hbWVQYXJ0cz8ubWFwKChwYXJ0OiBhbnkpID0+IHBhcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkpLmpvaW4oJycpO1xyXG4gICAgICByZXR1cm4gaW5pdGlhbHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA0NzU7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGFiKHRhYjogYW55KSB7XHJcbiAgICAgIGlmKCF0aGlzLmlzTW9iaWxlKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYW5lbCA9IHRhYlxyXG5cclxuICAgICAgaWYodGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgIHRoaXMudGFiQ2hhbmdlZC5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydwcm9maWxlJ10sIHtxdWVyeVBhcmFtczoge3R5cGU6IHRhYn19KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwibWFpbi1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaWRlLXBhbmVsXCIgKm5nSWY9XCIoaXNNb2JpbGUgJiYgIXNlbGVjdGVkUGFuZWwpIHx8ICFpc01vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXJpZ2h0IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nbyBsZWZ0IHctMTVcIj57eyBnZXRJbml0aWFscygpIH19PC9kaXY+PGRpdiBjbGFzcz1cInJpZ2h0IG5hbWUgdy04NVwiPnt7aW52ZXN0b3JEZXRhaWxzPy5mdWxsTmFtZSB8fCAnTi9BJ319PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1yaWdodCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQgdy0xNVwiPjxtYXQtaWNvbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmLTE4XCI+IHBob25lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJyaWdodCB3LTgwXCI+e3tpbnZlc3RvckRldGFpbHM/LnBob25lTnVtYmVyIHx8ICdOL0EnfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXJpZ2h0IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdCB3LTE1XCI+PG1hdC1pY29uIGNsYXNzPVwiIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmLTE4XCI+IGVtYWlsPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJyaWdodCB3LTgwXCI+e3tpbnZlc3RvckRldGFpbHM/LmVtYWlsSWQgfHwgJ04vQSd9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnMgY3Vyc29yLXBvaW50ZXJcIiAqbmdGb3I9XCJsZXQgZWxlIG9mIHNpZGVQYW5lbFRhYnNcIiAoY2xpY2spPVwiY2hhbmdlVGFiKGVsZS52YWx1ZSlcIiBbY2xhc3MuYWN0aXZlVGFiXT1cInNlbGVjdGVkUGFuZWwgPT0gZWxlLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAge3tlbGUudmlld1ZhbHVlfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXNwbGF5LXNlY3Rpb25cIiAqbmdJZj1cInNlbGVjdGVkUGFuZWxcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUGFuZWwgPT0gJ0tZQydcIj5cclxuICAgICAgICA8c2ltcG8ta3ljLWRldGFpbHM+PC9zaW1wby1reWMtZGV0YWlscz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFBhbmVsID09ICdQT1JURk9MSU8nXCI+XHJcbiAgICAgICAgPHNpbXBvLXBvcnRmb2xpbz48L3NpbXBvLXBvcnRmb2xpbz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFBhbmVsID09ICdQUk9QRVJUSUVTJ1wiPlxyXG4gICAgICAgIDxzaW1wby1wcm9wZXJ0aWVzPjwvc2ltcG8tcHJvcGVydGllcz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFBhbmVsID09ICdPUkRFUlMnXCI+XHJcbiAgICAgICAgPHNpbXBvLW15LW9yZGVycz48L3NpbXBvLW15LW9yZGVycz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFBhbmVsID09ICdET0NVTUVOVFMnXCI+XHJcbiAgICAgICAgPHNpbXBvLW15LWRvY3VtZW50cz48L3NpbXBvLW15LWRvY3VtZW50cz5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFBhbmVsID09ICdTVEFURU1FTlQnXCI+XHJcbiAgICAgICAgPHNpbXBvLW15LXN0YXRlbWVudD48L3NpbXBvLW15LXN0YXRlbWVudD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFBhbmVsID09ICdIRUxQJ1wiPlxyXG4gICAgICAgIDxzaW1wby1uZWVkLWhlbHA+PC9zaW1wby1uZWVkLWhlbHA+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19