simpo-component-library 3.6.871 → 3.6.873

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.
Files changed (30) hide show
  1. package/esm2022/lib/directive/button-editor.directive.mjs +11 -23
  2. package/esm2022/lib/directive/image-editor.directive.mjs +8 -21
  3. package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -3
  4. package/esm2022/lib/services/events.service.mjs +4 -1
  5. package/fesm2022/simpo-component-library.mjs +1289 -1525
  6. package/fesm2022/simpo-component-library.mjs.map +1 -1
  7. package/lib/components/input-fields/input-fields.component.d.ts +1 -1
  8. package/lib/directive/background-directive.d.ts +1 -1
  9. package/lib/directive/button-directive.directive.d.ts +1 -1
  10. package/lib/directive/button-editor.directive.d.ts +3 -3
  11. package/lib/directive/color.directive.d.ts +1 -1
  12. package/lib/directive/image-editor.directive.d.ts +2 -7
  13. package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +1 -1
  14. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +2 -2
  15. package/lib/ecommerce/sections/product-list/product-list.component.d.ts +1 -1
  16. package/lib/ecommerce/sections/schemes/schemes.component.d.ts +1 -1
  17. package/lib/ecommerce/sections/store-list/store-list.component.d.ts +1 -1
  18. package/lib/ecommerce/sections/store-page/store-page.component.d.ts +1 -1
  19. package/lib/elements/link-editor/link-editor.component.d.ts +1 -1
  20. package/lib/sections/banner-grid-section/banner-grid-section.component.d.ts +1 -1
  21. package/lib/sections/contact-us/contact-us.component.d.ts +1 -1
  22. package/lib/sections/header-section/header-section.component.d.ts +1 -1
  23. package/lib/sections/moving-text/moving-text.component.d.ts +1 -1
  24. package/lib/sections/pricing-section/pricing-section.component.d.ts +2 -2
  25. package/lib/services/events.service.d.ts +3 -0
  26. package/package.json +1 -1
  27. package/simpo-component-library-3.6.873.tgz +0 -0
  28. package/esm2022/lib/elements/image-editor/image-editor.component.mjs +0 -234
  29. package/lib/elements/image-editor/image-editor.component.d.ts +0 -54
  30. package/simpo-component-library-3.6.871.tgz +0 -0
@@ -280,13 +280,13 @@ export class AddSectionComponent {
280
280
  this.dummy2 = {};
281
281
  }
282
282
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddSectionComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.HttpClient }, { token: i3.EventsService }, { token: i4.ElementServiceService }, { token: i5.RestService }, { token: i4.ElementServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
283
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddSectionComponent, isStandalone: true, selector: "simpo-add-section", ngImport: i0, template: "<!-- <section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section> -->\r\n\r\n<section class=\"main-container d-flex flex-column\">\r\n\r\n <div class=\"header-container fade-in\">\r\n <div class=\"header-title\">Add a section</div>\r\n <div class=\"header-subtitle\">Choose a section \u2014 you can reorder or remove it any time.</div>\r\n <mat-icon class=\"close-btn\" (click)=\"dialog.close()\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"parent-container d-flex flex-column\">\r\n\r\n <!-- Tabs -->\r\n <div class=\"top-tabs-container d-flex justify-content-between fade-in\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"top-tab\" (click)=\"onTabSelect(ele.value)\"\r\n [class.active-top-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Search -->\r\n <div class=\"search-bar-container fade-in\" *ngIf=\"selectedTab != 'SAVED'\">\r\n <div class=\"search-bar d-flex gap-2 align-items-center\">\r\n <img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\">\r\n <input type=\"text\" placeholder='Search section...' [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'\">\r\n\r\n <ng-container *ngIf=\"!isSearch; else emptyScreen\">\r\n\r\n <!-- Quick Add -->\r\n <!-- <div class=\"quick-add-container fade-in d-flex align-items-center\" *ngIf=\"!loader && !searchText\">\r\n <div class=\"quick-add-label\">Quick add:</div>\r\n <div class=\"quick-add-chips d-flex\">\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections); let i = index\">\r\n <ng-container *ngIf=\"i < 6\">\r\n <div class=\"quick-chip stagger-item d-flex align-items-center\"\r\n (click)=\"selectSection(category); toggleCategory(category)\"\r\n [class.active-quick-chip]=\"selectedSectionName === category\">\r\n <span class=\"chip-emoji\">{{getCategoryEmoji(category)}}</span>\r\n {{getFirstSectionName(category)}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n\r\n <!-- CONTENT -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!loader\">\r\n <!-- LEFT -->\r\n <div class=\"left-sidebar\">\r\n <!-- <div class=\"category-header d-flex align-items-center\">\r\n <div class=\"category-icon d-flex align-items-center justify-content-center\">\u2728</div>\r\n <div class=\"fs-14\">AI Recommended</div>\r\n </div> -->\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections)\">\r\n <div class=\"category-block\">\r\n <div class=\"category-header d-flex align-items-end justify-content-between\"\r\n (click)=\"toggleCategory(category)\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <span class=\"category-icon\">\r\n {{getCategoryEmoji(category)}}\r\n </span>\r\n <span class=\"fs-13\">\r\n {{category}}\r\n </span>\r\n <span class=\"category-count\">\r\n ({{sections[category]?.length}})\r\n </span>\r\n </div>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"expandedCategories[category]\">\r\n expand_less\r\n </mat-icon>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"!expandedCategories[category]\">\r\n expand_more\r\n </mat-icon>\r\n </div>\r\n <div class=\"category-items d-flex flex-column\" *ngIf=\"expandedCategories[category]\">\r\n <ng-container *ngFor=\"let sec of sections[category]\">\r\n <div class=\"category-item\"\r\n [class.active]=\"selectedComponent?.componentId === sec.componentId\"\r\n (click)=\"selectComponent(sec, category)\">\r\n {{sec.sectionName}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"right-content\">\r\n\r\n <div class=\"section-group-label\">{{selectedSectionName || 'Sections'}}</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"selectedSection && selectedSection.length > 0\">\r\n\r\n <ng-container *ngFor=\"let ele of selectedSection; let i = index\">\r\n\r\n <div [id]=\"'comp-' + ele.componentId\" class=\"section-card stagger-item\" [style.animation-delay]=\"i * 40 + 'ms'\"\r\n [class.section-card-selected]=\"selectedComponent?.componentId === ele.componentId\"\r\n (click)=\"selectComponentAndHighlight(ele)\">\r\n\r\n <div class=\"section-card-badge\" *ngIf=\"ele.sectionType\">\r\n <!-- + {{ele.sectionType | uppercase}} -->\r\n + {{ele.sectionName | titlecase}}\r\n </div>\r\n\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <div class=\"no-image-placeholder d-flex align-items-center justify-content-center\">\r\n <mat-icon>image</mat-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"section-card-info d-flex align-items-center justify-content-between\">\r\n <div>\r\n <!-- <div class=\"section-card-name\">{{ele.sectionName}}</div> -->\r\n <div class=\"section-card-desc\" *ngIf=\"ele.desc\">{{ele.desc | titlecase}}</div>\r\n </div>\r\n <mat-icon class=\"card-check-icon\"\r\n *ngIf=\"selectedComponent?.componentId === ele.componentId\">\r\n check_circle\r\n </mat-icon>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <div class=\"empty-state fade-in\" *ngIf=\"!selectedSection || selectedSection.length === 0\">\r\n <mat-icon class=\"empty-page-icon\">auto_awesome</mat-icon>\r\n <div class=\"empty-title\">Select a category</div>\r\n <div class=\"empty-subtitle\">\r\n Choose any category from the left sidebar to explore and add sections\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"content-layout d-flex\" *ngIf=\"loader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '6px' }\"></ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1]\">\r\n <div class=\"section-card\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '20px', 'border-radius': '4px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '180px', 'border-radius': '8px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '16px', 'border-radius': '4px' }\"></ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n <!-- Loader skeleton -->\r\n <div class=\"content-layout d-flex\" *ngIf=\"savedLoader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1]\">\r\n <div class=\"section-card\" style=\"margin-bottom:12px\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '18px', 'border-radius': '4px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '100px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '14px', 'border-radius': '4px' }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Loaded: categories + right component card preview -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!savedLoader && savedCategoryKeys.length > 0\">\r\n\r\n <!-- LEFT: component categories list -->\r\n <div class=\"left-sidebar\">\r\n <div class=\"saved-pages-label\">Saved Sections</div>\r\n <ng-container *ngFor=\"let catKey of savedCategoryKeys\">\r\n <div class=\"saved-page-item\"\r\n [class.active]=\"selectedSavedCategory === catKey\"\r\n (click)=\"selectSavedCategory(catKey)\">\r\n <mat-icon class=\"saved-page-icon\">article</mat-icon>\r\n <span class=\"saved-page-name\">{{catKey}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- RIGHT: selected component preview card -->\r\n <div class=\"right-content\">\r\n <div class=\"section-group-label\">Component Preview</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"savedSections[selectedSavedCategory]\">\r\n <div class=\"section-card section-card-preview fade-in\">\r\n\r\n <!-- Section type badge -->\r\n <div class=\"section-card-badge\" *ngIf=\"savedSections[selectedSavedCategory].component?.sectionType\">\r\n {{savedSections[selectedSavedCategory].component.sectionType.split('_').join(' ') | uppercase}}\r\n </div>\r\n\r\n <!-- Preview area (Show image if present, fallback to placeholder) -->\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"savedSections[selectedSavedCategory].component?.styles?.background?.image && savedSections[selectedSavedCategory].component?.styles?.background?.showImage; else savedNoImage\">\r\n <img [src]=\"savedSections[selectedSavedCategory].component.styles.background.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #savedNoImage>\r\n <div class=\"saved-preview-placeholder d-flex flex-column align-items-center justify-content-center\">\r\n <mat-icon>layers</mat-icon>\r\n <span>{{savedSections[selectedSavedCategory].component?.sectionType?.split('_')?.join(' ') || 'Saved Component'}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Card info -->\r\n <div class=\"section-card-info\">\r\n <div class=\"section-card-name\">{{savedSections[selectedSavedCategory].component?.sectionName}}</div>\r\n <div class=\"section-card-desc\" *ngIf=\"savedSections[selectedSavedCategory].component?.desc\">\r\n {{savedSections[selectedSavedCategory].component.desc}}\r\n </div>\r\n </div>\r\n\r\n <!-- Used In footer -->\r\n <div class=\"saved-card-footer\" *ngIf=\"savedSections[selectedSavedCategory].usedIn\">\r\n <div class=\"used-in-container d-flex align-items-center gap-2\">\r\n <mat-icon class=\"used-in-icon\">web</mat-icon>\r\n <span class=\"used-in-text\">\r\n <strong>Used In ({{savedSections[selectedSavedCategory].usedIn.length}} Pages):</strong> \r\n {{savedSections[selectedSavedCategory].usedIn.join(', ')}}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Empty: no saved data at all -->\r\n <div class=\"empty-state fade-in\" *ngIf=\"!savedLoader && savedCategoryKeys.length === 0\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/4076/4076549.png\" alt=\"empty\">\r\n <div class=\"empty-title\">No saved sections</div>\r\n <div class=\"empty-subtitle\">Sections you save from pages will appear here</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'APPS'\">\r\n durga prasad bhogisetti\r\n </ng-container>\r\n\r\n\r\n <!-- EMPTY SEARCH -->\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/7486/7486803.png\">\r\n <div class=\"empty-title\">No sections found</div>\r\n <div class=\"empty-subtitle\">\r\n Try searching something else or explore categories\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"footer-container fade-in\">\r\n <div class=\"footer-hint\">\r\n <mat-icon>info_outline</mat-icon>\r\n <ng-container *ngIf=\"selectedTab !== 'SAVED'\">\r\n You can rearrange or remove this section any time.\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n Saved sections are read-only previews.\r\n </ng-container>\r\n </div>\r\n <div class=\"footer-actions\">\r\n <div class=\"btn-cancel\" (click)=\"dialog.close()\">\r\n {{ selectedTab === 'SAVED' ? 'Close' : 'Cancel' }}\r\n </div>\r\n <!-- Basic tab only -->\r\n <div class=\"btn-add\" *ngIf=\"selectedTab !== 'SAVED'\"\r\n [class.disabled]=\"!selectedComponent\"\r\n (click)=\"selectedComponent && addNewSection(selectedComponent.componentId, selectedComponent.sectionType, $event)\">\r\n + Add section\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family);box-sizing:border-box}mat-icon{font-family:Material Icons!important}.gap-10{gap:10px!important}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.fs-14{font-size:14px}.fs-12{font-size:12px}.fs-16{font-size:16px}.fw-bold{font-weight:700}.main-container{height:100vh;background:#fff;border-radius:16px;overflow:hidden;display:flex;flex-direction:column}.header-container{position:relative;padding:16px 20px 14px;background:#fff;border-bottom:1px solid #f0eef8}.header-title{font-size:16px;font-weight:700;color:#1a1733;line-height:1.4}.header-subtitle{font-size:12px;color:#9e9bb5;margin-top:2px}.close-btn{position:absolute;top:50%;right:18px;transform:translateY(-50%);cursor:pointer;color:#aaa;font-size:20px!important;width:30px!important;height:30px!important;border-radius:8px;transition:background .15s,color .15s;display:flex;align-items:center;justify-content:center}.close-btn:hover{background:#f0eeff;color:#5a4fcf}.parent-container{flex:1;overflow:hidden;background:#f9f8fd;display:flex;flex-direction:column;padding:0}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.top-tabs-container{margin:12px 16px 0;background:#eeecf8;border-radius:12px;padding:4px;display:flex;gap:2px;flex-shrink:0}.top-tab{flex:1;text-align:center;padding:7px 12px;font-size:12.5px;font-weight:500;color:#888;cursor:pointer;border-radius:9px;transition:all .18s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.top-tab:hover:not(.active-top-tab){color:#555;background:#ffffff8c}.active-top-tab{background:#fff;color:#4b3fc0;font-weight:700;box-shadow:0 1px 6px #4b3fc021}.search-bar-container{padding:10px 16px 8px;flex-shrink:0}.search-bar{background:#fff;border:1.5px solid #e6e2f6;border-radius:10px;padding:8px 12px;display:flex;align-items:center;gap:8px;transition:border-color .18s,box-shadow .18s}.search-bar:focus-within{border-color:var(--primary-bg-color);box-shadow:0 0 0 3px #7c6cf01a}.search-bar img{width:15px;height:15px;opacity:.45;flex-shrink:0}.search-bar input{border:none;outline:none;background:transparent;font-size:13px;color:#333;width:100%}.search-bar input::placeholder{color:#bbb}.content-layout{flex:1;overflow:hidden;border-top:1px solid #f0eef8;display:flex;min-height:0}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.left-sidebar{width:210px;min-width:210px;background:#fff;padding:12px 8px;overflow-y:auto;border-right:1px solid #f0eef8;height:100%}.left-sidebar::-webkit-scrollbar{width:3px}.left-sidebar::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.category-block{margin-bottom:2px}.category-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;cursor:pointer;border-radius:9px;transition:background .15s;-webkit-user-select:none;user-select:none}.category-header:hover{background:#f3f0fd}.category-icon{font-size:15px;width:20px;text-align:center;flex-shrink:0;line-height:1}.fs-13{font-size:13px}.category-count{font-size:11px;font-weight:500;color:#bbb;position:relative;top:1px}.category-arrow{font-size:18px!important;width:18px!important;height:18px!important;color:#ccc;transition:transform .22s ease,color .15s;flex-shrink:0}.category-block:has(.category-items) .category-arrow{color:#7c6cf0}.category-items{padding:2px 4px 4px 28px;display:flex;flex-direction:column;gap:1px;animation:dropdownFade .2s ease}.category-item{padding:5px 10px;font-size:12px;color:#555;cursor:pointer;border-radius:7px;transition:background .13s,color .13s;-webkit-user-select:none;user-select:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.category-item:hover{background:#f0eeff;color:#4b3fc0}.category-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.right-content{flex:1;overflow-y:auto;padding:14px 14px 14px 12px;height:100%;min-width:0}.right-content::-webkit-scrollbar{width:4px}.right-content::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.section-group-label{font-size:12px;font-weight:700;letter-spacing:.4px;color:#9e9bb5;margin-bottom:12px;text-transform:uppercase}.sections-list{display:flex;flex-direction:column;gap:12px}.section-card{border:1.5px solid #ebe8f8;border-radius:12px;overflow:hidden;cursor:pointer;background:#fff;transition:all .2s ease}.section-card:hover{border-color:#c4baf0;box-shadow:0 4px 16px #7c6cf01a;transform:translateY(-1px)}.section-card-preview{cursor:default!important;pointer-events:none}.section-card-preview:hover{border-color:#ebe8f8!important;box-shadow:none!important;transform:none!important}.section-card-selected{border-color:#7c6cf0!important;box-shadow:0 0 0 3px #7c6cf024!important}.section-card-badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.5px;color:#5a4fcf;background:#edeafc;padding:3px 10px;margin:10px 10px 6px;border-radius:20px}.section-img-container{width:100%;overflow:hidden;background:#f5f3fc;display:flex;align-items:center;justify-content:center;max-height:200px;min-height:100px}.section-img-container img{width:100%;display:block;object-fit:cover;transition:transform .25s ease}.section-card:hover .section-img-container img{transform:scale(1.03)}.no-image-placeholder{height:130px;display:flex;align-items:center;justify-content:center;color:#d5d0ee}.no-image-placeholder mat-icon{font-size:38px!important;width:38px!important;height:38px!important;color:#d5d0ee}.section-card-info{padding:10px 14px 12px}.section-card-name{font-size:13px;font-weight:600;color:#1a1733;margin-bottom:3px}.section-card-desc{font-size:12px;color:#9e9bb5;line-height:1.5}.card-check-icon{font-size:20px!important;width:20px!important;height:20px!important;color:#7c6cf0;flex-shrink:0;animation:checkPop .22s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes checkPop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.quick-add-container{padding:4px 24px 10px;gap:10px;flex-wrap:wrap;flex-shrink:0}.quick-add-label{font-size:12px;color:#888;white-space:nowrap}.quick-add-chips{gap:6px;width:100%;overflow-y:scroll;white-space:nowrap}.quick-chip{gap:5px;padding:4px 10px;font-size:12px;border:1.5px solid #e0e0e0;border-radius:20px;cursor:pointer;color:#333;background:#fff;transition:all .2s ease;-webkit-user-select:none;user-select:none}.quick-chip.active-quick-chip{border-color:#7c6cf0;color:#4b3fc0;font-weight:500}.chip-emoji{font-size:14px}.saved-pages-label{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#bbb;padding:0 10px;margin-bottom:10px}.saved-page-item{display:flex;align-items:center;gap:7px;padding:7px 10px;cursor:pointer;border-radius:9px;font-size:13px;font-weight:500;color:#666;transition:background .15s,color .15s;-webkit-user-select:none;user-select:none;margin-bottom:2px;overflow:hidden}.saved-page-item:hover{background:#f0eeff;color:#4b3fc0}.saved-page-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.saved-page-icon{font-size:15px!important;width:15px!important;height:15px!important;color:inherit;flex-shrink:0}.saved-page-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.saved-preview-placeholder{height:100px;width:100%;background:#f5f3fc;gap:6px}.saved-preview-placeholder mat-icon{font-size:28px!important;width:28px!important;height:28px!important;color:#c8c2ee}.saved-preview-placeholder span{font-size:11px;color:#b0aac8;text-transform:capitalize}.empty-page-icon{font-size:40px!important;width:40px!important;height:40px!important;color:#d5d0ee;margin-bottom:4px}.saved-card-footer{padding:10px 14px;background:#faf9ff;border-top:1px solid #ebe8f8}.used-in-container{font-size:11.5px;color:#666}.used-in-icon{font-size:15px!important;width:15px!important;height:15px!important;color:#7c6cf0}.used-in-text{line-height:1.4}.used-in-text strong{color:#4b3fc0;font-weight:600}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}.image-container-1{margin-bottom:16px}.empty-img{width:100px;opacity:.85}.empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:32px 24px}.empty-state img{width:110px;opacity:.8;margin-bottom:4px}.empty-title{font-size:15px;font-weight:700;color:#2d2a4a}.empty-subtitle{font-size:12.5px;color:#aaa;max-width:240px;line-height:1.6}.footer-container{padding:12px 20px;border-top:1px solid #f0eef8;background:#fff;flex-shrink:0;display:flex;align-items:center;justify-content:space-between}.footer-hint{font-size:11.5px;color:#bbb;display:flex;align-items:center;gap:5px}.footer-hint mat-icon{font-size:14px!important;width:14px!important;height:14px!important;color:#d0cbf0}.footer-actions{display:flex;align-items:center;gap:8px}.btn-cancel{padding:8px 18px;font-size:13px;font-weight:500;border:1.5px solid #e4e0f6;border-radius:9px;background:#fff;color:#666;cursor:pointer;transition:border-color .15s,color .15s,background .15s;-webkit-user-select:none;user-select:none}.btn-cancel:hover{border-color:#b4aae8;color:#4b3fc0;background:#f8f6ff}.btn-add{padding:8px 20px;font-size:13px;font-weight:700;border:none;border-radius:9px;background:var(--primary-bg-color);color:#fff;cursor:pointer;transition:opacity .15s,box-shadow .15s,transform .15s;-webkit-user-select:none;user-select:none;box-shadow:0 3px 10px #7c6cf047}.btn-add:hover:not(.disabled){opacity:.92;transform:translateY(-1px);box-shadow:0 5px 14px #7c6cf05c}.btn-add.disabled{opacity:.38;cursor:not-allowed;box-shadow:none;pointer-events:none}.sidebar-group{margin-bottom:2px}.sidebar-group-icon{font-size:15px;width:20px;text-align:center}.sidebar-group-label{flex:1;font-size:13px}.sidebar-group-header{gap:8px;padding:9px 14px;cursor:pointer;border-radius:0;transition:background .12s;-webkit-user-select:none;user-select:none;font-size:13px;color:#444}.sidebar-group-header:hover{background:#f0f0f0}.sidebar-group-active{background:#ece9fd;color:#4b3fc0;font-weight:600}.sidebar-chevron{font-size:18px;width:18px;height:18px;color:#aaa;transition:transform .2s}.sidebar-chevron.rotated{transform:rotate(180deg)}.subcategory-item{padding:6px 10px 6px 8px;font-size:12px;color:#555;cursor:pointer;border-radius:6px;transition:background .12s;-webkit-user-select:none;user-select:none}.subcategory-item:hover{background:#ece9fd;color:#4b3fc0}.subcategory-active{background:#ece9fd;color:#4b3fc0;font-weight:500}.active-subcategory{background:#7c6cf0!important;color:#fff!important}.sidebar-subcategory{overflow:hidden;animation:dropdownSmooth .25s ease}.fade-in{animation:fadeIn .22s ease}.fade-slide{animation:fadeSlide .25s ease}.stagger-item{opacity:0;transform:translateY(8px);animation:staggerFade .28s ease forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeSlide{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes staggerFade{to{opacity:1;transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes dropdownSmooth{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes expandFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i8.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddSectionComponent, isStandalone: true, selector: "simpo-add-section", ngImport: i0, template: "<!-- <section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section> -->\r\n\r\n<section class=\"main-container d-flex flex-column\">\r\n\r\n <div class=\"header-container fade-in\">\r\n <div class=\"header-title\">Add a section</div>\r\n <div class=\"header-subtitle\">Choose a section \u2014 you can reorder or remove it any time.</div>\r\n <mat-icon class=\"close-btn\" (click)=\"dialog.close()\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"parent-container d-flex flex-column\">\r\n\r\n <!-- Tabs -->\r\n <div class=\"top-tabs-container d-flex justify-content-between fade-in\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"top-tab\" (click)=\"onTabSelect(ele.value)\"\r\n [class.active-top-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Search -->\r\n <div class=\"search-bar-container fade-in\" *ngIf=\"selectedTab != 'SAVED'\">\r\n <div class=\"search-bar d-flex gap-2 align-items-center\">\r\n <img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\">\r\n <input type=\"text\" placeholder='Search section...' [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'\">\r\n\r\n <ng-container *ngIf=\"!isSearch; else emptyScreen\">\r\n\r\n <!-- Quick Add -->\r\n <!-- <div class=\"quick-add-container fade-in d-flex align-items-center\" *ngIf=\"!loader && !searchText\">\r\n <div class=\"quick-add-label\">Quick add:</div>\r\n <div class=\"quick-add-chips d-flex\">\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections); let i = index\">\r\n <ng-container *ngIf=\"i < 6\">\r\n <div class=\"quick-chip stagger-item d-flex align-items-center\"\r\n (click)=\"selectSection(category); toggleCategory(category)\"\r\n [class.active-quick-chip]=\"selectedSectionName === category\">\r\n <span class=\"chip-emoji\">{{getCategoryEmoji(category)}}</span>\r\n {{getFirstSectionName(category)}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n\r\n <!-- CONTENT -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!loader\">\r\n <!-- LEFT -->\r\n <div class=\"left-sidebar\">\r\n <!-- <div class=\"category-header d-flex align-items-center\">\r\n <div class=\"category-icon d-flex align-items-center justify-content-center\">\u2728</div>\r\n <div class=\"fs-14\">AI Recommended</div>\r\n </div> -->\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections)\">\r\n <div class=\"category-block\">\r\n <div class=\"category-header d-flex align-items-end justify-content-between\"\r\n (click)=\"toggleCategory(category)\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <span class=\"category-icon\">\r\n {{getCategoryEmoji(category)}}\r\n </span>\r\n <span class=\"fs-13\">\r\n {{category}}\r\n </span>\r\n <span class=\"category-count\">\r\n ({{sections[category]?.length}})\r\n </span>\r\n </div>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"expandedCategories[category]\">\r\n expand_less\r\n </mat-icon>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"!expandedCategories[category]\">\r\n expand_more\r\n </mat-icon>\r\n </div>\r\n <div class=\"category-items d-flex flex-column\" *ngIf=\"expandedCategories[category]\">\r\n <ng-container *ngFor=\"let sec of sections[category]\">\r\n <div class=\"category-item\"\r\n [class.active]=\"selectedComponent?.componentId === sec.componentId\"\r\n (click)=\"selectComponent(sec, category)\">\r\n {{sec.sectionName}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"right-content\">\r\n\r\n <div class=\"section-group-label\">{{selectedSectionName || 'Sections'}}</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"selectedSection && selectedSection.length > 0\">\r\n\r\n <ng-container *ngFor=\"let ele of selectedSection; let i = index\">\r\n\r\n <div [id]=\"'comp-' + ele.componentId\" class=\"section-card stagger-item\" [style.animation-delay]=\"i * 40 + 'ms'\"\r\n [class.section-card-selected]=\"selectedComponent?.componentId === ele.componentId\"\r\n (click)=\"selectComponentAndHighlight(ele)\">\r\n\r\n <div class=\"section-card-badge\" *ngIf=\"ele.sectionType\">\r\n <!-- + {{ele.sectionType | uppercase}} -->\r\n + {{ele.sectionName | titlecase}}\r\n </div>\r\n\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <div class=\"no-image-placeholder d-flex align-items-center justify-content-center\">\r\n <mat-icon>image</mat-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"section-card-info d-flex align-items-center justify-content-between\">\r\n <div>\r\n <!-- <div class=\"section-card-name\">{{ele.sectionName}}</div> -->\r\n <div class=\"section-card-desc\" *ngIf=\"ele.desc\">{{ele.desc | titlecase}}</div>\r\n </div>\r\n <mat-icon class=\"card-check-icon\"\r\n *ngIf=\"selectedComponent?.componentId === ele.componentId\">\r\n check_circle\r\n </mat-icon>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <div class=\"empty-state fade-in\" *ngIf=\"!selectedSection || selectedSection.length === 0\">\r\n <mat-icon class=\"empty-page-icon\">auto_awesome</mat-icon>\r\n <div class=\"empty-title\">Select a category</div>\r\n <div class=\"empty-subtitle\">\r\n Choose any category from the left sidebar to explore and add sections\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"content-layout d-flex\" *ngIf=\"loader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '6px' }\"></ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1]\">\r\n <div class=\"section-card\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '20px', 'border-radius': '4px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '180px', 'border-radius': '8px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '16px', 'border-radius': '4px' }\"></ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n <!-- Loader skeleton -->\r\n <div class=\"content-layout d-flex\" *ngIf=\"savedLoader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1]\">\r\n <div class=\"section-card\" style=\"margin-bottom:12px\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '18px', 'border-radius': '4px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '100px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '14px', 'border-radius': '4px' }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Loaded: categories + right component card preview -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!savedLoader && savedCategoryKeys.length > 0\">\r\n\r\n <!-- LEFT: component categories list -->\r\n <div class=\"left-sidebar\">\r\n <div class=\"saved-pages-label\">Saved Sections</div>\r\n <ng-container *ngFor=\"let catKey of savedCategoryKeys\">\r\n <div class=\"saved-page-item\"\r\n [class.active]=\"selectedSavedCategory === catKey\"\r\n (click)=\"selectSavedCategory(catKey)\">\r\n <mat-icon class=\"saved-page-icon\">article</mat-icon>\r\n <span class=\"saved-page-name\">{{catKey}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- RIGHT: selected component preview card -->\r\n <div class=\"right-content\">\r\n <div class=\"section-group-label\">Component Preview</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"savedSections[selectedSavedCategory]\">\r\n <div class=\"section-card section-card-preview fade-in\">\r\n\r\n <!-- Section type badge -->\r\n <div class=\"section-card-badge\" *ngIf=\"savedSections[selectedSavedCategory].component?.sectionType\">\r\n {{savedSections[selectedSavedCategory].component.sectionType.split('_').join(' ') | uppercase}}\r\n </div>\r\n\r\n <!-- Preview area (Show image if present, fallback to placeholder) -->\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"savedSections[selectedSavedCategory].component?.styles?.background?.image && savedSections[selectedSavedCategory].component?.styles?.background?.showImage; else savedNoImage\">\r\n <img [src]=\"savedSections[selectedSavedCategory].component.styles.background.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #savedNoImage>\r\n <div class=\"saved-preview-placeholder d-flex flex-column align-items-center justify-content-center\">\r\n <mat-icon>layers</mat-icon>\r\n <span>{{savedSections[selectedSavedCategory].component?.sectionType?.split('_')?.join(' ') || 'Saved Component'}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Card info -->\r\n <div class=\"section-card-info\">\r\n <div class=\"section-card-name\">{{savedSections[selectedSavedCategory].component?.sectionName}}</div>\r\n <div class=\"section-card-desc\" *ngIf=\"savedSections[selectedSavedCategory].component?.desc\">\r\n {{savedSections[selectedSavedCategory].component.desc}}\r\n </div>\r\n </div>\r\n\r\n <!-- Used In footer -->\r\n <div class=\"saved-card-footer\" *ngIf=\"savedSections[selectedSavedCategory].usedIn\">\r\n <div class=\"used-in-container d-flex align-items-center gap-2\">\r\n <mat-icon class=\"used-in-icon\">web</mat-icon>\r\n <span class=\"used-in-text\">\r\n <strong>Used In ({{savedSections[selectedSavedCategory].usedIn.length}} Pages):</strong> \r\n {{savedSections[selectedSavedCategory].usedIn.join(', ')}}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Empty: no saved data at all -->\r\n <div class=\"empty-state fade-in\" *ngIf=\"!savedLoader && savedCategoryKeys.length === 0\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/4076/4076549.png\" alt=\"empty\">\r\n <div class=\"empty-title\">No saved sections</div>\r\n <div class=\"empty-subtitle\">Sections you save from pages will appear here</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'APPS'\">\r\n </ng-container>\r\n\r\n\r\n <!-- EMPTY SEARCH -->\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/7486/7486803.png\">\r\n <div class=\"empty-title\">No sections found</div>\r\n <div class=\"empty-subtitle\">\r\n Try searching something else or explore categories\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"footer-container fade-in\">\r\n <div class=\"footer-hint\">\r\n <mat-icon>info_outline</mat-icon>\r\n <ng-container *ngIf=\"selectedTab !== 'SAVED'\">\r\n You can rearrange or remove this section any time.\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n Saved sections are read-only previews.\r\n </ng-container>\r\n </div>\r\n <div class=\"footer-actions\">\r\n <div class=\"btn-cancel\" (click)=\"dialog.close()\">\r\n {{ selectedTab === 'SAVED' ? 'Close' : 'Cancel' }}\r\n </div>\r\n <!-- Basic tab only -->\r\n <div class=\"btn-add\" *ngIf=\"selectedTab !== 'SAVED'\"\r\n [class.disabled]=\"!selectedComponent\"\r\n (click)=\"selectedComponent && addNewSection(selectedComponent.componentId, selectedComponent.sectionType, $event)\">\r\n + Add section\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family);box-sizing:border-box}mat-icon{font-family:Material Icons!important}.gap-10{gap:10px!important}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.fs-14{font-size:14px}.fs-12{font-size:12px}.fs-16{font-size:16px}.fw-bold{font-weight:700}.main-container{height:100vh;background:#fff;border-radius:16px;overflow:hidden;display:flex;flex-direction:column}.header-container{position:relative;padding:16px 20px 14px;background:#fff;border-bottom:1px solid #f0eef8}.header-title{font-size:16px;font-weight:700;color:#1a1733;line-height:1.4}.header-subtitle{font-size:12px;color:#9e9bb5;margin-top:2px}.close-btn{position:absolute;top:50%;right:18px;transform:translateY(-50%);cursor:pointer;color:#aaa;font-size:20px!important;width:30px!important;height:30px!important;border-radius:8px;transition:background .15s,color .15s;display:flex;align-items:center;justify-content:center}.close-btn:hover{background:#f0eeff;color:#5a4fcf}.parent-container{flex:1;overflow:hidden;background:#f9f8fd;display:flex;flex-direction:column;padding:0}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.top-tabs-container{margin:12px 16px 0;background:#eeecf8;border-radius:12px;padding:4px;display:flex;gap:2px;flex-shrink:0}.top-tab{flex:1;text-align:center;padding:7px 12px;font-size:12.5px;font-weight:500;color:#888;cursor:pointer;border-radius:9px;transition:all .18s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.top-tab:hover:not(.active-top-tab){color:#555;background:#ffffff8c}.active-top-tab{background:#fff;color:#4b3fc0;font-weight:700;box-shadow:0 1px 6px #4b3fc021}.search-bar-container{padding:10px 16px 8px;flex-shrink:0}.search-bar{background:#fff;border:1.5px solid #e6e2f6;border-radius:10px;padding:8px 12px;display:flex;align-items:center;gap:8px;transition:border-color .18s,box-shadow .18s}.search-bar:focus-within{border-color:var(--primary-bg-color);box-shadow:0 0 0 3px #7c6cf01a}.search-bar img{width:15px;height:15px;opacity:.45;flex-shrink:0}.search-bar input{border:none;outline:none;background:transparent;font-size:13px;color:#333;width:100%}.search-bar input::placeholder{color:#bbb}.content-layout{flex:1;overflow:hidden;border-top:1px solid #f0eef8;display:flex;min-height:0}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.left-sidebar{width:210px;min-width:210px;background:#fff;padding:12px 8px;overflow-y:auto;border-right:1px solid #f0eef8;height:100%}.left-sidebar::-webkit-scrollbar{width:3px}.left-sidebar::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.category-block{margin-bottom:2px}.category-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;cursor:pointer;border-radius:9px;transition:background .15s;-webkit-user-select:none;user-select:none}.category-header:hover{background:#f3f0fd}.category-icon{font-size:15px;width:20px;text-align:center;flex-shrink:0;line-height:1}.fs-13{font-size:13px}.category-count{font-size:11px;font-weight:500;color:#bbb;position:relative;top:1px}.category-arrow{font-size:18px!important;width:18px!important;height:18px!important;color:#ccc;transition:transform .22s ease,color .15s;flex-shrink:0}.category-block:has(.category-items) .category-arrow{color:#7c6cf0}.category-items{padding:2px 4px 4px 28px;display:flex;flex-direction:column;gap:1px;animation:dropdownFade .2s ease}.category-item{padding:5px 10px;font-size:12px;color:#555;cursor:pointer;border-radius:7px;transition:background .13s,color .13s;-webkit-user-select:none;user-select:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.category-item:hover{background:#f0eeff;color:#4b3fc0}.category-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.right-content{flex:1;overflow-y:auto;padding:14px 14px 14px 12px;height:100%;min-width:0}.right-content::-webkit-scrollbar{width:4px}.right-content::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.section-group-label{font-size:12px;font-weight:700;letter-spacing:.4px;color:#9e9bb5;margin-bottom:12px;text-transform:uppercase}.sections-list{display:flex;flex-direction:column;gap:12px}.section-card{border:1.5px solid #ebe8f8;border-radius:12px;overflow:hidden;cursor:pointer;background:#fff;transition:all .2s ease}.section-card:hover{border-color:#c4baf0;box-shadow:0 4px 16px #7c6cf01a;transform:translateY(-1px)}.section-card-preview{cursor:default!important;pointer-events:none}.section-card-preview:hover{border-color:#ebe8f8!important;box-shadow:none!important;transform:none!important}.section-card-selected{border-color:#7c6cf0!important;box-shadow:0 0 0 3px #7c6cf024!important}.section-card-badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.5px;color:#5a4fcf;background:#edeafc;padding:3px 10px;margin:10px 10px 6px;border-radius:20px}.section-img-container{width:100%;overflow:hidden;background:#f5f3fc;display:flex;align-items:center;justify-content:center;max-height:200px;min-height:100px}.section-img-container img{width:100%;display:block;object-fit:cover;transition:transform .25s ease}.section-card:hover .section-img-container img{transform:scale(1.03)}.no-image-placeholder{height:130px;display:flex;align-items:center;justify-content:center;color:#d5d0ee}.no-image-placeholder mat-icon{font-size:38px!important;width:38px!important;height:38px!important;color:#d5d0ee}.section-card-info{padding:10px 14px 12px}.section-card-name{font-size:13px;font-weight:600;color:#1a1733;margin-bottom:3px}.section-card-desc{font-size:12px;color:#9e9bb5;line-height:1.5}.card-check-icon{font-size:20px!important;width:20px!important;height:20px!important;color:#7c6cf0;flex-shrink:0;animation:checkPop .22s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes checkPop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.quick-add-container{padding:4px 24px 10px;gap:10px;flex-wrap:wrap;flex-shrink:0}.quick-add-label{font-size:12px;color:#888;white-space:nowrap}.quick-add-chips{gap:6px;width:100%;overflow-y:scroll;white-space:nowrap}.quick-chip{gap:5px;padding:4px 10px;font-size:12px;border:1.5px solid #e0e0e0;border-radius:20px;cursor:pointer;color:#333;background:#fff;transition:all .2s ease;-webkit-user-select:none;user-select:none}.quick-chip.active-quick-chip{border-color:#7c6cf0;color:#4b3fc0;font-weight:500}.chip-emoji{font-size:14px}.saved-pages-label{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#bbb;padding:0 10px;margin-bottom:10px}.saved-page-item{display:flex;align-items:center;gap:7px;padding:7px 10px;cursor:pointer;border-radius:9px;font-size:13px;font-weight:500;color:#666;transition:background .15s,color .15s;-webkit-user-select:none;user-select:none;margin-bottom:2px;overflow:hidden}.saved-page-item:hover{background:#f0eeff;color:#4b3fc0}.saved-page-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.saved-page-icon{font-size:15px!important;width:15px!important;height:15px!important;color:inherit;flex-shrink:0}.saved-page-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.saved-preview-placeholder{height:100px;width:100%;background:#f5f3fc;gap:6px}.saved-preview-placeholder mat-icon{font-size:28px!important;width:28px!important;height:28px!important;color:#c8c2ee}.saved-preview-placeholder span{font-size:11px;color:#b0aac8;text-transform:capitalize}.empty-page-icon{font-size:40px!important;width:40px!important;height:40px!important;color:#d5d0ee;margin-bottom:4px}.saved-card-footer{padding:10px 14px;background:#faf9ff;border-top:1px solid #ebe8f8}.used-in-container{font-size:11.5px;color:#666}.used-in-icon{font-size:15px!important;width:15px!important;height:15px!important;color:#7c6cf0}.used-in-text{line-height:1.4}.used-in-text strong{color:#4b3fc0;font-weight:600}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}.image-container-1{margin-bottom:16px}.empty-img{width:100px;opacity:.85}.empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:32px 24px}.empty-state img{width:110px;opacity:.8;margin-bottom:4px}.empty-title{font-size:15px;font-weight:700;color:#2d2a4a}.empty-subtitle{font-size:12.5px;color:#aaa;max-width:240px;line-height:1.6}.footer-container{padding:12px 20px;border-top:1px solid #f0eef8;background:#fff;flex-shrink:0;display:flex;align-items:center;justify-content:space-between}.footer-hint{font-size:11.5px;color:#bbb;display:flex;align-items:center;gap:5px}.footer-hint mat-icon{font-size:14px!important;width:14px!important;height:14px!important;color:#d0cbf0}.footer-actions{display:flex;align-items:center;gap:8px}.btn-cancel{padding:8px 18px;font-size:13px;font-weight:500;border:1.5px solid #e4e0f6;border-radius:9px;background:#fff;color:#666;cursor:pointer;transition:border-color .15s,color .15s,background .15s;-webkit-user-select:none;user-select:none}.btn-cancel:hover{border-color:#b4aae8;color:#4b3fc0;background:#f8f6ff}.btn-add{padding:8px 20px;font-size:13px;font-weight:700;border:none;border-radius:9px;background:var(--primary-bg-color);color:#fff;cursor:pointer;transition:opacity .15s,box-shadow .15s,transform .15s;-webkit-user-select:none;user-select:none;box-shadow:0 3px 10px #7c6cf047}.btn-add:hover:not(.disabled){opacity:.92;transform:translateY(-1px);box-shadow:0 5px 14px #7c6cf05c}.btn-add.disabled{opacity:.38;cursor:not-allowed;box-shadow:none;pointer-events:none}.sidebar-group{margin-bottom:2px}.sidebar-group-icon{font-size:15px;width:20px;text-align:center}.sidebar-group-label{flex:1;font-size:13px}.sidebar-group-header{gap:8px;padding:9px 14px;cursor:pointer;border-radius:0;transition:background .12s;-webkit-user-select:none;user-select:none;font-size:13px;color:#444}.sidebar-group-header:hover{background:#f0f0f0}.sidebar-group-active{background:#ece9fd;color:#4b3fc0;font-weight:600}.sidebar-chevron{font-size:18px;width:18px;height:18px;color:#aaa;transition:transform .2s}.sidebar-chevron.rotated{transform:rotate(180deg)}.subcategory-item{padding:6px 10px 6px 8px;font-size:12px;color:#555;cursor:pointer;border-radius:6px;transition:background .12s;-webkit-user-select:none;user-select:none}.subcategory-item:hover{background:#ece9fd;color:#4b3fc0}.subcategory-active{background:#ece9fd;color:#4b3fc0;font-weight:500}.active-subcategory{background:#7c6cf0!important;color:#fff!important}.sidebar-subcategory{overflow:hidden;animation:dropdownSmooth .25s ease}.fade-in{animation:fadeIn .22s ease}.fade-slide{animation:fadeSlide .25s ease}.stagger-item{opacity:0;transform:translateY(8px);animation:staggerFade .28s ease forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeSlide{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes staggerFade{to{opacity:1;transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes dropdownSmooth{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes expandFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i8.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
284
284
  }
285
285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddSectionComponent, decorators: [{
286
286
  type: Component,
287
- args: [{ selector: 'simpo-add-section', standalone: true, imports: [CommonModule, MatIconModule, NgxSkeletonLoaderModule, FormsModule], template: "<!-- <section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section> -->\r\n\r\n<section class=\"main-container d-flex flex-column\">\r\n\r\n <div class=\"header-container fade-in\">\r\n <div class=\"header-title\">Add a section</div>\r\n <div class=\"header-subtitle\">Choose a section \u2014 you can reorder or remove it any time.</div>\r\n <mat-icon class=\"close-btn\" (click)=\"dialog.close()\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"parent-container d-flex flex-column\">\r\n\r\n <!-- Tabs -->\r\n <div class=\"top-tabs-container d-flex justify-content-between fade-in\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"top-tab\" (click)=\"onTabSelect(ele.value)\"\r\n [class.active-top-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Search -->\r\n <div class=\"search-bar-container fade-in\" *ngIf=\"selectedTab != 'SAVED'\">\r\n <div class=\"search-bar d-flex gap-2 align-items-center\">\r\n <img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\">\r\n <input type=\"text\" placeholder='Search section...' [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'\">\r\n\r\n <ng-container *ngIf=\"!isSearch; else emptyScreen\">\r\n\r\n <!-- Quick Add -->\r\n <!-- <div class=\"quick-add-container fade-in d-flex align-items-center\" *ngIf=\"!loader && !searchText\">\r\n <div class=\"quick-add-label\">Quick add:</div>\r\n <div class=\"quick-add-chips d-flex\">\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections); let i = index\">\r\n <ng-container *ngIf=\"i < 6\">\r\n <div class=\"quick-chip stagger-item d-flex align-items-center\"\r\n (click)=\"selectSection(category); toggleCategory(category)\"\r\n [class.active-quick-chip]=\"selectedSectionName === category\">\r\n <span class=\"chip-emoji\">{{getCategoryEmoji(category)}}</span>\r\n {{getFirstSectionName(category)}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n\r\n <!-- CONTENT -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!loader\">\r\n <!-- LEFT -->\r\n <div class=\"left-sidebar\">\r\n <!-- <div class=\"category-header d-flex align-items-center\">\r\n <div class=\"category-icon d-flex align-items-center justify-content-center\">\u2728</div>\r\n <div class=\"fs-14\">AI Recommended</div>\r\n </div> -->\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections)\">\r\n <div class=\"category-block\">\r\n <div class=\"category-header d-flex align-items-end justify-content-between\"\r\n (click)=\"toggleCategory(category)\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <span class=\"category-icon\">\r\n {{getCategoryEmoji(category)}}\r\n </span>\r\n <span class=\"fs-13\">\r\n {{category}}\r\n </span>\r\n <span class=\"category-count\">\r\n ({{sections[category]?.length}})\r\n </span>\r\n </div>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"expandedCategories[category]\">\r\n expand_less\r\n </mat-icon>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"!expandedCategories[category]\">\r\n expand_more\r\n </mat-icon>\r\n </div>\r\n <div class=\"category-items d-flex flex-column\" *ngIf=\"expandedCategories[category]\">\r\n <ng-container *ngFor=\"let sec of sections[category]\">\r\n <div class=\"category-item\"\r\n [class.active]=\"selectedComponent?.componentId === sec.componentId\"\r\n (click)=\"selectComponent(sec, category)\">\r\n {{sec.sectionName}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"right-content\">\r\n\r\n <div class=\"section-group-label\">{{selectedSectionName || 'Sections'}}</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"selectedSection && selectedSection.length > 0\">\r\n\r\n <ng-container *ngFor=\"let ele of selectedSection; let i = index\">\r\n\r\n <div [id]=\"'comp-' + ele.componentId\" class=\"section-card stagger-item\" [style.animation-delay]=\"i * 40 + 'ms'\"\r\n [class.section-card-selected]=\"selectedComponent?.componentId === ele.componentId\"\r\n (click)=\"selectComponentAndHighlight(ele)\">\r\n\r\n <div class=\"section-card-badge\" *ngIf=\"ele.sectionType\">\r\n <!-- + {{ele.sectionType | uppercase}} -->\r\n + {{ele.sectionName | titlecase}}\r\n </div>\r\n\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <div class=\"no-image-placeholder d-flex align-items-center justify-content-center\">\r\n <mat-icon>image</mat-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"section-card-info d-flex align-items-center justify-content-between\">\r\n <div>\r\n <!-- <div class=\"section-card-name\">{{ele.sectionName}}</div> -->\r\n <div class=\"section-card-desc\" *ngIf=\"ele.desc\">{{ele.desc | titlecase}}</div>\r\n </div>\r\n <mat-icon class=\"card-check-icon\"\r\n *ngIf=\"selectedComponent?.componentId === ele.componentId\">\r\n check_circle\r\n </mat-icon>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <div class=\"empty-state fade-in\" *ngIf=\"!selectedSection || selectedSection.length === 0\">\r\n <mat-icon class=\"empty-page-icon\">auto_awesome</mat-icon>\r\n <div class=\"empty-title\">Select a category</div>\r\n <div class=\"empty-subtitle\">\r\n Choose any category from the left sidebar to explore and add sections\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"content-layout d-flex\" *ngIf=\"loader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '6px' }\"></ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1]\">\r\n <div class=\"section-card\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '20px', 'border-radius': '4px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '180px', 'border-radius': '8px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '16px', 'border-radius': '4px' }\"></ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n <!-- Loader skeleton -->\r\n <div class=\"content-layout d-flex\" *ngIf=\"savedLoader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1]\">\r\n <div class=\"section-card\" style=\"margin-bottom:12px\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '18px', 'border-radius': '4px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '100px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '14px', 'border-radius': '4px' }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Loaded: categories + right component card preview -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!savedLoader && savedCategoryKeys.length > 0\">\r\n\r\n <!-- LEFT: component categories list -->\r\n <div class=\"left-sidebar\">\r\n <div class=\"saved-pages-label\">Saved Sections</div>\r\n <ng-container *ngFor=\"let catKey of savedCategoryKeys\">\r\n <div class=\"saved-page-item\"\r\n [class.active]=\"selectedSavedCategory === catKey\"\r\n (click)=\"selectSavedCategory(catKey)\">\r\n <mat-icon class=\"saved-page-icon\">article</mat-icon>\r\n <span class=\"saved-page-name\">{{catKey}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- RIGHT: selected component preview card -->\r\n <div class=\"right-content\">\r\n <div class=\"section-group-label\">Component Preview</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"savedSections[selectedSavedCategory]\">\r\n <div class=\"section-card section-card-preview fade-in\">\r\n\r\n <!-- Section type badge -->\r\n <div class=\"section-card-badge\" *ngIf=\"savedSections[selectedSavedCategory].component?.sectionType\">\r\n {{savedSections[selectedSavedCategory].component.sectionType.split('_').join(' ') | uppercase}}\r\n </div>\r\n\r\n <!-- Preview area (Show image if present, fallback to placeholder) -->\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"savedSections[selectedSavedCategory].component?.styles?.background?.image && savedSections[selectedSavedCategory].component?.styles?.background?.showImage; else savedNoImage\">\r\n <img [src]=\"savedSections[selectedSavedCategory].component.styles.background.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #savedNoImage>\r\n <div class=\"saved-preview-placeholder d-flex flex-column align-items-center justify-content-center\">\r\n <mat-icon>layers</mat-icon>\r\n <span>{{savedSections[selectedSavedCategory].component?.sectionType?.split('_')?.join(' ') || 'Saved Component'}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Card info -->\r\n <div class=\"section-card-info\">\r\n <div class=\"section-card-name\">{{savedSections[selectedSavedCategory].component?.sectionName}}</div>\r\n <div class=\"section-card-desc\" *ngIf=\"savedSections[selectedSavedCategory].component?.desc\">\r\n {{savedSections[selectedSavedCategory].component.desc}}\r\n </div>\r\n </div>\r\n\r\n <!-- Used In footer -->\r\n <div class=\"saved-card-footer\" *ngIf=\"savedSections[selectedSavedCategory].usedIn\">\r\n <div class=\"used-in-container d-flex align-items-center gap-2\">\r\n <mat-icon class=\"used-in-icon\">web</mat-icon>\r\n <span class=\"used-in-text\">\r\n <strong>Used In ({{savedSections[selectedSavedCategory].usedIn.length}} Pages):</strong> \r\n {{savedSections[selectedSavedCategory].usedIn.join(', ')}}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Empty: no saved data at all -->\r\n <div class=\"empty-state fade-in\" *ngIf=\"!savedLoader && savedCategoryKeys.length === 0\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/4076/4076549.png\" alt=\"empty\">\r\n <div class=\"empty-title\">No saved sections</div>\r\n <div class=\"empty-subtitle\">Sections you save from pages will appear here</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'APPS'\">\r\n durga prasad bhogisetti\r\n </ng-container>\r\n\r\n\r\n <!-- EMPTY SEARCH -->\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/7486/7486803.png\">\r\n <div class=\"empty-title\">No sections found</div>\r\n <div class=\"empty-subtitle\">\r\n Try searching something else or explore categories\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"footer-container fade-in\">\r\n <div class=\"footer-hint\">\r\n <mat-icon>info_outline</mat-icon>\r\n <ng-container *ngIf=\"selectedTab !== 'SAVED'\">\r\n You can rearrange or remove this section any time.\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n Saved sections are read-only previews.\r\n </ng-container>\r\n </div>\r\n <div class=\"footer-actions\">\r\n <div class=\"btn-cancel\" (click)=\"dialog.close()\">\r\n {{ selectedTab === 'SAVED' ? 'Close' : 'Cancel' }}\r\n </div>\r\n <!-- Basic tab only -->\r\n <div class=\"btn-add\" *ngIf=\"selectedTab !== 'SAVED'\"\r\n [class.disabled]=\"!selectedComponent\"\r\n (click)=\"selectedComponent && addNewSection(selectedComponent.componentId, selectedComponent.sectionType, $event)\">\r\n + Add section\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family);box-sizing:border-box}mat-icon{font-family:Material Icons!important}.gap-10{gap:10px!important}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.fs-14{font-size:14px}.fs-12{font-size:12px}.fs-16{font-size:16px}.fw-bold{font-weight:700}.main-container{height:100vh;background:#fff;border-radius:16px;overflow:hidden;display:flex;flex-direction:column}.header-container{position:relative;padding:16px 20px 14px;background:#fff;border-bottom:1px solid #f0eef8}.header-title{font-size:16px;font-weight:700;color:#1a1733;line-height:1.4}.header-subtitle{font-size:12px;color:#9e9bb5;margin-top:2px}.close-btn{position:absolute;top:50%;right:18px;transform:translateY(-50%);cursor:pointer;color:#aaa;font-size:20px!important;width:30px!important;height:30px!important;border-radius:8px;transition:background .15s,color .15s;display:flex;align-items:center;justify-content:center}.close-btn:hover{background:#f0eeff;color:#5a4fcf}.parent-container{flex:1;overflow:hidden;background:#f9f8fd;display:flex;flex-direction:column;padding:0}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.top-tabs-container{margin:12px 16px 0;background:#eeecf8;border-radius:12px;padding:4px;display:flex;gap:2px;flex-shrink:0}.top-tab{flex:1;text-align:center;padding:7px 12px;font-size:12.5px;font-weight:500;color:#888;cursor:pointer;border-radius:9px;transition:all .18s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.top-tab:hover:not(.active-top-tab){color:#555;background:#ffffff8c}.active-top-tab{background:#fff;color:#4b3fc0;font-weight:700;box-shadow:0 1px 6px #4b3fc021}.search-bar-container{padding:10px 16px 8px;flex-shrink:0}.search-bar{background:#fff;border:1.5px solid #e6e2f6;border-radius:10px;padding:8px 12px;display:flex;align-items:center;gap:8px;transition:border-color .18s,box-shadow .18s}.search-bar:focus-within{border-color:var(--primary-bg-color);box-shadow:0 0 0 3px #7c6cf01a}.search-bar img{width:15px;height:15px;opacity:.45;flex-shrink:0}.search-bar input{border:none;outline:none;background:transparent;font-size:13px;color:#333;width:100%}.search-bar input::placeholder{color:#bbb}.content-layout{flex:1;overflow:hidden;border-top:1px solid #f0eef8;display:flex;min-height:0}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.left-sidebar{width:210px;min-width:210px;background:#fff;padding:12px 8px;overflow-y:auto;border-right:1px solid #f0eef8;height:100%}.left-sidebar::-webkit-scrollbar{width:3px}.left-sidebar::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.category-block{margin-bottom:2px}.category-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;cursor:pointer;border-radius:9px;transition:background .15s;-webkit-user-select:none;user-select:none}.category-header:hover{background:#f3f0fd}.category-icon{font-size:15px;width:20px;text-align:center;flex-shrink:0;line-height:1}.fs-13{font-size:13px}.category-count{font-size:11px;font-weight:500;color:#bbb;position:relative;top:1px}.category-arrow{font-size:18px!important;width:18px!important;height:18px!important;color:#ccc;transition:transform .22s ease,color .15s;flex-shrink:0}.category-block:has(.category-items) .category-arrow{color:#7c6cf0}.category-items{padding:2px 4px 4px 28px;display:flex;flex-direction:column;gap:1px;animation:dropdownFade .2s ease}.category-item{padding:5px 10px;font-size:12px;color:#555;cursor:pointer;border-radius:7px;transition:background .13s,color .13s;-webkit-user-select:none;user-select:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.category-item:hover{background:#f0eeff;color:#4b3fc0}.category-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.right-content{flex:1;overflow-y:auto;padding:14px 14px 14px 12px;height:100%;min-width:0}.right-content::-webkit-scrollbar{width:4px}.right-content::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.section-group-label{font-size:12px;font-weight:700;letter-spacing:.4px;color:#9e9bb5;margin-bottom:12px;text-transform:uppercase}.sections-list{display:flex;flex-direction:column;gap:12px}.section-card{border:1.5px solid #ebe8f8;border-radius:12px;overflow:hidden;cursor:pointer;background:#fff;transition:all .2s ease}.section-card:hover{border-color:#c4baf0;box-shadow:0 4px 16px #7c6cf01a;transform:translateY(-1px)}.section-card-preview{cursor:default!important;pointer-events:none}.section-card-preview:hover{border-color:#ebe8f8!important;box-shadow:none!important;transform:none!important}.section-card-selected{border-color:#7c6cf0!important;box-shadow:0 0 0 3px #7c6cf024!important}.section-card-badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.5px;color:#5a4fcf;background:#edeafc;padding:3px 10px;margin:10px 10px 6px;border-radius:20px}.section-img-container{width:100%;overflow:hidden;background:#f5f3fc;display:flex;align-items:center;justify-content:center;max-height:200px;min-height:100px}.section-img-container img{width:100%;display:block;object-fit:cover;transition:transform .25s ease}.section-card:hover .section-img-container img{transform:scale(1.03)}.no-image-placeholder{height:130px;display:flex;align-items:center;justify-content:center;color:#d5d0ee}.no-image-placeholder mat-icon{font-size:38px!important;width:38px!important;height:38px!important;color:#d5d0ee}.section-card-info{padding:10px 14px 12px}.section-card-name{font-size:13px;font-weight:600;color:#1a1733;margin-bottom:3px}.section-card-desc{font-size:12px;color:#9e9bb5;line-height:1.5}.card-check-icon{font-size:20px!important;width:20px!important;height:20px!important;color:#7c6cf0;flex-shrink:0;animation:checkPop .22s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes checkPop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.quick-add-container{padding:4px 24px 10px;gap:10px;flex-wrap:wrap;flex-shrink:0}.quick-add-label{font-size:12px;color:#888;white-space:nowrap}.quick-add-chips{gap:6px;width:100%;overflow-y:scroll;white-space:nowrap}.quick-chip{gap:5px;padding:4px 10px;font-size:12px;border:1.5px solid #e0e0e0;border-radius:20px;cursor:pointer;color:#333;background:#fff;transition:all .2s ease;-webkit-user-select:none;user-select:none}.quick-chip.active-quick-chip{border-color:#7c6cf0;color:#4b3fc0;font-weight:500}.chip-emoji{font-size:14px}.saved-pages-label{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#bbb;padding:0 10px;margin-bottom:10px}.saved-page-item{display:flex;align-items:center;gap:7px;padding:7px 10px;cursor:pointer;border-radius:9px;font-size:13px;font-weight:500;color:#666;transition:background .15s,color .15s;-webkit-user-select:none;user-select:none;margin-bottom:2px;overflow:hidden}.saved-page-item:hover{background:#f0eeff;color:#4b3fc0}.saved-page-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.saved-page-icon{font-size:15px!important;width:15px!important;height:15px!important;color:inherit;flex-shrink:0}.saved-page-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.saved-preview-placeholder{height:100px;width:100%;background:#f5f3fc;gap:6px}.saved-preview-placeholder mat-icon{font-size:28px!important;width:28px!important;height:28px!important;color:#c8c2ee}.saved-preview-placeholder span{font-size:11px;color:#b0aac8;text-transform:capitalize}.empty-page-icon{font-size:40px!important;width:40px!important;height:40px!important;color:#d5d0ee;margin-bottom:4px}.saved-card-footer{padding:10px 14px;background:#faf9ff;border-top:1px solid #ebe8f8}.used-in-container{font-size:11.5px;color:#666}.used-in-icon{font-size:15px!important;width:15px!important;height:15px!important;color:#7c6cf0}.used-in-text{line-height:1.4}.used-in-text strong{color:#4b3fc0;font-weight:600}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}.image-container-1{margin-bottom:16px}.empty-img{width:100px;opacity:.85}.empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:32px 24px}.empty-state img{width:110px;opacity:.8;margin-bottom:4px}.empty-title{font-size:15px;font-weight:700;color:#2d2a4a}.empty-subtitle{font-size:12.5px;color:#aaa;max-width:240px;line-height:1.6}.footer-container{padding:12px 20px;border-top:1px solid #f0eef8;background:#fff;flex-shrink:0;display:flex;align-items:center;justify-content:space-between}.footer-hint{font-size:11.5px;color:#bbb;display:flex;align-items:center;gap:5px}.footer-hint mat-icon{font-size:14px!important;width:14px!important;height:14px!important;color:#d0cbf0}.footer-actions{display:flex;align-items:center;gap:8px}.btn-cancel{padding:8px 18px;font-size:13px;font-weight:500;border:1.5px solid #e4e0f6;border-radius:9px;background:#fff;color:#666;cursor:pointer;transition:border-color .15s,color .15s,background .15s;-webkit-user-select:none;user-select:none}.btn-cancel:hover{border-color:#b4aae8;color:#4b3fc0;background:#f8f6ff}.btn-add{padding:8px 20px;font-size:13px;font-weight:700;border:none;border-radius:9px;background:var(--primary-bg-color);color:#fff;cursor:pointer;transition:opacity .15s,box-shadow .15s,transform .15s;-webkit-user-select:none;user-select:none;box-shadow:0 3px 10px #7c6cf047}.btn-add:hover:not(.disabled){opacity:.92;transform:translateY(-1px);box-shadow:0 5px 14px #7c6cf05c}.btn-add.disabled{opacity:.38;cursor:not-allowed;box-shadow:none;pointer-events:none}.sidebar-group{margin-bottom:2px}.sidebar-group-icon{font-size:15px;width:20px;text-align:center}.sidebar-group-label{flex:1;font-size:13px}.sidebar-group-header{gap:8px;padding:9px 14px;cursor:pointer;border-radius:0;transition:background .12s;-webkit-user-select:none;user-select:none;font-size:13px;color:#444}.sidebar-group-header:hover{background:#f0f0f0}.sidebar-group-active{background:#ece9fd;color:#4b3fc0;font-weight:600}.sidebar-chevron{font-size:18px;width:18px;height:18px;color:#aaa;transition:transform .2s}.sidebar-chevron.rotated{transform:rotate(180deg)}.subcategory-item{padding:6px 10px 6px 8px;font-size:12px;color:#555;cursor:pointer;border-radius:6px;transition:background .12s;-webkit-user-select:none;user-select:none}.subcategory-item:hover{background:#ece9fd;color:#4b3fc0}.subcategory-active{background:#ece9fd;color:#4b3fc0;font-weight:500}.active-subcategory{background:#7c6cf0!important;color:#fff!important}.sidebar-subcategory{overflow:hidden;animation:dropdownSmooth .25s ease}.fade-in{animation:fadeIn .22s ease}.fade-slide{animation:fadeSlide .25s ease}.stagger-item{opacity:0;transform:translateY(8px);animation:staggerFade .28s ease forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeSlide{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes staggerFade{to{opacity:1;transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes dropdownSmooth{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes expandFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
287
+ args: [{ selector: 'simpo-add-section', standalone: true, imports: [CommonModule, MatIconModule, NgxSkeletonLoaderModule, FormsModule], template: "<!-- <section class=\"main-container\">\r\n <div class=\"header-container d-flex align-items-center justify-content-between\">\r\n <div>Select Template</div>\r\n <mat-icon class=\"d-flex align-items-center justify-content-center f-18 cp\" (click)=\"dialog.close()\">\r\n close\r\n </mat-icon>\r\n </div>\r\n <div class=\"parent-container\">\r\n <div class=\"search-bar-container\">\r\n <div class=\"search-bar d-flex gap-10\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search for Sections\" [(ngModel)]=\"searchText\" (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n <div class=\"tab-container d-flex justify-content-around align-items-center\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"tabs\" (click)=\"selectedTab = ele.value\" [class.active-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n <ng-container *ngIf=\"ele.value == 'PRO' && ele.value != selectedTab\">\r\n <img class=\"w-30\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/468281c1744699664858Frame%201244831740%20%281%29.png\"\r\n alt=\"pro-icon\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'; else proTabContent\">\r\n <ng-container *ngIf=\"!isSearch;else emptyScreen\">\r\n <div class=\"categories-container d-flex\">\r\n <div class=\"categories-sidepanel\" *ngIf=\"!loader\">\r\n <ng-container *ngFor=\"let ele of getObjectKeys(sections)\">\r\n <div class=\"side-section d-flex justify-content-center align-items-center flex-column\"\r\n (click)=\"selectSection(ele)\"\r\n [class.active-section]=\"selectedSection == sections[ele]\">\r\n <div class=\"image-container\">\r\n <ng-container *ngIf=\"selectedSection == sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/954383c1741850392802Group%201707481879.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedSection != sections[ele]\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/846145c1741850574864Icon%20%281%29.png\"\r\n alt=\"icon text\">\r\n </ng-container>\r\n </div>\r\n <div class=\"section-text\">\r\n {{ele}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\" !loader && !tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n {{selectedSectionName}}\r\n </div>\r\n <div class=\"sub-text\">\r\n Select a section to add to your page\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of selectedSection\">\r\n <div class=\"section\">\r\n <div class=\"section-header\">{{ele.sectionName}}</div>\r\n <div class=\"section-img-container cp\"\r\n (click)=\"addNewSection(ele.componentId,ele.sectionType,$event)\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section image\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <img src=\"https://img.freepik.com/premium-vector/default-image-icon-vector-missing-picture-page-website-design-mobile-app-no-photo-available_87543-11093.jpg\"\r\n alt=\"section image\" class=\"h-30\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"categories-sidepanel\" *ngIf=\"loader\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1,1,1,1,1,1]\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n height: '8vh',\r\n width: '65%',\r\n 'border-radius': '13px',\r\n 'margin-bottom' : '10px',\r\n }\" class=\"d-flex justify-content-center w-100\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"categories-render-section\" *ngIf=\"loader || tabShiftLoader\">\r\n <div class=\"categories-head\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '20%',\r\n height : '3vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sub-text\">\r\n <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '60%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n <div class=\"sections-container\">\r\n <ng-container *ngFor=\"let ele of [1,1,1,1]\">\r\n <div class=\"section\">\r\n <div> <ngx-skeleton-loader appearance=\"circle\" [theme]=\"{\r\n width: '25%',\r\n height : '2vh',\r\n 'border-radius': '5px',\r\n }\">\r\n </ngx-skeleton-loader></div>\r\n <div>\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n height : '25vh',\r\n 'border-radius': '5px',\r\n 'margin':'2px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #proTabContent>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Coming Soon\r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">Woof! Something pawsome is coming!</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Hey hooman! I just sniffed out something super exciting... and it\u2019s almost here! \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-div d-flex align-items-center justify-content-center flex-column\">\r\n <div class=\"image-container-1\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/377076c1743154807683image%20%286%29.png\" alt=\"empty-img\" class=\"empty-img \">\r\n </div>\r\n <div class=\"oops-text\">\r\n Oops! \r\n </div>\r\n <div class=\"oops-sub-text\">\r\n <div class=\"oops-sub-text-1 text-center\">I sniffed everywhere, but I couldn't find what you're looking for</div>\r\n <div class=\"oops-sub-text-2 text-center\">\r\n Maybe try a different search? \r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</section> -->\r\n\r\n<section class=\"main-container d-flex flex-column\">\r\n\r\n <div class=\"header-container fade-in\">\r\n <div class=\"header-title\">Add a section</div>\r\n <div class=\"header-subtitle\">Choose a section \u2014 you can reorder or remove it any time.</div>\r\n <mat-icon class=\"close-btn\" (click)=\"dialog.close()\">close</mat-icon>\r\n </div>\r\n\r\n <div class=\"parent-container d-flex flex-column\">\r\n\r\n <!-- Tabs -->\r\n <div class=\"top-tabs-container d-flex justify-content-between fade-in\">\r\n <ng-container *ngFor=\"let ele of tabs\">\r\n <div class=\"top-tab\" (click)=\"onTabSelect(ele.value)\"\r\n [class.active-top-tab]=\"ele.value == selectedTab\">\r\n {{ele.viewValue}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Search -->\r\n <div class=\"search-bar-container fade-in\" *ngIf=\"selectedTab != 'SAVED'\">\r\n <div class=\"search-bar d-flex gap-2 align-items-center\">\r\n <img\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\">\r\n <input type=\"text\" placeholder='Search section...' [(ngModel)]=\"searchText\"\r\n (ngModelChange)=\"searchSections()\">\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'BASIC'\">\r\n\r\n <ng-container *ngIf=\"!isSearch; else emptyScreen\">\r\n\r\n <!-- Quick Add -->\r\n <!-- <div class=\"quick-add-container fade-in d-flex align-items-center\" *ngIf=\"!loader && !searchText\">\r\n <div class=\"quick-add-label\">Quick add:</div>\r\n <div class=\"quick-add-chips d-flex\">\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections); let i = index\">\r\n <ng-container *ngIf=\"i < 6\">\r\n <div class=\"quick-chip stagger-item d-flex align-items-center\"\r\n (click)=\"selectSection(category); toggleCategory(category)\"\r\n [class.active-quick-chip]=\"selectedSectionName === category\">\r\n <span class=\"chip-emoji\">{{getCategoryEmoji(category)}}</span>\r\n {{getFirstSectionName(category)}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n\r\n <!-- CONTENT -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!loader\">\r\n <!-- LEFT -->\r\n <div class=\"left-sidebar\">\r\n <!-- <div class=\"category-header d-flex align-items-center\">\r\n <div class=\"category-icon d-flex align-items-center justify-content-center\">\u2728</div>\r\n <div class=\"fs-14\">AI Recommended</div>\r\n </div> -->\r\n <ng-container *ngFor=\"let category of getObjectKeys(sections)\">\r\n <div class=\"category-block\">\r\n <div class=\"category-header d-flex align-items-end justify-content-between\"\r\n (click)=\"toggleCategory(category)\">\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <span class=\"category-icon\">\r\n {{getCategoryEmoji(category)}}\r\n </span>\r\n <span class=\"fs-13\">\r\n {{category}}\r\n </span>\r\n <span class=\"category-count\">\r\n ({{sections[category]?.length}})\r\n </span>\r\n </div>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"expandedCategories[category]\">\r\n expand_less\r\n </mat-icon>\r\n <mat-icon class=\"category-arrow\" *ngIf=\"!expandedCategories[category]\">\r\n expand_more\r\n </mat-icon>\r\n </div>\r\n <div class=\"category-items d-flex flex-column\" *ngIf=\"expandedCategories[category]\">\r\n <ng-container *ngFor=\"let sec of sections[category]\">\r\n <div class=\"category-item\"\r\n [class.active]=\"selectedComponent?.componentId === sec.componentId\"\r\n (click)=\"selectComponent(sec, category)\">\r\n {{sec.sectionName}}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"right-content\">\r\n\r\n <div class=\"section-group-label\">{{selectedSectionName || 'Sections'}}</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"selectedSection && selectedSection.length > 0\">\r\n\r\n <ng-container *ngFor=\"let ele of selectedSection; let i = index\">\r\n\r\n <div [id]=\"'comp-' + ele.componentId\" class=\"section-card stagger-item\" [style.animation-delay]=\"i * 40 + 'ms'\"\r\n [class.section-card-selected]=\"selectedComponent?.componentId === ele.componentId\"\r\n (click)=\"selectComponentAndHighlight(ele)\">\r\n\r\n <div class=\"section-card-badge\" *ngIf=\"ele.sectionType\">\r\n <!-- + {{ele.sectionType | uppercase}} -->\r\n + {{ele.sectionName | titlecase}}\r\n </div>\r\n\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"ele?.image; else noImage\">\r\n <img [src]=\"ele?.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #noImage>\r\n <div class=\"no-image-placeholder d-flex align-items-center justify-content-center\">\r\n <mat-icon>image</mat-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"section-card-info d-flex align-items-center justify-content-between\">\r\n <div>\r\n <!-- <div class=\"section-card-name\">{{ele.sectionName}}</div> -->\r\n <div class=\"section-card-desc\" *ngIf=\"ele.desc\">{{ele.desc | titlecase}}</div>\r\n </div>\r\n <mat-icon class=\"card-check-icon\"\r\n *ngIf=\"selectedComponent?.componentId === ele.componentId\">\r\n check_circle\r\n </mat-icon>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <div class=\"empty-state fade-in\" *ngIf=\"!selectedSection || selectedSection.length === 0\">\r\n <mat-icon class=\"empty-page-icon\">auto_awesome</mat-icon>\r\n <div class=\"empty-title\">Select a category</div>\r\n <div class=\"empty-subtitle\">\r\n Choose any category from the left sidebar to explore and add sections\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"content-layout d-flex\" *ngIf=\"loader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '6px' }\"></ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1]\">\r\n <div class=\"section-card\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '20px', 'border-radius': '4px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '180px', 'border-radius': '8px', 'margin-bottom': '8px' }\"></ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '16px', 'border-radius': '4px' }\"></ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n <!-- Loader skeleton -->\r\n <div class=\"content-layout d-flex\" *ngIf=\"savedLoader\">\r\n <div class=\"left-sidebar\">\r\n <ng-container *ngFor=\"let s of [1,1,1,1,1]\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '90%', height: '36px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n </ng-container>\r\n </div>\r\n <div class=\"right-content\">\r\n <ng-container *ngFor=\"let s of [1,1,1]\">\r\n <div class=\"section-card\" style=\"margin-bottom:12px\">\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '40%', height: '18px', 'border-radius': '4px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '100%', height: '100px', 'border-radius': '8px', 'margin-bottom': '8px' }\">\r\n </ngx-skeleton-loader>\r\n <ngx-skeleton-loader\r\n [theme]=\"{ width: '60%', height: '14px', 'border-radius': '4px' }\">\r\n </ngx-skeleton-loader>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Loaded: categories + right component card preview -->\r\n <div class=\"content-layout fade-in d-flex\" *ngIf=\"!savedLoader && savedCategoryKeys.length > 0\">\r\n\r\n <!-- LEFT: component categories list -->\r\n <div class=\"left-sidebar\">\r\n <div class=\"saved-pages-label\">Saved Sections</div>\r\n <ng-container *ngFor=\"let catKey of savedCategoryKeys\">\r\n <div class=\"saved-page-item\"\r\n [class.active]=\"selectedSavedCategory === catKey\"\r\n (click)=\"selectSavedCategory(catKey)\">\r\n <mat-icon class=\"saved-page-icon\">article</mat-icon>\r\n <span class=\"saved-page-name\">{{catKey}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- RIGHT: selected component preview card -->\r\n <div class=\"right-content\">\r\n <div class=\"section-group-label\">Component Preview</div>\r\n\r\n <div class=\"sections-list d-flex flex-column\" *ngIf=\"savedSections[selectedSavedCategory]\">\r\n <div class=\"section-card section-card-preview fade-in\">\r\n\r\n <!-- Section type badge -->\r\n <div class=\"section-card-badge\" *ngIf=\"savedSections[selectedSavedCategory].component?.sectionType\">\r\n {{savedSections[selectedSavedCategory].component.sectionType.split('_').join(' ') | uppercase}}\r\n </div>\r\n\r\n <!-- Preview area (Show image if present, fallback to placeholder) -->\r\n <div class=\"section-img-container d-flex align-items-center justify-content-center\">\r\n <ng-container *ngIf=\"savedSections[selectedSavedCategory].component?.styles?.background?.image && savedSections[selectedSavedCategory].component?.styles?.background?.showImage; else savedNoImage\">\r\n <img [src]=\"savedSections[selectedSavedCategory].component.styles.background.image\" alt=\"section preview\">\r\n </ng-container>\r\n <ng-template #savedNoImage>\r\n <div class=\"saved-preview-placeholder d-flex flex-column align-items-center justify-content-center\">\r\n <mat-icon>layers</mat-icon>\r\n <span>{{savedSections[selectedSavedCategory].component?.sectionType?.split('_')?.join(' ') || 'Saved Component'}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Card info -->\r\n <div class=\"section-card-info\">\r\n <div class=\"section-card-name\">{{savedSections[selectedSavedCategory].component?.sectionName}}</div>\r\n <div class=\"section-card-desc\" *ngIf=\"savedSections[selectedSavedCategory].component?.desc\">\r\n {{savedSections[selectedSavedCategory].component.desc}}\r\n </div>\r\n </div>\r\n\r\n <!-- Used In footer -->\r\n <div class=\"saved-card-footer\" *ngIf=\"savedSections[selectedSavedCategory].usedIn\">\r\n <div class=\"used-in-container d-flex align-items-center gap-2\">\r\n <mat-icon class=\"used-in-icon\">web</mat-icon>\r\n <span class=\"used-in-text\">\r\n <strong>Used In ({{savedSections[selectedSavedCategory].usedIn.length}} Pages):</strong> \r\n {{savedSections[selectedSavedCategory].usedIn.join(', ')}}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Empty: no saved data at all -->\r\n <div class=\"empty-state fade-in\" *ngIf=\"!savedLoader && savedCategoryKeys.length === 0\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/4076/4076549.png\" alt=\"empty\">\r\n <div class=\"empty-title\">No saved sections</div>\r\n <div class=\"empty-subtitle\">Sections you save from pages will appear here</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedTab === 'APPS'\">\r\n </ng-container>\r\n\r\n\r\n <!-- EMPTY SEARCH -->\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-state fade-in d-flex flex-column align-items-center justify-content-center\">\r\n <img src=\"https://cdn-icons-png.flaticon.com/512/7486/7486803.png\">\r\n <div class=\"empty-title\">No sections found</div>\r\n <div class=\"empty-subtitle\">\r\n Try searching something else or explore categories\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"footer-container fade-in\">\r\n <div class=\"footer-hint\">\r\n <mat-icon>info_outline</mat-icon>\r\n <ng-container *ngIf=\"selectedTab !== 'SAVED'\">\r\n You can rearrange or remove this section any time.\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedTab === 'SAVED'\">\r\n Saved sections are read-only previews.\r\n </ng-container>\r\n </div>\r\n <div class=\"footer-actions\">\r\n <div class=\"btn-cancel\" (click)=\"dialog.close()\">\r\n {{ selectedTab === 'SAVED' ? 'Close' : 'Cancel' }}\r\n </div>\r\n <!-- Basic tab only -->\r\n <div class=\"btn-add\" *ngIf=\"selectedTab !== 'SAVED'\"\r\n [class.disabled]=\"!selectedComponent\"\r\n (click)=\"selectedComponent && addNewSection(selectedComponent.componentId, selectedComponent.sectionType, $event)\">\r\n + Add section\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>", styles: ["*{font-family:var(--primary-font-family);box-sizing:border-box}mat-icon{font-family:Material Icons!important}.gap-10{gap:10px!important}.f-18{font-size:18px;cursor:pointer}.w-30{width:30px!important}.h-30{height:30vh}.cp{cursor:pointer}.fs-14{font-size:14px}.fs-12{font-size:12px}.fs-16{font-size:16px}.fw-bold{font-weight:700}.main-container{height:100vh;background:#fff;border-radius:16px;overflow:hidden;display:flex;flex-direction:column}.header-container{position:relative;padding:16px 20px 14px;background:#fff;border-bottom:1px solid #f0eef8}.header-title{font-size:16px;font-weight:700;color:#1a1733;line-height:1.4}.header-subtitle{font-size:12px;color:#9e9bb5;margin-top:2px}.close-btn{position:absolute;top:50%;right:18px;transform:translateY(-50%);cursor:pointer;color:#aaa;font-size:20px!important;width:30px!important;height:30px!important;border-radius:8px;transition:background .15s,color .15s;display:flex;align-items:center;justify-content:center}.close-btn:hover{background:#f0eeff;color:#5a4fcf}.parent-container{flex:1;overflow:hidden;background:#f9f8fd;display:flex;flex-direction:column;padding:0}.tab-container{padding:8px;margin:0 15px;gap:3%;background:#fff;border-radius:13px}.tabs{font-size:14px;font-weight:500;line-height:24px;color:#2c2c2c99;width:30%;cursor:pointer;padding:8px 0;text-align:center}.active-tab{color:#fff!important;background:var(--primary-bg-color);box-shadow:0 0 4px #00000040;border-radius:8px;transition:opacity .3s ease-in-out,transform .3s ease-in-out;opacity:1;transform:translateY(0)}.top-tabs-container{margin:12px 16px 0;background:#eeecf8;border-radius:12px;padding:4px;display:flex;gap:2px;flex-shrink:0}.top-tab{flex:1;text-align:center;padding:7px 12px;font-size:12.5px;font-weight:500;color:#888;cursor:pointer;border-radius:9px;transition:all .18s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.top-tab:hover:not(.active-top-tab){color:#555;background:#ffffff8c}.active-top-tab{background:#fff;color:#4b3fc0;font-weight:700;box-shadow:0 1px 6px #4b3fc021}.search-bar-container{padding:10px 16px 8px;flex-shrink:0}.search-bar{background:#fff;border:1.5px solid #e6e2f6;border-radius:10px;padding:8px 12px;display:flex;align-items:center;gap:8px;transition:border-color .18s,box-shadow .18s}.search-bar:focus-within{border-color:var(--primary-bg-color);box-shadow:0 0 0 3px #7c6cf01a}.search-bar img{width:15px;height:15px;opacity:.45;flex-shrink:0}.search-bar input{border:none;outline:none;background:transparent;font-size:13px;color:#333;width:100%}.search-bar input::placeholder{color:#bbb}.content-layout{flex:1;overflow:hidden;border-top:1px solid #f0eef8;display:flex;min-height:0}.categories-sidepanel{width:15%;padding:10px 5px;margin:15px 0;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.side-section{padding:6px 10px;border-radius:8px;margin-bottom:10px;cursor:pointer}.side-section img{width:16px}.side-section .image-container{background:#f9fafb;padding:5px 8px;border-radius:5px}.side-section .section-text{font-size:12px;font-weight:500;line-height:24px;text-align:center;color:#a1a1a1}.active-section{background:var(--primary-bg-color)!important;box-shadow:0 0 4px #00000040}.active-section .section-text{color:#fff!important}.active-section .image-container{background:unset!important;padding:unset!important;border-radius:unset!important}.left-sidebar{width:210px;min-width:210px;background:#fff;padding:12px 8px;overflow-y:auto;border-right:1px solid #f0eef8;height:100%}.left-sidebar::-webkit-scrollbar{width:3px}.left-sidebar::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.category-block{margin-bottom:2px}.category-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;cursor:pointer;border-radius:9px;transition:background .15s;-webkit-user-select:none;user-select:none}.category-header:hover{background:#f3f0fd}.category-icon{font-size:15px;width:20px;text-align:center;flex-shrink:0;line-height:1}.fs-13{font-size:13px}.category-count{font-size:11px;font-weight:500;color:#bbb;position:relative;top:1px}.category-arrow{font-size:18px!important;width:18px!important;height:18px!important;color:#ccc;transition:transform .22s ease,color .15s;flex-shrink:0}.category-block:has(.category-items) .category-arrow{color:#7c6cf0}.category-items{padding:2px 4px 4px 28px;display:flex;flex-direction:column;gap:1px;animation:dropdownFade .2s ease}.category-item{padding:5px 10px;font-size:12px;color:#555;cursor:pointer;border-radius:7px;transition:background .13s,color .13s;-webkit-user-select:none;user-select:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.category-item:hover{background:#f0eeff;color:#4b3fc0}.category-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.categories-render-section{width:85%;padding:15px;margin:15px 10px;border-radius:10px;height:calc(70vh + -0px);overflow-y:scroll;background:#fff}.categories-head{font-size:20px;font-weight:600;line-height:24px;color:#434343}.sub-text{font-size:13px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.section{margin-bottom:10px}.section-header{font-size:14px;font-weight:500;line-height:24px;color:#a1a1a1;margin-bottom:10px}.right-content{flex:1;overflow-y:auto;padding:14px 14px 14px 12px;height:100%;min-width:0}.right-content::-webkit-scrollbar{width:4px}.right-content::-webkit-scrollbar-thumb{background:#ddd8f5;border-radius:4px}.section-group-label{font-size:12px;font-weight:700;letter-spacing:.4px;color:#9e9bb5;margin-bottom:12px;text-transform:uppercase}.sections-list{display:flex;flex-direction:column;gap:12px}.section-card{border:1.5px solid #ebe8f8;border-radius:12px;overflow:hidden;cursor:pointer;background:#fff;transition:all .2s ease}.section-card:hover{border-color:#c4baf0;box-shadow:0 4px 16px #7c6cf01a;transform:translateY(-1px)}.section-card-preview{cursor:default!important;pointer-events:none}.section-card-preview:hover{border-color:#ebe8f8!important;box-shadow:none!important;transform:none!important}.section-card-selected{border-color:#7c6cf0!important;box-shadow:0 0 0 3px #7c6cf024!important}.section-card-badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.5px;color:#5a4fcf;background:#edeafc;padding:3px 10px;margin:10px 10px 6px;border-radius:20px}.section-img-container{width:100%;overflow:hidden;background:#f5f3fc;display:flex;align-items:center;justify-content:center;max-height:200px;min-height:100px}.section-img-container img{width:100%;display:block;object-fit:cover;transition:transform .25s ease}.section-card:hover .section-img-container img{transform:scale(1.03)}.no-image-placeholder{height:130px;display:flex;align-items:center;justify-content:center;color:#d5d0ee}.no-image-placeholder mat-icon{font-size:38px!important;width:38px!important;height:38px!important;color:#d5d0ee}.section-card-info{padding:10px 14px 12px}.section-card-name{font-size:13px;font-weight:600;color:#1a1733;margin-bottom:3px}.section-card-desc{font-size:12px;color:#9e9bb5;line-height:1.5}.card-check-icon{font-size:20px!important;width:20px!important;height:20px!important;color:#7c6cf0;flex-shrink:0;animation:checkPop .22s cubic-bezier(.34,1.56,.64,1) forwards}@keyframes checkPop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.quick-add-container{padding:4px 24px 10px;gap:10px;flex-wrap:wrap;flex-shrink:0}.quick-add-label{font-size:12px;color:#888;white-space:nowrap}.quick-add-chips{gap:6px;width:100%;overflow-y:scroll;white-space:nowrap}.quick-chip{gap:5px;padding:4px 10px;font-size:12px;border:1.5px solid #e0e0e0;border-radius:20px;cursor:pointer;color:#333;background:#fff;transition:all .2s ease;-webkit-user-select:none;user-select:none}.quick-chip.active-quick-chip{border-color:#7c6cf0;color:#4b3fc0;font-weight:500}.chip-emoji{font-size:14px}.saved-pages-label{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#bbb;padding:0 10px;margin-bottom:10px}.saved-page-item{display:flex;align-items:center;gap:7px;padding:7px 10px;cursor:pointer;border-radius:9px;font-size:13px;font-weight:500;color:#666;transition:background .15s,color .15s;-webkit-user-select:none;user-select:none;margin-bottom:2px;overflow:hidden}.saved-page-item:hover{background:#f0eeff;color:#4b3fc0}.saved-page-item.active{background:#ebe7fc;color:#4b3fc0;font-weight:600}.saved-page-icon{font-size:15px!important;width:15px!important;height:15px!important;color:inherit;flex-shrink:0}.saved-page-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.saved-preview-placeholder{height:100px;width:100%;background:#f5f3fc;gap:6px}.saved-preview-placeholder mat-icon{font-size:28px!important;width:28px!important;height:28px!important;color:#c8c2ee}.saved-preview-placeholder span{font-size:11px;color:#b0aac8;text-transform:capitalize}.empty-page-icon{font-size:40px!important;width:40px!important;height:40px!important;color:#d5d0ee;margin-bottom:4px}.saved-card-footer{padding:10px 14px;background:#faf9ff;border-top:1px solid #ebe8f8}.used-in-container{font-size:11.5px;color:#666}.used-in-icon{font-size:15px!important;width:15px!important;height:15px!important;color:#7c6cf0}.used-in-text{line-height:1.4}.used-in-text strong{color:#4b3fc0;font-weight:600}.empty-div{height:calc(70vh + -0px);background:#fff;margin:18px;border-radius:13px}.oops-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.oops-sub-text-1{font-size:17px;font-weight:600;color:#101010e5}.oops-sub-text-2{font-size:14px;font-weight:600;color:#101010e5}.image-container-1{margin-bottom:16px}.empty-img{width:100px;opacity:.85}.empty-state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:32px 24px}.empty-state img{width:110px;opacity:.8;margin-bottom:4px}.empty-title{font-size:15px;font-weight:700;color:#2d2a4a}.empty-subtitle{font-size:12.5px;color:#aaa;max-width:240px;line-height:1.6}.footer-container{padding:12px 20px;border-top:1px solid #f0eef8;background:#fff;flex-shrink:0;display:flex;align-items:center;justify-content:space-between}.footer-hint{font-size:11.5px;color:#bbb;display:flex;align-items:center;gap:5px}.footer-hint mat-icon{font-size:14px!important;width:14px!important;height:14px!important;color:#d0cbf0}.footer-actions{display:flex;align-items:center;gap:8px}.btn-cancel{padding:8px 18px;font-size:13px;font-weight:500;border:1.5px solid #e4e0f6;border-radius:9px;background:#fff;color:#666;cursor:pointer;transition:border-color .15s,color .15s,background .15s;-webkit-user-select:none;user-select:none}.btn-cancel:hover{border-color:#b4aae8;color:#4b3fc0;background:#f8f6ff}.btn-add{padding:8px 20px;font-size:13px;font-weight:700;border:none;border-radius:9px;background:var(--primary-bg-color);color:#fff;cursor:pointer;transition:opacity .15s,box-shadow .15s,transform .15s;-webkit-user-select:none;user-select:none;box-shadow:0 3px 10px #7c6cf047}.btn-add:hover:not(.disabled){opacity:.92;transform:translateY(-1px);box-shadow:0 5px 14px #7c6cf05c}.btn-add.disabled{opacity:.38;cursor:not-allowed;box-shadow:none;pointer-events:none}.sidebar-group{margin-bottom:2px}.sidebar-group-icon{font-size:15px;width:20px;text-align:center}.sidebar-group-label{flex:1;font-size:13px}.sidebar-group-header{gap:8px;padding:9px 14px;cursor:pointer;border-radius:0;transition:background .12s;-webkit-user-select:none;user-select:none;font-size:13px;color:#444}.sidebar-group-header:hover{background:#f0f0f0}.sidebar-group-active{background:#ece9fd;color:#4b3fc0;font-weight:600}.sidebar-chevron{font-size:18px;width:18px;height:18px;color:#aaa;transition:transform .2s}.sidebar-chevron.rotated{transform:rotate(180deg)}.subcategory-item{padding:6px 10px 6px 8px;font-size:12px;color:#555;cursor:pointer;border-radius:6px;transition:background .12s;-webkit-user-select:none;user-select:none}.subcategory-item:hover{background:#ece9fd;color:#4b3fc0}.subcategory-active{background:#ece9fd;color:#4b3fc0;font-weight:500}.active-subcategory{background:#7c6cf0!important;color:#fff!important}.sidebar-subcategory{overflow:hidden;animation:dropdownSmooth .25s ease}.fade-in{animation:fadeIn .22s ease}.fade-slide{animation:fadeSlide .25s ease}.stagger-item{opacity:0;transform:translateY(8px);animation:staggerFade .28s ease forwards}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeSlide{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes staggerFade{to{opacity:1;transform:translateY(0)}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes dropdownSmooth{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes expandFade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
288
288
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
289
289
  type: Inject,
290
290
  args: [MAT_DIALOG_DATA]
291
291
  }] }, { type: i2.HttpClient }, { type: i3.EventsService }, { type: i4.ElementServiceService }, { type: i5.RestService }, { type: i4.ElementServiceService }] });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9hZGQtc2VjdGlvbi9hZGQtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2FkZC1zZWN0aW9uL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQWUsV0FBVyxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBV25FLE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBbUIsTUFBeUMsRUFDMUIsSUFBUyxFQUNqQyxJQUFnQixFQUNoQixhQUE0QixFQUM1QixhQUFvQyxFQUNwQyxXQUF3QixFQUN4QixjQUFxQztRQU41QixXQUFNLEdBQU4sTUFBTSxDQUFtQztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUcvQyxpQkFBWSxHQUE0QixZQUFZLENBQUM7UUFRckQsZ0JBQVcsR0FBVyxPQUFPLENBQUE7UUFDdEIsZUFBVSxHQUFrQixZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLFNBQUksR0FBUTtZQUNWLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFDL0MsbURBQW1EO1lBQ25ELEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQ3BDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO1NBQ3ZDLENBQUE7UUFFRCxhQUFRLEdBQVEsRUFBRSxDQUFBO1FBQ2xCLG9CQUFlLEdBQVEsRUFBRSxDQUFBO1FBQ3pCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQTtRQUM3QixXQUFNLEdBQVksS0FBSyxDQUFBO1FBQ3ZCLG1CQUFjLEdBQVksS0FBSyxDQUFBO1FBQy9CLG1CQUFjLEdBQVksS0FBSyxDQUFBO1FBRS9CLG1EQUFtRDtRQUNuRCx1QkFBa0IsR0FBK0IsRUFBRSxDQUFBO1FBRW5ELDhDQUE4QztRQUM5QyxzQkFBaUIsR0FBUSxJQUFJLENBQUE7UUFFN0IsK0NBQStDO1FBQy9DLGtCQUFhLEdBQVEsRUFBRSxDQUFBLENBQVksc0NBQXNDO1FBQ3pFLHNCQUFpQixHQUFhLEVBQUUsQ0FBQSxDQUFHLDBCQUEwQjtRQUM3RCxnQkFBVyxHQUFZLEtBQUssQ0FBQTtRQUM1QiwwQkFBcUIsR0FBVyxFQUFFLENBQUEsQ0FBQyw2Q0FBNkM7UUFFaEYsZ0NBQWdDO1FBQ2hDLHFCQUFnQixHQUE4QjtZQUM1QyxpQkFBaUI7WUFDakIsb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQix3QkFBd0I7WUFDeEIsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLHlCQUF5QjtZQUN6QixnQkFBZ0I7WUFDaEIsaUJBQWlCO1lBQ2pCLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIsTUFBTSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsR0FBRztZQUNkLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGFBQWEsRUFBRSxHQUFHO1lBQ2xCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLEdBQUc7WUFDVixPQUFPLEVBQUUsSUFBSTtZQUViLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFlBQVksRUFBRSxJQUFJO1lBRWxCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLElBQUk7WUFFWixTQUFTLEVBQUUsSUFBSTtZQUNmLFlBQVksRUFBRSxJQUFJO1lBRWxCLEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLElBQUk7WUFFWixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxLQUFLO1lBRWhCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7U0FDYixDQUFBO1FBNktELGVBQVUsR0FBVyxFQUFFLENBQUE7UUFFdkIsV0FBTSxHQUFRLEVBQUUsQ0FBQTtRQUNoQixhQUFRLEdBQVksS0FBSyxDQUFBO0lBcFFyQixDQUFDO0lBSUwsUUFBUTtRQUNOLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQ3BFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBOEVELGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUNoRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBZ0I7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN4QyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUE7UUFDNUMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDN0IsSUFBSSxLQUFLLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQ3pCLENBQUM7YUFDSSxJQUFHLEtBQUssSUFBSSxPQUFPLEVBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsUUFBZ0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFBO1lBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFBO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTtRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO1lBQ3JGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUE7WUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUE7UUFDM0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTtRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbkUsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztvQkFDN0IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO2dCQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7Z0JBQ3hELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDeEQsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQTtZQUMxQixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBLENBQUMsQ0FBQztTQUMxQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsV0FBbUI7UUFDckMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVEsRUFBRSxRQUFnQjtRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFBO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFBO1FBRW5DLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO1FBQ3JGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUE7UUFHeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsMkJBQTJCLENBQUMsR0FBUTtRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFBO0lBQzlCLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQTtRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzdCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FDMUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUE7WUFDbkIsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUMzQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDMUIsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUN0RCxDQUFBO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN4RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFFOUQsNkJBQTZCO1lBQzdCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUE7Z0JBQ3hELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLHNDQUFzQyxDQUFDLENBQUMsU0FBUyxDQUN6RixDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkIsQ0FBQyxFQUNELENBQUMsR0FBTyxFQUFFLEVBQUU7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM5RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBO1lBQ2hDLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFHLENBQUM7U0FDekIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFRO1FBQ3BCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQVk7UUFDM0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQWdCLEVBQUUsV0FBZ0IsRUFBRSxLQUFVO1FBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQ3pDLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUM1QixNQUFNLEVBQUUsSUFBSTtZQUNaLFdBQVcsRUFBRSxXQUFXO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsSUFBSSxLQUFLO1lBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFPRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7WUFDbEMsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNoQixLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDaEQsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDeEIsQ0FBQzt3QkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ25FLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNsQixDQUFDOytHQWpUVSxtQkFBbUIsOENBS3BCLGVBQWU7bUdBTGQsbUJBQW1CLDZFQ25CaEMsZ2g1QkFrZVUsb3BaRG5kRSxZQUFZLHlYQUFFLGFBQWEsbUxBQUUsdUJBQXVCLDhNQUFFLFdBQVc7OzRGQUloRSxtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxDQUFDOzswQkFTekUsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGVtZW50U2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3Itc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tICduZ3gtc2tlbGV0b24tbG9hZGVyJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWFkZC1zZWN0aW9uJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIE5neFNrZWxldG9uTG9hZGVyTW9kdWxlLCBGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWRkLXNlY3Rpb24uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZFNlY3Rpb25Db21wb25lbnQge1xyXG5cclxuICBPYmplY3Q/OiBPYmplY3RcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZzogTWF0RGlhbG9nUmVmPEFkZFNlY3Rpb25Db21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2VTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgYnVzaW5lc3NUeXBlOiAnU1RBVElDJyB8ICdFX0NPTU1FUkNFJyA9ICdFX0NPTU1FUkNFJztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBidXNpbmVzcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdiRGV0YWlscycpIHx8ICcnO1xyXG4gICAgdGhpcy5idXNpbmVzc1R5cGUgPSBidXNpbmVzcyA/IEpTT04ucGFyc2UoYnVzaW5lc3MpPy50eXBlIDogJ1NUQVRJQydcclxuICAgIHRoaXMuZ2V0QWxsU2VjdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVGFiOiBzdHJpbmcgPSBcIkJBU0lDXCJcclxuICBwdWJsaWMgYnVzaW5lc3NJZDogc3RyaW5nIHwgbnVsbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKTtcclxuICB0YWJzOiBhbnkgPSBbXHJcbiAgICB7IHZhbHVlOiBcIkJBU0lDXCIsIHZpZXdWYWx1ZTogXCJTZWN0aW9uIFN0dWRpb1wiIH0sXHJcbiAgICAvLyB7IHZhbHVlOiBcIklOVEVHUkFUSU9OU1wiLCB2aWV3VmFsdWU6IFwiRHluYW1pY1wiIH0sXHJcbiAgICB7IHZhbHVlOiBcIkFQUFNcIiwgdmlld1ZhbHVlOiBcIkFwcHNcIiB9LFxyXG4gICAgeyB2YWx1ZTogXCJTQVZFRFwiLCB2aWV3VmFsdWU6IFwiU2F2ZWRcIiB9XHJcbiAgXVxyXG5cclxuICBzZWN0aW9uczogYW55ID0gW11cclxuICBzZWxlY3RlZFNlY3Rpb246IGFueSA9IFtdXHJcbiAgc2VsZWN0ZWRTZWN0aW9uTmFtZTogYW55ID0gXCJcIlxyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgdGFiU2hpZnRMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHJlZmVyRWFybkV4aXN0OiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgLy8gTmV3OiB0cmFjayB3aGljaCBjYXRlZ29yeSBpcyBleHBhbmRlZCBpbiBzaWRlYmFyXHJcbiAgZXhwYW5kZWRDYXRlZ29yaWVzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XHJcblxyXG4gIC8vIE5ldzogdHJhY2sgd2hpY2ggY29tcG9uZW50IGNhcmQgaXMgc2VsZWN0ZWRcclxuICBzZWxlY3RlZENvbXBvbmVudDogYW55ID0gbnVsbFxyXG5cclxuICAvLyDilIDilIAgU2F2ZWQgdGFiIHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG4gIHNhdmVkU2VjdGlvbnM6IGFueSA9IHt9ICAgICAgICAgICAgLy8gcmF3IEFQSSByZXNwb25zZSAob2JqZWN0IHN0cnVjdHVyZSlcclxuICBzYXZlZENhdGVnb3J5S2V5czogc3RyaW5nW10gPSBbXSAgIC8vIHRvcC1sZXZlbCBjYXRlZ29yeSBrZXlzXHJcbiAgc2F2ZWRMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHNlbGVjdGVkU2F2ZWRDYXRlZ29yeTogc3RyaW5nID0gJycgLy8gY3VycmVudGx5IGFjdGl2ZSBjYXRlZ29yeSBpbiBzYXZlZCBzaWRlYmFyXHJcblxyXG4gIC8vIE5ldzogZW1vamkgbWFwIGZvciBjYXRlZ29yaWVzXHJcbiAgY2F0ZWdvcnlFbW9qaU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIC8vICdIZXJvJzogJ/CflrzvuI8nLFxyXG4gICAgLy8gJ1NlcnZpY2VzJzogJ/CfjoEnLFxyXG4gICAgLy8gJ0ZlYXR1cmUnOiAn4pyoJyxcclxuICAgIC8vICdIb3cgSXQgV29ya3MnOiAn4oS577iPJyxcclxuICAgIC8vICdUZXN0aW1vbmlhbCc6ICfirZAnLFxyXG4gICAgLy8gJ1ByaWNpbmcnOiAn8J+SsCcsXHJcbiAgICAvLyAnRmFxJzogJ+KdkycsXHJcbiAgICAvLyAnQmxvZ3MnOiAn8J+TnScsXHJcbiAgICAvLyAnTWlzY2VsbGFuZW91cyc6ICfwn5SnJyxcclxuICAgIC8vICdUZXh0JzogJ/Cfk4QnLFxyXG4gICAgLy8gJ0xvZ28nOiAn8J+Pt++4jycsXHJcbiAgICAvLyAnQ29udGFjdCc6ICfinInvuI8nLFxyXG4gICAgLy8gJ0NUQSc6ICfwn5OiJyxcclxuICAgIC8vICdUZWFtJzogJ/CfkaUnLFxyXG4gICAgLy8gJ1ZpZGVvJzogJ/CfjqwnLFxyXG4gICAgLy8gJ0ltYWdlICc6ICfwn5a877iPJyxcclxuICAgICdIZXJvJzogJ/CfmoAnLFxyXG4gICdTZXJ2aWNlcyc6ICfwn6ewJyxcclxuICAnRmVhdHVyZSc6ICfinKgnLFxyXG4gICdIb3cgSXQgV29ya3MnOiAn8J+qhCcsXHJcbiAgJ1Rlc3RpbW9uaWFsJzogJ+KtkCcsXHJcbiAgJ1ByaWNpbmcnOiAn8J+SsCcsXHJcbiAgJ0ZhcSc6ICfinZMnLFxyXG4gICdCbG9ncyc6ICfwn5OwJyxcclxuXHJcbiAgJ0Nob29zZSBVcyc6ICfwn5uh77iPJyxcclxuICAnTG9nbyBDbG91ZCc6ICfwn4+iJyxcclxuICAnTmV3c2xldHRlcic6ICfwn5OpJyxcclxuXHJcbiAgJ01pc2NlbGxhbmVvdXMnOiAn8J+TgicsXHJcbiAgJ1RleHQnOiAn4pyN77iPJyxcclxuICAnTG9nbyc6ICfwn4yIJyxcclxuXHJcbiAgJ0NvbnRhY3QnOiAn4piO77iPJyxcclxuICAnQ29udGFjdCBVcyc6ICfwn5OeJyxcclxuXHJcbiAgJ0NUQSc6ICfwn5SlJyxcclxuICAnVGVhbSc6ICfwn5GlJyxcclxuXHJcbiAgJ0Fib3V0JzogJ+KEue+4jycsXHJcbiAgJ0dhbGxlcnknOiAn8J+WvO+4jycsXHJcblxyXG4gICdWaWRlbyc6ICfwn46sJyxcclxuICAnSW1hZ2UnOiAn8J+WvO+4jydcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3J5RW1vamkoY2F0ZWdvcnk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yeUVtb2ppTWFwW2NhdGVnb3J5XSB8fCAn8J+TpidcclxuICB9XHJcblxyXG4gIGdldEZpcnN0U2VjdGlvbk5hbWUoY2F0ZWdvcnk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnNbY2F0ZWdvcnldXHJcbiAgICBpZiAoc2VjdGlvbnMgJiYgc2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gc2VjdGlvbnNbMF0uc2VjdGlvbk5hbWUgfHwgY2F0ZWdvcnlcclxuICAgIH1cclxuICAgIHJldHVybiBjYXRlZ29yeVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FsbGVkIGJ5IHRhYiBjbGljayDigJQgdHJpZ2dlcnMgc2F2ZWQgQVBJIG9uIGZpcnN0IHZpc2l0XHJcbiAgb25UYWJTZWxlY3QodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHZhbHVlO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRhYilcclxuICAgIGlmICh2YWx1ZSA9PT0gJ1NBVkVEJyAmJiAhdGhpcy5zYXZlZExvYWRlcikge1xyXG4gICAgICB0aGlzLmdldFNhdmVkU2VjdGlvbnMoKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZih2YWx1ZSA9PSAnQkFTSUMnKXtcclxuICAgICAgdGhpcy5nZXRBbGxTZWN0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzW2NhdGVnb3J5XSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllc1tjYXRlZ29yeV0gPSBmYWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IFwiXCJcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IG51bGxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzKS5mb3JFYWNoKGsgPT4gdGhpcy5leHBhbmRlZENhdGVnb3JpZXNba10gPSBmYWxzZSlcclxuICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNlbGVjdFNlY3Rpb24oY2F0ZWdvcnkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTYXZlZFNlY3Rpb25zKCkge1xyXG4gICAgdGhpcy5zYXZlZExvYWRlciA9IHRydWVcclxuICAgIHRoaXMuc2F2ZWRTZWN0aW9ucyA9IHt9XHJcbiAgICB0aGlzLnNhdmVkQ2F0ZWdvcnlLZXlzID0gW11cclxuICAgIHRoaXMuc2VsZWN0ZWRTYXZlZENhdGVnb3J5ID0gJydcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRBbGxTYXZlZFNlY3Rpb25zQXBpKHRoaXMuYnVzaW5lc3NJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uYWRkTmV3U2VjdGlvbikge1xyXG4gICAgICAgICAgZGVsZXRlIHJlcy5kYXRhLmFkZE5ld1NlY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2F2ZWRTZWN0aW9ucyA9IHJlcy5kYXRhIHx8IHt9XHJcbiAgICAgICAgdGhpcy5zYXZlZENhdGVnb3J5S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2F2ZWRTZWN0aW9ucylcclxuICAgICAgICBpZiAodGhpcy5zYXZlZENhdGVnb3J5S2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2F2ZWRDYXRlZ29yeSA9IHRoaXMuc2F2ZWRDYXRlZ29yeUtleXNbMF1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zYXZlZExvYWRlciA9IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7IHRoaXMuc2F2ZWRMb2FkZXIgPSBmYWxzZSB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2F2ZWRDYXRlZ29yeShjYXRlZ29yeUtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2F2ZWRDYXRlZ29yeSA9IGNhdGVnb3J5S2V5XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDb21wb25lbnQoc2VjOiBhbnksIGNhdGVnb3J5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnQgPSBzZWNcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tjYXRlZ29yeV1cclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IGNhdGVnb3J5XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5leHBhbmRlZENhdGVnb3JpZXMpLmZvckVhY2goayA9PiB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllc1trXSA9IGZhbHNlKVxyXG4gICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldID0gdHJ1ZVxyXG5cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21wLScgKyBzZWMuY29tcG9uZW50SWQpO1xyXG4gICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdENvbXBvbmVudEFuZEhpZ2hsaWdodChlbGU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IGVsZVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2VjdGlvbihlbGU6IGFueSkge1xyXG4gICAgdGhpcy50YWJTaGlmdExvYWRlciA9IHRydWVcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tlbGVdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lID0gZWxlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy50YWJTaGlmdExvYWRlciA9IGZhbHNlXHJcbiAgICB9LCA4MDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2VjdGlvbnMoKSB7XHJcbiAgICB0aGlzLmNoZWNrQXBwSW5zdGFsbGVkKClcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldENvbXBvbmVudEFwaSh0aGlzLmJ1c2luZXNzVHlwZSA9PT0gJ1NUQVRJQycgPyB0aGlzLmJ1c2luZXNzVHlwZSA6IHVuZGVmaW5lZCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IHJlcy5kYXRhXHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uQXBwb2ludG1lbnQpIHtcclxuICAgICAgICAgIGRlbGV0ZSByZXMuZGF0YS5BcHBvaW50bWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlZmVyRWFybkV4aXN0KSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgZGF0YVtrZXldID0gZGF0YVtrZXldLmZpbHRlcihcclxuICAgICAgICAgICAgICAoc2VjdGlvbjogYW55KSA9PiBzZWN0aW9uLnNlY3Rpb25UeXBlICE9PSAncmVmZXJlYXJuJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlY3Rpb25zID0gZGF0YVxyXG4gICAgICAgIHRoaXMuZHVtbXlTZWN0aW9ucyA9IGRhdGFcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLnNlY3Rpb25zKVswXVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1t0aGlzLnNlbGVjdGVkU2VjdGlvbk5hbWVdXHJcblxyXG4gICAgICAgIC8vIEF1dG8tZXhwYW5kIGZpcnN0IGNhdGVnb3J5XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lXSA9IHRydWVcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbj8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnQgPSB0aGlzLnNlbGVjdGVkU2VjdGlvblswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2F2ZWRTZWN0aW9ucygpe1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEFsbFNhdmVkU2VjdGlvbnNBcGkoXCIxZWVkY2IyNi1kMjNhLTY4OGEtYmQ2My01NzlkMTlkYWIyMjlcIikuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyOmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY2hlY2tBcHBJbnN0YWxsZWQoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmNoZWNrQXBwSW5zdGFsbGVkKHRoaXMuYnVzaW5lc3NJZCwgJ1JlZmVyIGFuZCBFYXJuJykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWZlckVhcm5FeGlzdCA9IHJlcy5kYXRhXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldE9iamVjdEtleXMob2JqOiBhbnkpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKSA6IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VjdGlvbkxlbmd0aChzZWN0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiBOdW1iZXIoT2JqZWN0LmtleXMoc2VjdGlvbikubGVuZ3RoKVxyXG4gIH1cclxuXHJcbiAgYWRkTmV3U2VjdGlvbihjb21wb25lbnRJZDogYW55LCBzZWN0aW9uVHlwZTogYW55LCBldmVudDogYW55KSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYWRkTmV3U2VjdGlvbkNsaWNrLmVtaXQoe1xyXG4gICAgICBjb21wb25lbnRJZDogY29tcG9uZW50SWQsXHJcbiAgICAgIGluZGV4OiB0aGlzLmRhdGEuaW5kZXgsXHJcbiAgICAgIHBvc2l0aW9uOiB0aGlzLmRhdGEucG9zaXRpb24sXHJcbiAgICAgIHN0YXR1czogdHJ1ZSxcclxuICAgICAgc2VjdGlvblR5cGU6IHNlY3Rpb25UeXBlXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gXCJcIlxyXG4gIGR1bW15U2VjdGlvbnM6IGFueVxyXG4gIGR1bW15MjogYW55ID0ge31cclxuICBpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIHNlYXJjaFNlY3Rpb25zKCkge1xyXG4gICAgdGhpcy5pc1NlYXJjaCA9IGZhbHNlXHJcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuc2VjdGlvbnMgPSB0aGlzLmR1bW15U2VjdGlvbnNcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmR1bW15MiA9IHt9XHJcbiAgICBmb3IgKGxldCBlbGUgb2YgT2JqZWN0LmtleXModGhpcy5kdW1teVNlY3Rpb25zKSkge1xyXG4gICAgICBpZiAoZWxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgdGhpcy5kdW1teTJbZWxlXSA9IFsuLi50aGlzLmR1bW15U2VjdGlvbnNbZWxlXV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiBvZiB0aGlzLmR1bW15U2VjdGlvbnNbZWxlXSkge1xyXG4gICAgICAgICAgaWYgKGouc2VjdGlvbk5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmR1bW15MltlbGVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kdW1teTJbZWxlXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZHVtbXkyW2VsZV0ucHVzaChqKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VjdGlvbnMgPSB7IC4uLnRoaXMuZHVtbXkyIH07XHJcbiAgICBpZiAodGhpcy5nZXRTZWN0aW9uTGVuZ3RoKHRoaXMuc2VjdGlvbnMpID09IDApXHJcbiAgICAgIHRoaXMuaXNTZWFyY2ggPSB0cnVlXHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLnNlY3Rpb25zKVswXVxyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zW09iamVjdC5rZXlzKHRoaXMuc2VjdGlvbnMpWzBdXVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmR1bW15MiA9IHt9XHJcbiAgfVxyXG59IiwiPCEtLSA8c2VjdGlvbiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdj5TZWxlY3QgVGVtcGxhdGU8L2Rpdj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZi0xOCBjcFwiIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICBjbG9zZVxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYXJlbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIGQtZmxleCBnYXAtMTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8zMTQ2NjFjMTc0MTg0NDIzNDQ0MlZlY3RvciUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJzZWFyY2gtYmFyLWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBTZWN0aW9uc1wiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFNlY3Rpb25zKClcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1hcm91bmQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiB0YWJzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFic1wiIChjbGljayk9XCJzZWxlY3RlZFRhYiA9IGVsZS52YWx1ZVwiIFtjbGFzcy5hY3RpdmUtdGFiXT1cImVsZS52YWx1ZSA9PSBzZWxlY3RlZFRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ZWxlLnZpZXdWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZS52YWx1ZSA9PSAnUFJPJyAmJiBlbGUudmFsdWUgIT0gc2VsZWN0ZWRUYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMzBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy80NjgyODFjMTc0NDY5OTY2NDg1OEZyYW1lJTIwMTI0NDgzMTc0MCUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cInByby1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAnQkFTSUMnOyBlbHNlIHByb1RhYkNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1NlYXJjaDtlbHNlIGVtcHR5U2NyZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1jb250YWluZXIgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtc2lkZXBhbmVsXCIgKm5nSWY9XCIhbG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiBnZXRPYmplY3RLZXlzKHNlY3Rpb25zKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtc2VjdGlvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTZWN0aW9uKGVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmUtc2VjdGlvbl09XCJzZWxlY3RlZFNlY3Rpb24gPT0gc2VjdGlvbnNbZWxlXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbiA9PSBzZWN0aW9uc1tlbGVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvOTU0MzgzYzE3NDE4NTAzOTI4MDJHcm91cCUyMDE3MDc0ODE4NzkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJpY29uIHRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24gIT0gc2VjdGlvbnNbZWxlXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzg0NjE0NWMxNzQxODUwNTc0ODY0SWNvbiUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJpY29uIHRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtcmVuZGVyLXNlY3Rpb25cIiAqbmdJZj1cIiAhbG9hZGVyICYmICF0YWJTaGlmdExvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkU2VjdGlvbk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSBzZWN0aW9uIHRvIGFkZCB0byB5b3VyIHBhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiBzZWxlY3RlZFNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj57e2VsZS5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgY3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld1NlY3Rpb24oZWxlLmNvbXBvbmVudElkLGVsZS5zZWN0aW9uVHlwZSwkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWxlPy5pbWFnZTsgZWxzZSBub0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImVsZT8uaW1hZ2VcIiBhbHQ9XCJzZWN0aW9uIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vaW1nLmZyZWVwaWsuY29tL3ByZW1pdW0tdmVjdG9yL2RlZmF1bHQtaW1hZ2UtaWNvbi12ZWN0b3ItbWlzc2luZy1waWN0dXJlLXBhZ2Utd2Vic2l0ZS1kZXNpZ24tbW9iaWxlLWFwcC1uby1waG90by1hdmFpbGFibGVfODc1NDMtMTEwOTMuanBnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwic2VjdGlvbiBpbWFnZVwiIGNsYXNzPVwiaC0zMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtc2lkZXBhbmVsXCIgKm5nSWY9XCJsb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIFsxLDEsMSwxLDEsMSwxLDEsMV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnOHZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc2NSUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICcxM3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b20nIDogJzEwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLXJlbmRlci1zZWN0aW9uXCIgKm5nSWY9XCJsb2FkZXIgfHwgdGFiU2hpZnRMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyMCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICczdmgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnNjAlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiAnMnZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIFsxLDEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+ICAgPG5neC1za2VsZXRvbi1sb2FkZXIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI1JScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiAnMnZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICcyNXZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4nOicycHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJvVGFiQ29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWRpdiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8zNzcwNzZjMTc0MzE1NDgwNzY4M2ltYWdlJTIwJTI4NiUyOS5wbmdcIiBhbHQ9XCJlbXB0eS1pbWdcIiBjbGFzcz1cImVtcHR5LWltZyBcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIENvbWluZyBTb29uXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMSB0ZXh0LWNlbnRlclwiPldvb2YhIFNvbWV0aGluZyBwYXdzb21lIGlzIGNvbWluZyE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy1zdWItdGV4dC0yIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhleSBob29tYW4hIEkganVzdCBzbmlmZmVkIG91dCBzb21ldGhpbmcgc3VwZXIgZXhjaXRpbmcuLi4gYW5kIGl04oCZcyBhbG1vc3QgaGVyZSEgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2NyZWVuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktZGl2IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lci0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzM3NzA3NmMxNzQzMTU0ODA3NjgzaW1hZ2UlMjAlMjg2JTI5LnBuZ1wiIGFsdD1cImVtcHR5LWltZ1wiIGNsYXNzPVwiZW1wdHktaW1nIFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgT29wcyEgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMSB0ZXh0LWNlbnRlclwiPkkgc25pZmZlZCBldmVyeXdoZXJlLCBidXQgSSBjb3VsZG4ndCBmaW5kIHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMiB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXliZSB0cnkgYSBkaWZmZXJlbnQgc2VhcmNoPyBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj4gLS0+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cIm1haW4tY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyIGZhZGUtaW5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+QWRkIGEgc2VjdGlvbjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3VidGl0bGVcIj5DaG9vc2UgYSBzZWN0aW9uIOKAlCB5b3UgY2FuIHJlb3JkZXIgb3IgcmVtb3ZlIGl0IGFueSB0aW1lLjwvZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNsb3NlLWJ0blwiIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwYXJlbnQtY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgICAgICA8IS0tIFRhYnMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvcC10YWJzLWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmFkZS1pblwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGUgb2YgdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvcC10YWJcIiAoY2xpY2spPVwib25UYWJTZWxlY3QoZWxlLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS10b3AtdGFiXT1cImVsZS52YWx1ZSA9PSBzZWxlY3RlZFRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ZWxlLnZpZXdWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2VhcmNoIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyLWNvbnRhaW5lciBmYWRlLWluXCIgKm5nSWY9XCJzZWxlY3RlZFRhYiAhPSAnU0FWRUQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIGQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzMxNDY2MWMxNzQxODQ0MjM0NDQyVmVjdG9yJTIwJTI4MSUyOS5wbmdcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPSdTZWFyY2ggc2VjdGlvbi4uLicgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2hTZWN0aW9ucygpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdCQVNJQydcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTZWFyY2g7IGVsc2UgZW1wdHlTY3JlZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFF1aWNrIEFkZCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInF1aWNrLWFkZC1jb250YWluZXIgZmFkZS1pbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCIhbG9hZGVyICYmICFzZWFyY2hUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWFkZC1sYWJlbFwiPlF1aWNrIGFkZDo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVpY2stYWRkLWNoaXBzIGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBnZXRPYmplY3RLZXlzKHNlY3Rpb25zKTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgPCA2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWNoaXAgc3RhZ2dlci1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2VjdGlvbihjYXRlZ29yeSk7IHRvZ2dsZUNhdGVnb3J5KGNhdGVnb3J5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmUtcXVpY2stY2hpcF09XCJzZWxlY3RlZFNlY3Rpb25OYW1lID09PSBjYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtZW1vamlcIj57e2dldENhdGVnb3J5RW1vamkoY2F0ZWdvcnkpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Rmlyc3RTZWN0aW9uTmFtZShjYXRlZ29yeSl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ09OVEVOVCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWxheW91dCBmYWRlLWluIGQtZmxleFwiICpuZ0lmPVwiIWxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTEVGVCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1zaWRlYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaWNvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj7inKg8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy0xNFwiPkFJIFJlY29tbWVuZGVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgZ2V0T2JqZWN0S2V5cyhzZWN0aW9ucylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDYXRlZ29yeShjYXRlZ29yeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnktaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q2F0ZWdvcnlFbW9qaShjYXRlZ29yeSl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2F0ZWdvcnl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeS1jb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7e3NlY3Rpb25zW2NhdGVnb3J5XT8ubGVuZ3RofX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjYXRlZ29yeS1hcnJvd1wiICpuZ0lmPVwiZXhwYW5kZWRDYXRlZ29yaWVzW2NhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kX2xlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2F0ZWdvcnktYXJyb3dcIiAqbmdJZj1cIiFleHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfbW9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1pdGVtcyBkLWZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cImV4cGFuZGVkQ2F0ZWdvcmllc1tjYXRlZ29yeV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjIG9mIHNlY3Rpb25zW2NhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDb21wb25lbnQ/LmNvbXBvbmVudElkID09PSBzZWMuY29tcG9uZW50SWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDb21wb25lbnQoc2VjLCBjYXRlZ29yeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlYy5zZWN0aW9uTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250ZW50XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ncm91cC1sYWJlbFwiPnt7c2VsZWN0ZWRTZWN0aW9uTmFtZSB8fCAnU2VjdGlvbnMnfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy1saXN0IGQtZmxleCBmbGV4LWNvbHVtblwiICpuZ0lmPVwic2VsZWN0ZWRTZWN0aW9uICYmIHNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIHNlbGVjdGVkU2VjdGlvbjsgbGV0IGkgPSBpbmRleFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2NvbXAtJyArIGVsZS5jb21wb25lbnRJZFwiIGNsYXNzPVwic2VjdGlvbi1jYXJkIHN0YWdnZXItaXRlbVwiIFtzdHlsZS5hbmltYXRpb24tZGVsYXldPVwiaSAqIDQwICsgJ21zJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VjdGlvbi1jYXJkLXNlbGVjdGVkXT1cInNlbGVjdGVkQ29tcG9uZW50Py5jb21wb25lbnRJZCA9PT0gZWxlLmNvbXBvbmVudElkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDb21wb25lbnRBbmRIaWdobGlnaHQoZWxlKVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQtYmFkZ2VcIiAqbmdJZj1cImVsZS5zZWN0aW9uVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKyB7e2VsZS5zZWN0aW9uVHlwZSB8IHVwcGVyY2FzZX19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHt7ZWxlLnNlY3Rpb25OYW1lIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZT8uaW1hZ2U7IGVsc2Ugbm9JbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZWxlPy5pbWFnZVwiIGFsdD1cInNlY3Rpb24gcHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWltYWdlLXBsYWNlaG9sZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmltYWdlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQtaW5mbyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkLW5hbWVcIj57e2VsZS5zZWN0aW9uTmFtZX19PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkLWRlc2NcIiAqbmdJZj1cImVsZS5kZXNjXCI+e3tlbGUuZGVzYyB8IHRpdGxlY2FzZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2FyZC1jaGVjay1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBvbmVudD8uY29tcG9uZW50SWQgPT09IGVsZS5jb21wb25lbnRJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19jaXJjbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlIGZhZGUtaW5cIiAqbmdJZj1cIiFzZWxlY3RlZFNlY3Rpb24gfHwgc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZW1wdHktcGFnZS1pY29uXCI+YXV0b19hd2Vzb21lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS10aXRsZVwiPlNlbGVjdCBhIGNhdGVnb3J5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgYW55IGNhdGVnb3J5IGZyb20gdGhlIGxlZnQgc2lkZWJhciB0byBleHBsb3JlIGFuZCBhZGQgc2VjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWxheW91dCBkLWZsZXhcIiAqbmdJZj1cImxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGViYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcyBvZiBbMSwxLDEsMSwxLDEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyB3aWR0aDogJzkwJScsIGhlaWdodDogJzM2cHgnLCAnYm9yZGVyLXJhZGl1cyc6ICc4cHgnLCAnbWFyZ2luLWJvdHRvbSc6ICc2cHgnIH1cIj48L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHMgb2YgWzEsMSwxLDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgd2lkdGg6ICc0MCUnLCBoZWlnaHQ6ICcyMHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnNHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzE4MHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnOHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnNjAlJywgaGVpZ2h0OiAnMTZweCcsICdib3JkZXItcmFkaXVzJzogJzRweCcgfVwiPjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ1NBVkVEJ1wiPlxyXG4gICAgICAgICAgICA8IS0tIExvYWRlciBza2VsZXRvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtbGF5b3V0IGQtZmxleFwiICpuZ0lmPVwic2F2ZWRMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGViYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzIG9mIFsxLDEsMSwxLDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyB3aWR0aDogJzkwJScsIGhlaWdodDogJzM2cHgnLCAnYm9yZGVyLXJhZGl1cyc6ICc4cHgnLCAnbWFyZ2luLWJvdHRvbSc6ICc4cHgnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHMgb2YgWzEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgd2lkdGg6ICc0MCUnLCBoZWlnaHQ6ICcxOHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnNHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnOHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnNjAlJywgaGVpZ2h0OiAnMTRweCcsICdib3JkZXItcmFkaXVzJzogJzRweCcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTG9hZGVkOiBjYXRlZ29yaWVzICsgcmlnaHQgY29tcG9uZW50IGNhcmQgcHJldmlldyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtbGF5b3V0IGZhZGUtaW4gZC1mbGV4XCIgKm5nSWY9XCIhc2F2ZWRMb2FkZXIgJiYgc2F2ZWRDYXRlZ29yeUtleXMubGVuZ3RoID4gMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTEVGVDogY29tcG9uZW50IGNhdGVnb3JpZXMgbGlzdCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGViYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtcGFnZXMtbGFiZWxcIj5TYXZlZCBTZWN0aW9uczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdEtleSBvZiBzYXZlZENhdGVnb3J5S2V5c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtcGFnZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRTYXZlZENhdGVnb3J5ID09PSBjYXRLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNhdmVkQ2F0ZWdvcnkoY2F0S2V5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2F2ZWQtcGFnZS1pY29uXCI+YXJ0aWNsZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNhdmVkLXBhZ2UtbmFtZVwiPnt7Y2F0S2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSSUdIVDogc2VsZWN0ZWQgY29tcG9uZW50IHByZXZpZXcgY2FyZCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tZ3JvdXAtbGFiZWxcIj5Db21wb25lbnQgUHJldmlldzwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbnMtbGlzdCBkLWZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkIHNlY3Rpb24tY2FyZC1wcmV2aWV3IGZhZGUtaW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlY3Rpb24gdHlwZSBiYWRnZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQtYmFkZ2VcIiAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS5jb21wb25lbnQ/LnNlY3Rpb25UeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50LnNlY3Rpb25UeXBlLnNwbGl0KCdfJykuam9pbignICcpIHwgdXBwZXJjYXNlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUHJldmlldyBhcmVhIChTaG93IGltYWdlIGlmIHByZXNlbnQsIGZhbGxiYWNrIHRvIHBsYWNlaG9sZGVyKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS5jb21wb25lbnQ/LnN0eWxlcz8uYmFja2dyb3VuZD8uaW1hZ2UgJiYgc2F2ZWRTZWN0aW9uc1tzZWxlY3RlZFNhdmVkQ2F0ZWdvcnldLmNvbXBvbmVudD8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5zaG93SW1hZ2U7IGVsc2Ugc2F2ZWROb0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50LnN0eWxlcy5iYWNrZ3JvdW5kLmltYWdlXCIgYWx0PVwic2VjdGlvbiBwcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzYXZlZE5vSW1hZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1wcmV2aWV3LXBsYWNlaG9sZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmxheWVyczwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS5jb21wb25lbnQ/LnNlY3Rpb25UeXBlPy5zcGxpdCgnXycpPy5qb2luKCcgJykgfHwgJ1NhdmVkIENvbXBvbmVudCd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBpbmZvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1uYW1lXCI+e3tzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50Py5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1kZXNjXCIgKm5nSWY9XCJzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50Py5kZXNjXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2F2ZWRTZWN0aW9uc1tzZWxlY3RlZFNhdmVkQ2F0ZWdvcnldLmNvbXBvbmVudC5kZXNjfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlZCBJbiBmb290ZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY2FyZC1mb290ZXJcIiAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS51c2VkSW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlZC1pbi1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ1c2VkLWluLWljb25cIj53ZWI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZWQtaW4tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5Vc2VkIEluICh7e3NhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS51c2VkSW4ubGVuZ3RofX0gUGFnZXMpOjwvc3Ryb25nPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2F2ZWRTZWN0aW9uc1tzZWxlY3RlZFNhdmVkQ2F0ZWdvcnldLnVzZWRJbi5qb2luKCcsICcpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEVtcHR5OiBubyBzYXZlZCBkYXRhIGF0IGFsbCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlIGZhZGUtaW5cIiAqbmdJZj1cIiFzYXZlZExvYWRlciAmJiBzYXZlZENhdGVnb3J5S2V5cy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4taWNvbnMtcG5nLmZsYXRpY29uLmNvbS81MTIvNDA3Ni80MDc2NTQ5LnBuZ1wiIGFsdD1cImVtcHR5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktdGl0bGVcIj5ObyBzYXZlZCBzZWN0aW9uczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN1YnRpdGxlXCI+U2VjdGlvbnMgeW91IHNhdmUgZnJvbSBwYWdlcyB3aWxsIGFwcGVhciBoZXJlPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAnQVBQUydcIj5cclxuICAgICAgICAgICAgZHVyZ2EgcHJhc2FkIGJob2dpc2V0dGlcclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gRU1QVFkgU0VBUkNIIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTY3JlZW4+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZSBmYWRlLWluIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Nkbi1pY29ucy1wbmcuZmxhdGljb24uY29tLzUxMi83NDg2Lzc0ODY4MDMucG5nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktdGl0bGVcIj5ObyBzZWN0aW9ucyBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN1YnRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVHJ5IHNlYXJjaGluZyBzb21ldGhpbmcgZWxzZSBvciBleHBsb3JlIGNhdGVnb3JpZXNcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRm9vdGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXIgZmFkZS1pblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItaGludFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+aW5mb19vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiICE9PSAnU0FWRUQnXCI+XHJcbiAgICAgICAgICAgICAgICBZb3UgY2FuIHJlYXJyYW5nZSBvciByZW1vdmUgdGhpcyBzZWN0aW9uIGFueSB0aW1lLlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAnU0FWRUQnXCI+XHJcbiAgICAgICAgICAgICAgICBTYXZlZCBzZWN0aW9ucyBhcmUgcmVhZC1vbmx5IHByZXZpZXdzLlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jYW5jZWxcIiAoY2xpY2spPVwiZGlhbG9nLmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkVGFiID09PSAnU0FWRUQnID8gJ0Nsb3NlJyA6ICdDYW5jZWwnIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEJhc2ljIHRhYiBvbmx5IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWFkZFwiICpuZ0lmPVwic2VsZWN0ZWRUYWIgIT09ICdTQVZFRCdcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFzZWxlY3RlZENvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRDb21wb25lbnQgJiYgYWRkTmV3U2VjdGlvbihzZWxlY3RlZENvbXBvbmVudC5jb21wb25lbnRJZCwgc2VsZWN0ZWRDb21wb25lbnQuc2VjdGlvblR5cGUsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICsgQWRkIHNlY3Rpb25cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj4iXX0=
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9hZGQtc2VjdGlvbi9hZGQtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL2FkZC1zZWN0aW9uL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQWUsV0FBVyxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBV25FLE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBbUIsTUFBeUMsRUFDMUIsSUFBUyxFQUNqQyxJQUFnQixFQUNoQixhQUE0QixFQUM1QixhQUFvQyxFQUNwQyxXQUF3QixFQUN4QixjQUFxQztRQU41QixXQUFNLEdBQU4sTUFBTSxDQUFtQztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUcvQyxpQkFBWSxHQUE0QixZQUFZLENBQUM7UUFRckQsZ0JB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SUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ25FLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNsQixDQUFDOytHQWpUVSxtQkFBbUIsOENBS3BCLGVBQWU7bUdBTGQsbUJBQW1CLDZFQ25CaEMseSs0QkFpZVUsb3BaRGxkRSxZQUFZLHlYQUFFLGFBQWEsbUxBQUUsdUJBQXVCLDhNQUFFLFdBQVc7OzRGQUloRSxtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxDQUFDOzswQkFTekUsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGVtZW50U2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3Itc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tICduZ3gtc2tlbGV0b24tbG9hZGVyJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWFkZC1zZWN0aW9uJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIE5neFNrZWxldG9uTG9hZGVyTW9kdWxlLCBGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWRkLXNlY3Rpb24uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZFNlY3Rpb25Db21wb25lbnQge1xyXG5cclxuICBPYmplY3Q/OiBPYmplY3RcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZzogTWF0RGlhbG9nUmVmPEFkZFNlY3Rpb25Db21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVsZW1lbnRTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2VTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgYnVzaW5lc3NUeXBlOiAnU1RBVElDJyB8ICdFX0NPTU1FUkNFJyA9ICdFX0NPTU1FUkNFJztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBidXNpbmVzcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdiRGV0YWlscycpIHx8ICcnO1xyXG4gICAgdGhpcy5idXNpbmVzc1R5cGUgPSBidXNpbmVzcyA/IEpTT04ucGFyc2UoYnVzaW5lc3MpPy50eXBlIDogJ1NUQVRJQydcclxuICAgIHRoaXMuZ2V0QWxsU2VjdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVGFiOiBzdHJpbmcgPSBcIkJBU0lDXCJcclxuICBwdWJsaWMgYnVzaW5lc3NJZDogc3RyaW5nIHwgbnVsbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKTtcclxuICB0YWJzOiBhbnkgPSBbXHJcbiAgICB7IHZhbHVlOiBcIkJBU0lDXCIsIHZpZXdWYWx1ZTogXCJTZWN0aW9uIFN0dWRpb1wiIH0sXHJcbiAgICAvLyB7IHZhbHVlOiBcIklOVEVHUkFUSU9OU1wiLCB2aWV3VmFsdWU6IFwiRHluYW1pY1wiIH0sXHJcbiAgICB7IHZhbHVlOiBcIkFQUFNcIiwgdmlld1ZhbHVlOiBcIkFwcHNcIiB9LFxyXG4gICAgeyB2YWx1ZTogXCJTQVZFRFwiLCB2aWV3VmFsdWU6IFwiU2F2ZWRcIiB9XHJcbiAgXVxyXG5cclxuICBzZWN0aW9uczogYW55ID0gW11cclxuICBzZWxlY3RlZFNlY3Rpb246IGFueSA9IFtdXHJcbiAgc2VsZWN0ZWRTZWN0aW9uTmFtZTogYW55ID0gXCJcIlxyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgdGFiU2hpZnRMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHJlZmVyRWFybkV4aXN0OiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgLy8gTmV3OiB0cmFjayB3aGljaCBjYXRlZ29yeSBpcyBleHBhbmRlZCBpbiBzaWRlYmFyXHJcbiAgZXhwYW5kZWRDYXRlZ29yaWVzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XHJcblxyXG4gIC8vIE5ldzogdHJhY2sgd2hpY2ggY29tcG9uZW50IGNhcmQgaXMgc2VsZWN0ZWRcclxuICBzZWxlY3RlZENvbXBvbmVudDogYW55ID0gbnVsbFxyXG5cclxuICAvLyDilIDilIAgU2F2ZWQgdGFiIHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG4gIHNhdmVkU2VjdGlvbnM6IGFueSA9IHt9ICAgICAgICAgICAgLy8gcmF3IEFQSSByZXNwb25zZSAob2JqZWN0IHN0cnVjdHVyZSlcclxuICBzYXZlZENhdGVnb3J5S2V5czogc3RyaW5nW10gPSBbXSAgIC8vIHRvcC1sZXZlbCBjYXRlZ29yeSBrZXlzXHJcbiAgc2F2ZWRMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHNlbGVjdGVkU2F2ZWRDYXRlZ29yeTogc3RyaW5nID0gJycgLy8gY3VycmVudGx5IGFjdGl2ZSBjYXRlZ29yeSBpbiBzYXZlZCBzaWRlYmFyXHJcblxyXG4gIC8vIE5ldzogZW1vamkgbWFwIGZvciBjYXRlZ29yaWVzXHJcbiAgY2F0ZWdvcnlFbW9qaU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIC8vICdIZXJvJzogJ/CflrzvuI8nLFxyXG4gICAgLy8gJ1NlcnZpY2VzJzogJ/CfjoEnLFxyXG4gICAgLy8gJ0ZlYXR1cmUnOiAn4pyoJyxcclxuICAgIC8vICdIb3cgSXQgV29ya3MnOiAn4oS577iPJyxcclxuICAgIC8vICdUZXN0aW1vbmlhbCc6ICfirZAnLFxyXG4gICAgLy8gJ1ByaWNpbmcnOiAn8J+SsCcsXHJcbiAgICAvLyAnRmFxJzogJ+KdkycsXHJcbiAgICAvLyAnQmxvZ3MnOiAn8J+TnScsXHJcbiAgICAvLyAnTWlzY2VsbGFuZW91cyc6ICfwn5SnJyxcclxuICAgIC8vICdUZXh0JzogJ/Cfk4QnLFxyXG4gICAgLy8gJ0xvZ28nOiAn8J+Pt++4jycsXHJcbiAgICAvLyAnQ29udGFjdCc6ICfinInvuI8nLFxyXG4gICAgLy8gJ0NUQSc6ICfwn5OiJyxcclxuICAgIC8vICdUZWFtJzogJ/CfkaUnLFxyXG4gICAgLy8gJ1ZpZGVvJzogJ/CfjqwnLFxyXG4gICAgLy8gJ0ltYWdlICc6ICfwn5a877iPJyxcclxuICAgICdIZXJvJzogJ/CfmoAnLFxyXG4gICdTZXJ2aWNlcyc6ICfwn6ewJyxcclxuICAnRmVhdHVyZSc6ICfinKgnLFxyXG4gICdIb3cgSXQgV29ya3MnOiAn8J+qhCcsXHJcbiAgJ1Rlc3RpbW9uaWFsJzogJ+KtkCcsXHJcbiAgJ1ByaWNpbmcnOiAn8J+SsCcsXHJcbiAgJ0ZhcSc6ICfinZMnLFxyXG4gICdCbG9ncyc6ICfwn5OwJyxcclxuXHJcbiAgJ0Nob29zZSBVcyc6ICfwn5uh77iPJyxcclxuICAnTG9nbyBDbG91ZCc6ICfwn4+iJyxcclxuICAnTmV3c2xldHRlcic6ICfwn5OpJyxcclxuXHJcbiAgJ01pc2NlbGxhbmVvdXMnOiAn8J+TgicsXHJcbiAgJ1RleHQnOiAn4pyN77iPJyxcclxuICAnTG9nbyc6ICfwn4yIJyxcclxuXHJcbiAgJ0NvbnRhY3QnOiAn4piO77iPJyxcclxuICAnQ29udGFjdCBVcyc6ICfwn5OeJyxcclxuXHJcbiAgJ0NUQSc6ICfwn5SlJyxcclxuICAnVGVhbSc6ICfwn5GlJyxcclxuXHJcbiAgJ0Fib3V0JzogJ+KEue+4jycsXHJcbiAgJ0dhbGxlcnknOiAn8J+WvO+4jycsXHJcblxyXG4gICdWaWRlbyc6ICfwn46sJyxcclxuICAnSW1hZ2UnOiAn8J+WvO+4jydcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3J5RW1vamkoY2F0ZWdvcnk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yeUVtb2ppTWFwW2NhdGVnb3J5XSB8fCAn8J+TpidcclxuICB9XHJcblxyXG4gIGdldEZpcnN0U2VjdGlvbk5hbWUoY2F0ZWdvcnk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnNbY2F0ZWdvcnldXHJcbiAgICBpZiAoc2VjdGlvbnMgJiYgc2VjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gc2VjdGlvbnNbMF0uc2VjdGlvbk5hbWUgfHwgY2F0ZWdvcnlcclxuICAgIH1cclxuICAgIHJldHVybiBjYXRlZ29yeVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FsbGVkIGJ5IHRhYiBjbGljayDigJQgdHJpZ2dlcnMgc2F2ZWQgQVBJIG9uIGZpcnN0IHZpc2l0XHJcbiAgb25UYWJTZWxlY3QodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHZhbHVlO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRhYilcclxuICAgIGlmICh2YWx1ZSA9PT0gJ1NBVkVEJyAmJiAhdGhpcy5zYXZlZExvYWRlcikge1xyXG4gICAgICB0aGlzLmdldFNhdmVkU2VjdGlvbnMoKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZih2YWx1ZSA9PSAnQkFTSUMnKXtcclxuICAgICAgdGhpcy5nZXRBbGxTZWN0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzW2NhdGVnb3J5XSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllc1tjYXRlZ29yeV0gPSBmYWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IFwiXCJcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IG51bGxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzKS5mb3JFYWNoKGsgPT4gdGhpcy5leHBhbmRlZENhdGVnb3JpZXNba10gPSBmYWxzZSlcclxuICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldID0gdHJ1ZVxyXG4gICAgICB0aGlzLnNlbGVjdFNlY3Rpb24oY2F0ZWdvcnkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTYXZlZFNlY3Rpb25zKCkge1xyXG4gICAgdGhpcy5zYXZlZExvYWRlciA9IHRydWVcclxuICAgIHRoaXMuc2F2ZWRTZWN0aW9ucyA9IHt9XHJcbiAgICB0aGlzLnNhdmVkQ2F0ZWdvcnlLZXlzID0gW11cclxuICAgIHRoaXMuc2VsZWN0ZWRTYXZlZENhdGVnb3J5ID0gJydcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRBbGxTYXZlZFNlY3Rpb25zQXBpKHRoaXMuYnVzaW5lc3NJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uYWRkTmV3U2VjdGlvbikge1xyXG4gICAgICAgICAgZGVsZXRlIHJlcy5kYXRhLmFkZE5ld1NlY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2F2ZWRTZWN0aW9ucyA9IHJlcy5kYXRhIHx8IHt9XHJcbiAgICAgICAgdGhpcy5zYXZlZENhdGVnb3J5S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2F2ZWRTZWN0aW9ucylcclxuICAgICAgICBpZiAodGhpcy5zYXZlZENhdGVnb3J5S2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2F2ZWRDYXRlZ29yeSA9IHRoaXMuc2F2ZWRDYXRlZ29yeUtleXNbMF1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zYXZlZExvYWRlciA9IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7IHRoaXMuc2F2ZWRMb2FkZXIgPSBmYWxzZSB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2F2ZWRDYXRlZ29yeShjYXRlZ29yeUtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2F2ZWRDYXRlZ29yeSA9IGNhdGVnb3J5S2V5XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDb21wb25lbnQoc2VjOiBhbnksIGNhdGVnb3J5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnQgPSBzZWNcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tjYXRlZ29yeV1cclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSA9IGNhdGVnb3J5XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5leHBhbmRlZENhdGVnb3JpZXMpLmZvckVhY2goayA9PiB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllc1trXSA9IGZhbHNlKVxyXG4gICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldID0gdHJ1ZVxyXG5cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21wLScgKyBzZWMuY29tcG9uZW50SWQpO1xyXG4gICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdENvbXBvbmVudEFuZEhpZ2hsaWdodChlbGU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IGVsZVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2VjdGlvbihlbGU6IGFueSkge1xyXG4gICAgdGhpcy50YWJTaGlmdExvYWRlciA9IHRydWVcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tlbGVdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lID0gZWxlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy50YWJTaGlmdExvYWRlciA9IGZhbHNlXHJcbiAgICB9LCA4MDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2VjdGlvbnMoKSB7XHJcbiAgICB0aGlzLmNoZWNrQXBwSW5zdGFsbGVkKClcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldENvbXBvbmVudEFwaSh0aGlzLmJ1c2luZXNzVHlwZSA9PT0gJ1NUQVRJQycgPyB0aGlzLmJ1c2luZXNzVHlwZSA6IHVuZGVmaW5lZCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZGF0YSA9IHJlcy5kYXRhXHJcbiAgICAgICAgaWYgKHJlcz8uZGF0YT8uQXBwb2ludG1lbnQpIHtcclxuICAgICAgICAgIGRlbGV0ZSByZXMuZGF0YS5BcHBvaW50bWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlZmVyRWFybkV4aXN0KSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgZGF0YVtrZXldID0gZGF0YVtrZXldLmZpbHRlcihcclxuICAgICAgICAgICAgICAoc2VjdGlvbjogYW55KSA9PiBzZWN0aW9uLnNlY3Rpb25UeXBlICE9PSAncmVmZXJlYXJuJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlY3Rpb25zID0gZGF0YVxyXG4gICAgICAgIHRoaXMuZHVtbXlTZWN0aW9ucyA9IGRhdGFcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLnNlY3Rpb25zKVswXVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy5zZWN0aW9uc1t0aGlzLnNlbGVjdGVkU2VjdGlvbk5hbWVdXHJcblxyXG4gICAgICAgIC8vIEF1dG8tZXhwYW5kIGZpcnN0IGNhdGVnb3J5XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXNbdGhpcy5zZWxlY3RlZFNlY3Rpb25OYW1lXSA9IHRydWVcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbj8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnQgPSB0aGlzLnNlbGVjdGVkU2VjdGlvblswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2F2ZWRTZWN0aW9ucygpe1xyXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEFsbFNhdmVkU2VjdGlvbnNBcGkoXCIxZWVkY2IyNi1kMjNhLTY4OGEtYmQ2My01NzlkMTlkYWIyMjlcIikuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyOmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY2hlY2tBcHBJbnN0YWxsZWQoKSB7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmNoZWNrQXBwSW5zdGFsbGVkKHRoaXMuYnVzaW5lc3NJZCwgJ1JlZmVyIGFuZCBFYXJuJykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWZlckVhcm5FeGlzdCA9IHJlcy5kYXRhXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldE9iamVjdEtleXMob2JqOiBhbnkpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKSA6IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VjdGlvbkxlbmd0aChzZWN0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiBOdW1iZXIoT2JqZWN0LmtleXMoc2VjdGlvbikubGVuZ3RoKVxyXG4gIH1cclxuXHJcbiAgYWRkTmV3U2VjdGlvbihjb21wb25lbnRJZDogYW55LCBzZWN0aW9uVHlwZTogYW55LCBldmVudDogYW55KSB7XHJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2UuYWRkTmV3U2VjdGlvbkNsaWNrLmVtaXQoe1xyXG4gICAgICBjb21wb25lbnRJZDogY29tcG9uZW50SWQsXHJcbiAgICAgIGluZGV4OiB0aGlzLmRhdGEuaW5kZXgsXHJcbiAgICAgIHBvc2l0aW9uOiB0aGlzLmRhdGEucG9zaXRpb24sXHJcbiAgICAgIHN0YXR1czogdHJ1ZSxcclxuICAgICAgc2VjdGlvblR5cGU6IHNlY3Rpb25UeXBlXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gXCJcIlxyXG4gIGR1bW15U2VjdGlvbnM6IGFueVxyXG4gIGR1bW15MjogYW55ID0ge31cclxuICBpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gIHNlYXJjaFNlY3Rpb25zKCkge1xyXG4gICAgdGhpcy5pc1NlYXJjaCA9IGZhbHNlXHJcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuc2VjdGlvbnMgPSB0aGlzLmR1bW15U2VjdGlvbnNcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmR1bW15MiA9IHt9XHJcbiAgICBmb3IgKGxldCBlbGUgb2YgT2JqZWN0LmtleXModGhpcy5kdW1teVNlY3Rpb25zKSkge1xyXG4gICAgICBpZiAoZWxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgdGhpcy5kdW1teTJbZWxlXSA9IFsuLi50aGlzLmR1bW15U2VjdGlvbnNbZWxlXV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiBvZiB0aGlzLmR1bW15U2VjdGlvbnNbZWxlXSkge1xyXG4gICAgICAgICAgaWYgKGouc2VjdGlvbk5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmR1bW15MltlbGVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kdW1teTJbZWxlXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZHVtbXkyW2VsZV0ucHVzaChqKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VjdGlvbnMgPSB7IC4uLnRoaXMuZHVtbXkyIH07XHJcbiAgICBpZiAodGhpcy5nZXRTZWN0aW9uTGVuZ3RoKHRoaXMuc2VjdGlvbnMpID09IDApXHJcbiAgICAgIHRoaXMuaXNTZWFyY2ggPSB0cnVlXHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLnNlY3Rpb25zKVswXVxyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zW09iamVjdC5rZXlzKHRoaXMuc2VjdGlvbnMpWzBdXVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmR1bW15MiA9IHt9XHJcbiAgfVxyXG59IiwiPCEtLSA8c2VjdGlvbiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdj5TZWxlY3QgVGVtcGxhdGU8L2Rpdj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZi0xOCBjcFwiIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICBjbG9zZVxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYXJlbnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1iYXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIGQtZmxleCBnYXAtMTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8zMTQ2NjFjMTc0MTg0NDIzNDQ0MlZlY3RvciUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJzZWFyY2gtYmFyLWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBTZWN0aW9uc1wiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaFNlY3Rpb25zKClcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1hcm91bmQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiB0YWJzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFic1wiIChjbGljayk9XCJzZWxlY3RlZFRhYiA9IGVsZS52YWx1ZVwiIFtjbGFzcy5hY3RpdmUtdGFiXT1cImVsZS52YWx1ZSA9PSBzZWxlY3RlZFRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ZWxlLnZpZXdWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZS52YWx1ZSA9PSAnUFJPJyAmJiBlbGUudmFsdWUgIT0gc2VsZWN0ZWRUYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMzBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy80NjgyODFjMTc0NDY5OTY2NDg1OEZyYW1lJTIwMTI0NDgzMTc0MCUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cInByby1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAnQkFTSUMnOyBlbHNlIHByb1RhYkNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1NlYXJjaDtlbHNlIGVtcHR5U2NyZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1jb250YWluZXIgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtc2lkZXBhbmVsXCIgKm5nSWY9XCIhbG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiBnZXRPYmplY3RLZXlzKHNlY3Rpb25zKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtc2VjdGlvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTZWN0aW9uKGVsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmUtc2VjdGlvbl09XCJzZWxlY3RlZFNlY3Rpb24gPT0gc2VjdGlvbnNbZWxlXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbiA9PSBzZWN0aW9uc1tlbGVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvOTU0MzgzYzE3NDE4NTAzOTI4MDJHcm91cCUyMDE3MDc0ODE4NzkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJpY29uIHRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24gIT0gc2VjdGlvbnNbZWxlXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzg0NjE0NWMxNzQxODUwNTc0ODY0SWNvbiUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJpY29uIHRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtcmVuZGVyLXNlY3Rpb25cIiAqbmdJZj1cIiAhbG9hZGVyICYmICF0YWJTaGlmdExvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllcy1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkU2VjdGlvbk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSBzZWN0aW9uIHRvIGFkZCB0byB5b3VyIHBhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZSBvZiBzZWxlY3RlZFNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj57e2VsZS5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgY3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld1NlY3Rpb24oZWxlLmNvbXBvbmVudElkLGVsZS5zZWN0aW9uVHlwZSwkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWxlPy5pbWFnZTsgZWxzZSBub0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImVsZT8uaW1hZ2VcIiBhbHQ9XCJzZWN0aW9uIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vaW1nLmZyZWVwaWsuY29tL3ByZW1pdW0tdmVjdG9yL2RlZmF1bHQtaW1hZ2UtaWNvbi12ZWN0b3ItbWlzc2luZy1waWN0dXJlLXBhZ2Utd2Vic2l0ZS1kZXNpZ24tbW9iaWxlLWFwcC1uby1waG90by1hdmFpbGFibGVfODc1NDMtMTEwOTMuanBnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwic2VjdGlvbiBpbWFnZVwiIGNsYXNzPVwiaC0zMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtc2lkZXBhbmVsXCIgKm5nSWY9XCJsb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIFsxLDEsMSwxLDEsMSwxLDEsMV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciBhcHBlYXJhbmNlPVwiY2lyY2xlXCIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnOHZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc2NSUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICcxM3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b20nIDogJzEwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yaWVzLXJlbmRlci1zZWN0aW9uXCIgKm5nSWY9XCJsb2FkZXIgfHwgdGFiU2hpZnRMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3JpZXMtaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyMCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICczdmgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGFwcGVhcmFuY2U9XCJjaXJjbGVcIiBbdGhlbWVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnNjAlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiAnMnZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIFsxLDEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+ICAgPG5neC1za2VsZXRvbi1sb2FkZXIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI1JScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiAnMnZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgW3RoZW1lXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA6ICcyNXZoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICc1cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4nOicycHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJvVGFiQ29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWRpdiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy8zNzcwNzZjMTc0MzE1NDgwNzY4M2ltYWdlJTIwJTI4NiUyOS5wbmdcIiBhbHQ9XCJlbXB0eS1pbWdcIiBjbGFzcz1cImVtcHR5LWltZyBcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIENvbWluZyBTb29uXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMSB0ZXh0LWNlbnRlclwiPldvb2YhIFNvbWV0aGluZyBwYXdzb21lIGlzIGNvbWluZyE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy1zdWItdGV4dC0yIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhleSBob29tYW4hIEkganVzdCBzbmlmZmVkIG91dCBzb21ldGhpbmcgc3VwZXIgZXhjaXRpbmcuLi4gYW5kIGl04oCZcyBhbG1vc3QgaGVyZSEgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2NyZWVuPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktZGl2IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lci0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzM3NzA3NmMxNzQzMTU0ODA3NjgzaW1hZ2UlMjAlMjg2JTI5LnBuZ1wiIGFsdD1cImVtcHR5LWltZ1wiIGNsYXNzPVwiZW1wdHktaW1nIFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib29wcy10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgT29wcyEgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvb3BzLXN1Yi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMSB0ZXh0LWNlbnRlclwiPkkgc25pZmZlZCBldmVyeXdoZXJlLCBidXQgSSBjb3VsZG4ndCBmaW5kIHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9vcHMtc3ViLXRleHQtMiB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXliZSB0cnkgYSBkaWZmZXJlbnQgc2VhcmNoPyBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj4gLS0+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cIm1haW4tY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyIGZhZGUtaW5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+QWRkIGEgc2VjdGlvbjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3VidGl0bGVcIj5DaG9vc2UgYSBzZWN0aW9uIOKAlCB5b3UgY2FuIHJlb3JkZXIgb3IgcmVtb3ZlIGl0IGFueSB0aW1lLjwvZGl2PlxyXG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNsb3NlLWJ0blwiIChjbGljayk9XCJkaWFsb2cuY2xvc2UoKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwYXJlbnQtY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgICAgICA8IS0tIFRhYnMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvcC10YWJzLWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmFkZS1pblwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGUgb2YgdGFic1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvcC10YWJcIiAoY2xpY2spPVwib25UYWJTZWxlY3QoZWxlLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS10b3AtdGFiXT1cImVsZS52YWx1ZSA9PSBzZWxlY3RlZFRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ZWxlLnZpZXdWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2VhcmNoIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyLWNvbnRhaW5lciBmYWRlLWluXCIgKm5nSWY9XCJzZWxlY3RlZFRhYiAhPSAnU0FWRUQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyIGQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzMxNDY2MWMxNzQxODQ0MjM0NDQyVmVjdG9yJTIwJTI4MSUyOS5wbmdcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPSdTZWFyY2ggc2VjdGlvbi4uLicgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2hTZWN0aW9ucygpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdCQVNJQydcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTZWFyY2g7IGVsc2UgZW1wdHlTY3JlZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFF1aWNrIEFkZCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInF1aWNrLWFkZC1jb250YWluZXIgZmFkZS1pbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCIhbG9hZGVyICYmICFzZWFyY2hUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWFkZC1sYWJlbFwiPlF1aWNrIGFkZDo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVpY2stYWRkLWNoaXBzIGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBnZXRPYmplY3RLZXlzKHNlY3Rpb25zKTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgPCA2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1aWNrLWNoaXAgc3RhZ2dlci1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2VjdGlvbihjYXRlZ29yeSk7IHRvZ2dsZUNhdGVnb3J5KGNhdGVnb3J5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmUtcXVpY2stY2hpcF09XCJzZWxlY3RlZFNlY3Rpb25OYW1lID09PSBjYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtZW1vamlcIj57e2dldENhdGVnb3J5RW1vamkoY2F0ZWdvcnkpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Rmlyc3RTZWN0aW9uTmFtZShjYXRlZ29yeSl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ09OVEVOVCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWxheW91dCBmYWRlLWluIGQtZmxleFwiICpuZ0lmPVwiIWxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTEVGVCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1zaWRlYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaWNvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj7inKg8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy0xNFwiPkFJIFJlY29tbWVuZGVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgZ2V0T2JqZWN0S2V5cyhzZWN0aW9ucylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDYXRlZ29yeShjYXRlZ29yeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnktaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q2F0ZWdvcnlFbW9qaShjYXRlZ29yeSl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2F0ZWdvcnl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeS1jb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7e3NlY3Rpb25zW2NhdGVnb3J5XT8ubGVuZ3RofX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjYXRlZ29yeS1hcnJvd1wiICpuZ0lmPVwiZXhwYW5kZWRDYXRlZ29yaWVzW2NhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kX2xlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2F0ZWdvcnktYXJyb3dcIiAqbmdJZj1cIiFleHBhbmRlZENhdGVnb3JpZXNbY2F0ZWdvcnldXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfbW9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1pdGVtcyBkLWZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cImV4cGFuZGVkQ2F0ZWdvcmllc1tjYXRlZ29yeV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjIG9mIHNlY3Rpb25zW2NhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDb21wb25lbnQ/LmNvbXBvbmVudElkID09PSBzZWMuY29tcG9uZW50SWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDb21wb25lbnQoc2VjLCBjYXRlZ29yeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlYy5zZWN0aW9uTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250ZW50XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ncm91cC1sYWJlbFwiPnt7c2VsZWN0ZWRTZWN0aW9uTmFtZSB8fCAnU2VjdGlvbnMnfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9ucy1saXN0IGQtZmxleCBmbGV4LWNvbHVtblwiICpuZ0lmPVwic2VsZWN0ZWRTZWN0aW9uICYmIHNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlIG9mIHNlbGVjdGVkU2VjdGlvbjsgbGV0IGkgPSBpbmRleFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2NvbXAtJyArIGVsZS5jb21wb25lbnRJZFwiIGNsYXNzPVwic2VjdGlvbi1jYXJkIHN0YWdnZXItaXRlbVwiIFtzdHlsZS5hbmltYXRpb24tZGVsYXldPVwiaSAqIDQwICsgJ21zJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VjdGlvbi1jYXJkLXNlbGVjdGVkXT1cInNlbGVjdGVkQ29tcG9uZW50Py5jb21wb25lbnRJZCA9PT0gZWxlLmNvbXBvbmVudElkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RDb21wb25lbnRBbmRIaWdobGlnaHQoZWxlKVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQtYmFkZ2VcIiAqbmdJZj1cImVsZS5zZWN0aW9uVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKyB7e2VsZS5zZWN0aW9uVHlwZSB8IHVwcGVyY2FzZX19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHt7ZWxlLnNlY3Rpb25OYW1lIHwgdGl0bGVjYXNlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZT8uaW1hZ2U7IGVsc2Ugbm9JbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZWxlPy5pbWFnZVwiIGFsdD1cInNlY3Rpb24gcHJldmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbWFnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWltYWdlLXBsYWNlaG9sZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmltYWdlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQtaW5mbyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkLW5hbWVcIj57e2VsZS5zZWN0aW9uTmFtZX19PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkLWRlc2NcIiAqbmdJZj1cImVsZS5kZXNjXCI+e3tlbGUuZGVzYyB8IHRpdGxlY2FzZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2FyZC1jaGVjay1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBvbmVudD8uY29tcG9uZW50SWQgPT09IGVsZS5jb21wb25lbnRJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19jaXJjbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlIGZhZGUtaW5cIiAqbmdJZj1cIiFzZWxlY3RlZFNlY3Rpb24gfHwgc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZW1wdHktcGFnZS1pY29uXCI+YXV0b19hd2Vzb21lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS10aXRsZVwiPlNlbGVjdCBhIGNhdGVnb3J5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgYW55IGNhdGVnb3J5IGZyb20gdGhlIGxlZnQgc2lkZWJhciB0byBleHBsb3JlIGFuZCBhZGQgc2VjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWxheW91dCBkLWZsZXhcIiAqbmdJZj1cImxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGViYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcyBvZiBbMSwxLDEsMSwxLDEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyB3aWR0aDogJzkwJScsIGhlaWdodDogJzM2cHgnLCAnYm9yZGVyLXJhZGl1cyc6ICc4cHgnLCAnbWFyZ2luLWJvdHRvbSc6ICc2cHgnIH1cIj48L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHMgb2YgWzEsMSwxLDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgd2lkdGg6ICc0MCUnLCBoZWlnaHQ6ICcyMHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnNHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzE4MHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnOHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+PC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnNjAlJywgaGVpZ2h0OiAnMTZweCcsICdib3JkZXItcmFkaXVzJzogJzRweCcgfVwiPjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ1NBVkVEJ1wiPlxyXG4gICAgICAgICAgICA8IS0tIExvYWRlciBza2VsZXRvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtbGF5b3V0IGQtZmxleFwiICpuZ0lmPVwic2F2ZWRMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGViYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzIG9mIFsxLDEsMSwxLDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyB3aWR0aDogJzkwJScsIGhlaWdodDogJzM2cHgnLCAnYm9yZGVyLXJhZGl1cyc6ICc4cHgnLCAnbWFyZ2luLWJvdHRvbSc6ICc4cHgnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHMgb2YgWzEsMSwxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjEycHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgd2lkdGg6ICc0MCUnLCBoZWlnaHQ6ICcxOHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnNHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMHB4JywgJ2JvcmRlci1yYWRpdXMnOiAnOHB4JywgJ21hcmdpbi1ib3R0b20nOiAnOHB4JyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IHdpZHRoOiAnNjAlJywgaGVpZ2h0OiAnMTRweCcsICdib3JkZXItcmFkaXVzJzogJzRweCcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTG9hZGVkOiBjYXRlZ29yaWVzICsgcmlnaHQgY29tcG9uZW50IGNhcmQgcHJldmlldyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtbGF5b3V0IGZhZGUtaW4gZC1mbGV4XCIgKm5nSWY9XCIhc2F2ZWRMb2FkZXIgJiYgc2F2ZWRDYXRlZ29yeUtleXMubGVuZ3RoID4gMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTEVGVDogY29tcG9uZW50IGNhdGVnb3JpZXMgbGlzdCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LXNpZGViYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtcGFnZXMtbGFiZWxcIj5TYXZlZCBTZWN0aW9uczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdEtleSBvZiBzYXZlZENhdGVnb3J5S2V5c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtcGFnZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRTYXZlZENhdGVnb3J5ID09PSBjYXRLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNhdmVkQ2F0ZWdvcnkoY2F0S2V5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2F2ZWQtcGFnZS1pY29uXCI+YXJ0aWNsZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNhdmVkLXBhZ2UtbmFtZVwiPnt7Y2F0S2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSSUdIVDogc2VsZWN0ZWQgY29tcG9uZW50IHByZXZpZXcgY2FyZCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tZ3JvdXAtbGFiZWxcIj5Db21wb25lbnQgUHJldmlldzwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbnMtbGlzdCBkLWZsZXggZmxleC1jb2x1bW5cIiAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jYXJkIHNlY3Rpb24tY2FyZC1wcmV2aWV3IGZhZGUtaW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlY3Rpb24gdHlwZSBiYWRnZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNhcmQtYmFkZ2VcIiAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS5jb21wb25lbnQ/LnNlY3Rpb25UeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50LnNlY3Rpb25UeXBlLnNwbGl0KCdfJykuam9pbignICcpIHwgdXBwZXJjYXNlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUHJldmlldyBhcmVhIChTaG93IGltYWdlIGlmIHByZXNlbnQsIGZhbGxiYWNrIHRvIHBsYWNlaG9sZGVyKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWltZy1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS5jb21wb25lbnQ/LnN0eWxlcz8uYmFja2dyb3VuZD8uaW1hZ2UgJiYgc2F2ZWRTZWN0aW9uc1tzZWxlY3RlZFNhdmVkQ2F0ZWdvcnldLmNvbXBvbmVudD8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5zaG93SW1hZ2U7IGVsc2Ugc2F2ZWROb0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50LnN0eWxlcy5iYWNrZ3JvdW5kLmltYWdlXCIgYWx0PVwic2VjdGlvbiBwcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzYXZlZE5vSW1hZ2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1wcmV2aWV3LXBsYWNlaG9sZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmxheWVyczwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS5jb21wb25lbnQ/LnNlY3Rpb25UeXBlPy5zcGxpdCgnXycpPy5qb2luKCcgJykgfHwgJ1NhdmVkIENvbXBvbmVudCd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBpbmZvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1uYW1lXCI+e3tzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50Py5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY2FyZC1kZXNjXCIgKm5nSWY9XCJzYXZlZFNlY3Rpb25zW3NlbGVjdGVkU2F2ZWRDYXRlZ29yeV0uY29tcG9uZW50Py5kZXNjXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2F2ZWRTZWN0aW9uc1tzZWxlY3RlZFNhdmVkQ2F0ZWdvcnldLmNvbXBvbmVudC5kZXNjfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlZCBJbiBmb290ZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY2FyZC1mb290ZXJcIiAqbmdJZj1cInNhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS51c2VkSW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlZC1pbi1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ1c2VkLWluLWljb25cIj53ZWI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZWQtaW4tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5Vc2VkIEluICh7e3NhdmVkU2VjdGlvbnNbc2VsZWN0ZWRTYXZlZENhdGVnb3J5XS51c2VkSW4ubGVuZ3RofX0gUGFnZXMpOjwvc3Ryb25nPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2F2ZWRTZWN0aW9uc1tzZWxlY3RlZFNhdmVkQ2F0ZWdvcnldLnVzZWRJbi5qb2luKCcsICcpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEVtcHR5OiBubyBzYXZlZCBkYXRhIGF0IGFsbCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlIGZhZGUtaW5cIiAqbmdJZj1cIiFzYXZlZExvYWRlciAmJiBzYXZlZENhdGVnb3J5S2V5cy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4taWNvbnMtcG5nLmZsYXRpY29uLmNvbS81MTIvNDA3Ni80MDc2NTQ5LnBuZ1wiIGFsdD1cImVtcHR5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktdGl0bGVcIj5ObyBzYXZlZCBzZWN0aW9uczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN1YnRpdGxlXCI+U2VjdGlvbnMgeW91IHNhdmUgZnJvbSBwYWdlcyB3aWxsIGFwcGVhciBoZXJlPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAnQVBQUydcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gRU1QVFkgU0VBUkNIIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTY3JlZW4+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZSBmYWRlLWluIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Nkbi1pY29ucy1wbmcuZmxhdGljb24uY29tLzUxMi83NDg2Lzc0ODY4MDMucG5nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktdGl0bGVcIj5ObyBzZWN0aW9ucyBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN1YnRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVHJ5IHNlYXJjaGluZyBzb21ldGhpbmcgZWxzZSBvciBleHBsb3JlIGNhdGVnb3JpZXNcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRm9vdGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXIgZmFkZS1pblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItaGludFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+aW5mb19vdXRsaW5lPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiICE9PSAnU0FWRUQnXCI+XHJcbiAgICAgICAgICAgICAgICBZb3UgY2FuIHJlYXJyYW5nZSBvciByZW1vdmUgdGhpcyBzZWN0aW9uIGFueSB0aW1lLlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAnU0FWRUQnXCI+XHJcbiAgICAgICAgICAgICAgICBTYXZlZCBzZWN0aW9ucyBhcmUgcmVhZC1vbmx5IHByZXZpZXdzLlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jYW5jZWxcIiAoY2xpY2spPVwiZGlhbG9nLmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkVGFiID09PSAnU0FWRUQnID8gJ0Nsb3NlJyA6ICdDYW5jZWwnIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEJhc2ljIHRhYiBvbmx5IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWFkZFwiICpuZ0lmPVwic2VsZWN0ZWRUYWIgIT09ICdTQVZFRCdcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFzZWxlY3RlZENvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRDb21wb25lbnQgJiYgYWRkTmV3U2VjdGlvbihzZWxlY3RlZENvbXBvbmVudC5jb21wb25lbnRJZCwgc2VsZWN0ZWRDb21wb25lbnQuc2VjdGlvblR5cGUsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICsgQWRkIHNlY3Rpb25cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj4iXX0=