@sunbird-cb/cbp-ai 0.1.83 → 0.1.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/add-designation/add-designation.component.mjs +10 -3
- package/esm2022/lib/components/approval-requests/approval-requests.component.mjs +3 -2
- package/esm2022/lib/components/designation-approval-request-form/designation-approval-request-form.component.mjs +3 -3
- package/esm2022/lib/components/edit-cbp-plan/edit-cbp-plan.component.mjs +53 -43
- package/esm2022/lib/components/publish-request-form/publish-approve-request-form.component.mjs +23 -5
- package/esm2022/lib/components/review-request/review-request.component.mjs +5 -3
- package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +2 -1
- package/esm2022/lib/components/suggest-more-courses/suggest-more-courses.component.mjs +2 -2
- package/esm2022/lib/components/view-course-recommendation/view-course-recommendation.component.mjs +3 -2
- package/fesm2022/sunbird-cb-cbp-ai.mjs +96 -56
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/add-designation/add-designation.component.d.ts.map +1 -1
- package/lib/components/approval-requests/approval-requests.component.d.ts.map +1 -1
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts +1 -0
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts.map +1 -1
- package/lib/components/publish-request-form/publish-approve-request-form.component.d.ts +4 -2
- package/lib/components/publish-request-form/publish-approve-request-form.component.d.ts.map +1 -1
- package/lib/components/review-request/review-request.component.d.ts +1 -1
- package/lib/components/review-request/review-request.component.d.ts.map +1 -1
- package/lib/components/role-mapping-list/role-mapping-list.component.d.ts.map +1 -1
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts +1 -0
- package/lib/components/view-course-recommendation/view-course-recommendation.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.84.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.83.tgz +0 -0
|
@@ -467,12 +467,14 @@ export class EditCbpPlanComponent {
|
|
|
467
467
|
this.editCompetencyIndex = index;
|
|
468
468
|
}
|
|
469
469
|
this.selectedCompetencyType = 'Domain';
|
|
470
|
+
this.cdRef.detectChanges();
|
|
471
|
+
console.log('scrollTop before', this.dialogContent.nativeElement.scrollTop);
|
|
470
472
|
setTimeout(() => {
|
|
471
|
-
this.
|
|
472
|
-
|
|
473
|
-
|
|
473
|
+
this.editSection.nativeElement.scrollIntoView({
|
|
474
|
+
behavior: 'smooth',
|
|
475
|
+
block: 'start'
|
|
474
476
|
});
|
|
475
|
-
}
|
|
477
|
+
});
|
|
476
478
|
}
|
|
477
479
|
cancelUpdate() {
|
|
478
480
|
this.editDomainCompetencyFlag = false;
|
|
@@ -577,6 +579,7 @@ export class EditCbpPlanComponent {
|
|
|
577
579
|
// SEARCH MODE
|
|
578
580
|
// =========================
|
|
579
581
|
if (searchText?.length) {
|
|
582
|
+
console.log('matchedIds--', this.matchedDesignationIds);
|
|
580
583
|
this.masterData.designationFiltered = mapped;
|
|
581
584
|
// IMPORTANT: merge searched result into backup
|
|
582
585
|
const combined = [
|
|
@@ -586,6 +589,7 @@ export class EditCbpPlanComponent {
|
|
|
586
589
|
this.masterData.designationBackup = _.uniqBy(combined, (it) => (it?.name || '').toLowerCase());
|
|
587
590
|
this.masterData.designation =
|
|
588
591
|
this.masterData.designationFiltered.slice(0, this.searchDesignationLoadCount);
|
|
592
|
+
console.log('this.masterData.designation----', this.masterData.designation);
|
|
589
593
|
console.log('Backup after search', this.masterData.designationBackup.find((x) => x.name?.toLowerCase() === 'managing director'));
|
|
590
594
|
return;
|
|
591
595
|
}
|
|
@@ -773,54 +777,57 @@ export class EditCbpPlanComponent {
|
|
|
773
777
|
onDesignationSelectScroll(event) {
|
|
774
778
|
const element = event?.target;
|
|
775
779
|
const reachedBottom = element.scrollTop + element.clientHeight >=
|
|
776
|
-
element.scrollHeight -
|
|
777
|
-
if (!reachedBottom
|
|
780
|
+
element.scrollHeight - 10;
|
|
781
|
+
if (!reachedBottom) {
|
|
778
782
|
return;
|
|
779
783
|
}
|
|
780
|
-
|
|
784
|
+
if (this.isLoadingMoreDesignations) {
|
|
785
|
+
return;
|
|
786
|
+
}
|
|
787
|
+
console.log('=== Scroll Triggered ===');
|
|
788
|
+
console.log('Visible:', this.masterData?.designation?.length);
|
|
789
|
+
console.log('Backup:', this.masterData?.designationBackup?.length);
|
|
790
|
+
console.log('Total:', this.defaultSearchDesignationCount);
|
|
791
|
+
console.log('Offset:', this.designationOffset);
|
|
792
|
+
// =====================
|
|
781
793
|
// SEARCH MODE
|
|
782
|
-
//
|
|
794
|
+
// =====================
|
|
783
795
|
if (this.desigantionFilterEnable) {
|
|
784
|
-
this.isLoadingMoreDesignations = true;
|
|
785
796
|
this.searchDesignationLoadCount += 50;
|
|
786
|
-
|
|
787
|
-
this.masterData.
|
|
788
|
-
|
|
789
|
-
this.checkCurrentDesignationPresent();
|
|
790
|
-
this.isLoadingMoreDesignations = false;
|
|
791
|
-
}, 300);
|
|
797
|
+
this.masterData.designation =
|
|
798
|
+
(this.masterData.designationFiltered || []).slice(0, this.searchDesignationLoadCount);
|
|
799
|
+
this.cdRef.detectChanges();
|
|
792
800
|
return;
|
|
793
801
|
}
|
|
794
|
-
//
|
|
795
|
-
//
|
|
796
|
-
//
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
this.masterData?.designation?.length) {
|
|
800
|
-
this.isLoadingMoreDesignations = true;
|
|
802
|
+
// =====================
|
|
803
|
+
// LOCAL PAGINATION
|
|
804
|
+
// =====================
|
|
805
|
+
if ((this.masterData?.designationBackup || []).length >
|
|
806
|
+
(this.masterData?.designation || []).length) {
|
|
801
807
|
this.designationListLoadCount +=
|
|
802
808
|
this.designationDefaultLoadCount;
|
|
803
|
-
|
|
804
|
-
this.masterData.
|
|
805
|
-
|
|
806
|
-
this.checkCurrentDesignationPresent();
|
|
807
|
-
this.isLoadingMoreDesignations = false;
|
|
808
|
-
}, 300);
|
|
809
|
+
this.masterData.designation =
|
|
810
|
+
this.masterData.designationBackup.slice(0, this.designationListLoadCount);
|
|
811
|
+
this.cdRef.detectChanges();
|
|
809
812
|
return;
|
|
810
813
|
}
|
|
811
|
-
//
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
this.
|
|
821
|
-
|
|
822
|
-
|
|
814
|
+
// =====================
|
|
815
|
+
// API PAGINATION
|
|
816
|
+
// =====================
|
|
817
|
+
const loadedCount = (this.masterData?.designationBackup || []).length;
|
|
818
|
+
if (this.noMoreLegacyDesignations && this.searchText) {
|
|
819
|
+
console.log('No more data');
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
822
|
+
if (this.defaultSearchDesignationCount > 0 &&
|
|
823
|
+
loadedCount >= this.defaultSearchDesignationCount) {
|
|
824
|
+
this.noMoreLegacyDesignations = true;
|
|
825
|
+
console.log('All records loaded');
|
|
826
|
+
return;
|
|
823
827
|
}
|
|
828
|
+
this.designationOffset += this.designationDefaultLoadCount;
|
|
829
|
+
console.log('Loading next page => offset:', this.designationOffset);
|
|
830
|
+
this.getDesignation(undefined, this.designationOffset);
|
|
824
831
|
}
|
|
825
832
|
get searchDesignationControl() {
|
|
826
833
|
return this.cbpForm.get('searchDesignation');
|
|
@@ -842,11 +849,11 @@ export class EditCbpPlanComponent {
|
|
|
842
849
|
}
|
|
843
850
|
}
|
|
844
851
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditCbpPlanComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.SharedService }, { token: i4.MatSnackBar }, { token: i5.HttpClient }, { token: i6.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
845
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EditCbpPlanComponent, selector: "app-edit-cbp-plan", viewQueries: [{ propertyName: "dialogContent", first: true, predicate: ["dialogContent"], descendants: true }, { propertyName: "designationRef", first: true, predicate: ["designation"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"view-cbp-plan\" #dialogContent>\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Edit Role Mapping</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"cbpForm\">\n\n <!-- <div class=\"section-header mt-4\">\n <input type=\"text\" formControlName=\"designation_name\" [value]=\"planData?.designation_name\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n\n\n </div> -->\n\n <mat-form-field appearance=\"outline\" class=\"mt-4 margin-top-s w-full required-select\" style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n <mat-select #designation formControlName=\"designation_name\"\n placeholder=\"Select designation\" (closed)=\"onDesignationDropdownClosed()\"\n panelClass=\"search-panel\" (openedChange)=\"setupScrollListener($event)\"\n >\n\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input type=\"text\" placeholder=\"Search designation\" style=\"width:100%\"\n formControlName=\"searchDesignation\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n <!-- (keyup)=\"designationSearch($event)\" -->\n <div *ngIf=\"searchDesignationControl?.value\" type=\"button\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch($event)\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <!-- Options list -->\n <mat-option [value]=\"designation?.name\" *ngFor=\"let designation of masterData?.designation\">\n {{designation?.name}}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Load More...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\" disabled class=\"no-data-option\">\n\n Designation Not Found.\n\n </mat-option>\n </mat-select>\n <!-- <mat-error class=\"text-xs\"\n *ngIf=\"designationForm?.get('designation_name')?.touched && designationForm?.get('designation_name')?.invalid\">\n Please select at least one designation.\n </mat-error> -->\n </mat-form-field>\n\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"inside-layer\">\n Behavioral Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.behavioral}}\n </div>\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"inside-layer\">\n Functional Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.functional}}\n </div>\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"inside-layer\">\n Domain Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.domain}}\n </div>\n </div>\n </div>\n <div class=\"mt-4 section\">\n <div class=\"sub-heading\">\n <p>Wing/Division</p>\n </div>\n <div class=\"mt-4\">\n <input type=\"text\" formControlName=\"wing_division_section\" [value]=\"planData?.wing_division_section\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width:100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Roles & Responsibilities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"role_responsibilities_text\" rows=\"5\"\n placeholder=\"Roles & Responsibilities\"\n [value]=\"planData?.role_responsibilities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Activities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"activities_text\" rows=\"5\"\n placeholder=\"Activities\" [value]=\"planData?.activities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Competency</p>\n </div>\n <div class=\"enhanced-competency-section mt-2\">\n <!-- Step 1: Select Competency Type -->\n <div class=\"competency-step\">\n <label class=\"step-label\">1. Select Core Competency Type</label>\n <div class=\"competency-dropdown-container\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyType\" placeholder=\"Select Competency Type\"\n (selectionChange)=\"onCompetencyTypeChange($event.value)\">\n <mat-option value=\"Behavioral\">Behavioral</mat-option>\n <mat-option value=\"Functional\">Functional</mat-option>\n <mat-option value=\"Domain\">Domain</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <!-- Step 2: Theme Selection (Behavioral/Functional from JSON, Domain manual) -->\n <div class=\"competency-step\" *ngIf=\"selectedCompetencyType\">\n <label class=\"step-label\">2. Select/Enter Theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown from JSON -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyTheme\" placeholder=\"Search and select theme\"\n (selectionChange)=\"onThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search themes...\" formControlName=\"themeSearch\"\n (input)=\"filterThemes($event.target?.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Theme options -->\n <mat-option *ngFor=\"let theme of filteredThemes\" [value]=\"theme.name\">\n {{theme.name}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredThemes.length === 0 && themeSearchText\" disabled>\n No themes found matching \"{{themeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualThemeInput\" placeholder=\"Enter Theme manually\"\n class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Step 3: Sub-theme Selection -->\n <div class=\"competency-step\" *ngIf=\"selectedTheme || (selectedCompetencyType === 'Domain')\">\n <label class=\"step-label\">3. Select/Enter Sub-theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown based on selected theme -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencySubTheme\"\n placeholder=\"Search and select sub-theme\"\n (selectionChange)=\"onSubThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search sub-themes...\"\n formControlName=\"subThemeSearch\"\n (input)=\"filterSubThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Sub-theme options -->\n <mat-option *ngFor=\"let subTheme of filteredSubThemes\" [value]=\"subTheme\">\n {{subTheme}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredSubThemes.length === 0 && subThemeSearchText\" disabled>\n No sub-themes found matching \"{{subThemeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualSubThemeInput\"\n placeholder=\"Enter Sub-theme manually\" class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Add Button -->\n <div class=\"add-button-section\" *ngIf=\"selectedCompetencyType \">\n <button type=\"button\" *ngIf=\"!editDomainCompetencyFlag\" class=\"add-competency-btn\"\n [disabled]=\"!canAddCompetency()\"\n [ngClass]=\"canAddCompetency() ? 'btn-active' : 'btn-disable'\" (click)=\"addCompetency()\">\n Add Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n (click)=\"updateCompetency()\">\n Update Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n style=\"margin-left: 5px;\" (click)=\"cancelUpdate()\">\n Cancel </button>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Behavioral')?.length\">\n Behavioral Competencies\n </div>\n\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Behavioral')\">\n <span class=\"competency-text-behavioral\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Functional')?.length\">\n Functional Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Functional')\">\n <span class=\"competency-text-functional\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\">Domain Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item domain-pill\" *ngFor=\"let comp of getCompetenciesByType('Domain')\">\n <span class=\"competency-text-domain\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer edit\" (click)=\"editCompetency(comp)\">\n <mat-icon>edit</mat-icon>\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Save\" (click)=\"saveRoleMapping()\" />\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep .legacy-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;gap:10px}.legacy-search-filter{display:none}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:18px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}.edit .mat-icon{height:24px!important;width:24px!important;overflow:visible;vertical-align:middle}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}::ng-deep .filter-section .mat-form-field-appearance-fill .mat-form-field-flex{padding:.5em .75em 0!important}.competency-grid{display:flex;flex-wrap:wrap;gap:12px}.competency-item{flex:0 0 calc(33.333% - 12px);box-sizing:border-box;background-color:#f5f5f5;padding:4px 10px;border-radius:6px;display:flex;justify-content:space-between;align-items:center}.snackbar-success{background-color:#4caf50!important;color:#fff!important;font-weight:500;font-size:14px;border-radius:4px}.enhanced-competency-section{display:flex;flex-direction:column;gap:24px;padding:24px;background:linear-gradient(135deg,#1b4ca105,#1b4ca10f);border-radius:12px;border:1px solid rgba(27,76,161,.15);box-shadow:0 2px 8px #1b4ca114}.competency-step{display:flex;flex-direction:column;gap:12px}.step-label{color:#1b4ca1;font-family:Lato;font-size:15px;font-weight:600;margin-bottom:8px;display:flex;align-items:center}.step-label:before{content:\"\";width:4px;height:16px;background:#1b4ca1;border-radius:2px;margin-right:8px}.competency-dropdown-container,.manual-input-container{width:100%;position:relative}.competency-dropdown{width:100%}.competency-dropdown ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.competency-dropdown ::ng-deep .mat-form-field-flex{padding:0 16px 0 20px;height:48px;align-items:center;transition:all .3s ease;display:flex;justify-content:space-between}.competency-dropdown ::ng-deep .mat-form-field-flex:hover{border-color:#1b4ca1}.competency-dropdown ::ng-deep .mat-form-field-outline,.competency-dropdown ::ng-deep .mat-form-field-outline-start,.competency-dropdown ::ng-deep .mat-form-field-outline-gap,.competency-dropdown ::ng-deep .mat-form-field-outline-end{display:none}.competency-dropdown ::ng-deep .mat-form-field-infix{padding:0;border:none;height:48px;display:flex;align-items:center;flex:1;width:auto}.competency-dropdown ::ng-deep .mat-select{height:100%;display:flex;align-items:center;font-family:Lato;font-size:14px;color:#333;width:100%;flex:1}.competency-dropdown ::ng-deep .mat-select-value{display:flex;align-items:center;height:100%;color:#333;font-weight:400;flex:1;width:100%;justify-content:flex-start}.competency-dropdown ::ng-deep .mat-select-placeholder{color:#00000080;width:100%;display:flex;align-items:center}.competency-dropdown ::ng-deep .mat-select-value-text{width:100%;display:flex;align-items:center;font-weight:400}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper{height:20px;display:flex;align-items:center;margin-left:8px;flex-shrink:0}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper .mat-select-arrow{color:#1b4ca1;border-top-color:#1b4ca1;margin:0}.competency-dropdown ::ng-deep .mat-form-field-label{display:none}.competency-dropdown ::ng-deep .mat-focused .mat-form-field-flex{border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.competency-dropdown ::ng-deep .mat-select-min-line{line-height:normal}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{padding:0}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-wrapper{margin:0;padding:0}.search-option{pointer-events:auto!important;opacity:1!important}.search-option ::ng-deep .mat-option-text{width:100%;padding:0}.search-field{width:100%;margin:0}.search-field ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.search-field ::ng-deep .mat-form-field-flex{height:36px;padding:0 12px;align-items:center}.search-field ::ng-deep .mat-form-field-infix{padding:0;border:none;height:36px;display:flex;align-items:center}.search-field ::ng-deep .mat-form-field-underline,.search-field ::ng-deep .mat-form-field-outline{display:none}.search-field ::ng-deep input{font-family:Lato;font-size:13px;color:#495057}.search-field ::ng-deep input::placeholder{color:#6c757d}::ng-deep .mat-select-panel{background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e0e0e0;max-height:320px;margin-top:4px}::ng-deep .mat-select-panel .mat-option{font-family:Lato;font-size:14px;padding:14px 16px;line-height:1.4;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.05)}::ng-deep .mat-select-panel .mat-option:last-child{border-bottom:none}::ng-deep .mat-select-panel .mat-option:hover{background-color:#1b4ca10f;color:#1b4ca1}::ng-deep .mat-select-panel .mat-option.mat-selected{background-color:#1b4ca11a;color:#1b4ca1;font-weight:500;position:relative}::ng-deep .mat-select-panel .mat-option.mat-selected:after{content:\"\\2713\";position:absolute;right:16px;color:#1b4ca1;font-weight:700}::ng-deep .mat-select-panel .mat-option.search-option{padding:12px;background-color:#f8f9fa;border-bottom:2px solid #e9ecef;position:sticky;top:0;z-index:10}::ng-deep .mat-select-panel .mat-option.search-option:hover{background-color:#f8f9fa}.enhanced-competency-section ::ng-deep mat-select{border-radius:0!important;background-color:transparent!important}.enhanced-competency-section ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.enhanced-competency-section ::ng-deep .mat-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;min-height:auto}.enhanced-competency-section ::ng-deep .mat-form-field-suffix{margin:0;padding:0;display:flex;align-items:center}.manual-input{border-radius:25px;border:2px solid #e0e0e0;padding:12px 16px;width:100%;font-size:14px;font-family:Lato;background:#fff;height:48px;box-sizing:border-box;transition:all .3s ease;box-shadow:0 2px 4px #0000000d}.manual-input::placeholder{color:#00000080;font-family:Lato;font-size:14px}.manual-input:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.manual-input:hover{border-color:#1b4ca1;box-shadow:0 4px 8px #1b4ca11a}.add-button-section{display:flex;justify-content:flex-start;margin-top:20px;padding-top:20px;border-top:2px solid rgba(27,76,161,.1)}.add-competency-btn{border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;border:none;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #0000001a;min-width:140px}.add-competency-btn.btn-active{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff}.add-competency-btn.btn-active:hover{background:linear-gradient(135deg,#164080,#0f2f5f);box-shadow:0 4px 16px #1b4ca14d;transform:translateY(-1px)}.add-competency-btn.btn-active:active{transform:translateY(0);box-shadow:0 2px 8px #1b4ca133}.add-competency-btn.btn-disable{background:#e9ecef;color:#6c757d;cursor:not-allowed;opacity:.7;box-shadow:none;border:1px solid #ccc}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:30px;align-items:center;padding:0 16px;background:#fff}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i13.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
852
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EditCbpPlanComponent, selector: "app-edit-cbp-plan", viewQueries: [{ propertyName: "dialogContent", first: true, predicate: ["dialogContent"], descendants: true }, { propertyName: "designationRef", first: true, predicate: ["designation"], descendants: true, read: ElementRef }, { propertyName: "editSection", first: true, predicate: ["editSection"], descendants: true }], ngImport: i0, template: "<div class=\"view-cbp-plan\" #dialogContent>\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Edit Role Mapping</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"cbpForm\">\n\n <!-- <div class=\"section-header mt-4\">\n <input type=\"text\" formControlName=\"designation_name\" [value]=\"planData?.designation_name\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n\n\n </div> -->\n\n <mat-form-field appearance=\"outline\" class=\"mt-4 margin-top-s w-full required-select\" style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n <mat-select #designation formControlName=\"designation_name\"\n placeholder=\"Select designation\" (closed)=\"onDesignationDropdownClosed()\"\n panelClass=\"search-panel\" (openedChange)=\"setupScrollListener($event)\"\n >\n\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input type=\"text\" placeholder=\"Search designation\" style=\"width:100%\"\n formControlName=\"searchDesignation\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n <!-- (keyup)=\"designationSearch($event)\" -->\n <div *ngIf=\"searchDesignationControl?.value\" type=\"button\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch($event)\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <!-- Options list -->\n <mat-option [value]=\"designation?.name\" *ngFor=\"let designation of masterData?.designation\">\n {{designation?.name}}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Load More...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\" disabled class=\"no-data-option\">\n\n Designation Not Found.\n\n </mat-option>\n \n </mat-select>\n <!-- <mat-error class=\"text-xs\"\n *ngIf=\"designationForm?.get('designation_name')?.touched && designationForm?.get('designation_name')?.invalid\">\n Please select at least one designation.\n </mat-error> -->\n </mat-form-field>\n\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"inside-layer\">\n Behavioral Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.behavioral}}\n </div>\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"inside-layer\">\n Functional Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.functional}}\n </div>\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"inside-layer\">\n Domain Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.domain}}\n </div>\n </div>\n </div>\n <div class=\"mt-4 section\">\n <div class=\"sub-heading\">\n <p>Wing/Division</p>\n </div>\n <div class=\"mt-4\">\n <input type=\"text\" formControlName=\"wing_division_section\" [value]=\"planData?.wing_division_section\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width:100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Roles & Responsibilities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"role_responsibilities_text\" rows=\"5\"\n placeholder=\"Roles & Responsibilities\"\n [value]=\"planData?.role_responsibilities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Activities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"activities_text\" rows=\"5\"\n placeholder=\"Activities\" [value]=\"planData?.activities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Competency</p>\n </div>\n <div #editSection class=\"enhanced-competency-section mt-2\">\n <!-- Step 1: Select Competency Type -->\n <div class=\"competency-step\">\n <label class=\"step-label\">1. Select Core Competency Type</label>\n <div class=\"competency-dropdown-container\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyType\" placeholder=\"Select Competency Type\"\n (selectionChange)=\"onCompetencyTypeChange($event.value)\">\n <mat-option value=\"Behavioral\">Behavioral</mat-option>\n <mat-option value=\"Functional\">Functional</mat-option>\n <mat-option value=\"Domain\">Domain</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <!-- Step 2: Theme Selection (Behavioral/Functional from JSON, Domain manual) -->\n <div class=\"competency-step\" *ngIf=\"selectedCompetencyType\">\n <label class=\"step-label\">2. Select/Enter Theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown from JSON -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyTheme\" placeholder=\"Search and select theme\"\n (selectionChange)=\"onThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search themes...\" formControlName=\"themeSearch\"\n (input)=\"filterThemes($event.target?.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Theme options -->\n <mat-option *ngFor=\"let theme of filteredThemes\" [value]=\"theme.name\">\n {{theme.name}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredThemes.length === 0 && themeSearchText\" disabled>\n No themes found matching \"{{themeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualThemeInput\" placeholder=\"Enter Theme manually\"\n class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Step 3: Sub-theme Selection -->\n <div class=\"competency-step\" *ngIf=\"selectedTheme || (selectedCompetencyType === 'Domain')\">\n <label class=\"step-label\">3. Select/Enter Sub-theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown based on selected theme -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencySubTheme\"\n placeholder=\"Search and select sub-theme\"\n (selectionChange)=\"onSubThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search sub-themes...\"\n formControlName=\"subThemeSearch\"\n (input)=\"filterSubThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Sub-theme options -->\n <mat-option *ngFor=\"let subTheme of filteredSubThemes\" [value]=\"subTheme\">\n {{subTheme}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredSubThemes.length === 0 && subThemeSearchText\" disabled>\n No sub-themes found matching \"{{subThemeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualSubThemeInput\"\n placeholder=\"Enter Sub-theme manually\" class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Add Button -->\n <div class=\"add-button-section\" *ngIf=\"selectedCompetencyType \">\n <button type=\"button\" *ngIf=\"!editDomainCompetencyFlag\" class=\"add-competency-btn\"\n [disabled]=\"!canAddCompetency()\"\n [ngClass]=\"canAddCompetency() ? 'btn-active' : 'btn-disable'\" (click)=\"addCompetency()\">\n Add Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n (click)=\"updateCompetency()\">\n Update Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n style=\"margin-left: 5px;\" (click)=\"cancelUpdate()\">\n Cancel </button>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Behavioral')?.length\">\n Behavioral Competencies\n </div>\n\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Behavioral')\">\n <span class=\"competency-text-behavioral\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Functional')?.length\">\n Functional Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Functional')\">\n <span class=\"competency-text-functional\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\">Domain Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item domain-pill\" *ngFor=\"let comp of getCompetenciesByType('Domain')\">\n <span class=\"competency-text-domain\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer edit\" (click)=\"editCompetency(comp)\">\n <mat-icon>edit</mat-icon>\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Save\" (click)=\"saveRoleMapping()\" />\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep .legacy-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;gap:10px}.legacy-search-filter{display:none}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:18px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}.edit .mat-icon{height:24px!important;width:24px!important;overflow:visible;vertical-align:middle}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}::ng-deep .filter-section .mat-form-field-appearance-fill .mat-form-field-flex{padding:.5em .75em 0!important}.competency-grid{display:flex;flex-wrap:wrap;gap:12px}.competency-item{flex:0 0 calc(33.333% - 12px);box-sizing:border-box;background-color:#f5f5f5;padding:4px 10px;border-radius:6px;display:flex;justify-content:space-between;align-items:center}.snackbar-success{background-color:#4caf50!important;color:#fff!important;font-weight:500;font-size:14px;border-radius:4px}.enhanced-competency-section{display:flex;flex-direction:column;gap:24px;padding:24px;background:linear-gradient(135deg,#1b4ca105,#1b4ca10f);border-radius:12px;border:1px solid rgba(27,76,161,.15);box-shadow:0 2px 8px #1b4ca114}.competency-step{display:flex;flex-direction:column;gap:12px}.step-label{color:#1b4ca1;font-family:Lato;font-size:15px;font-weight:600;margin-bottom:8px;display:flex;align-items:center}.step-label:before{content:\"\";width:4px;height:16px;background:#1b4ca1;border-radius:2px;margin-right:8px}.competency-dropdown-container,.manual-input-container{width:100%;position:relative}.competency-dropdown{width:100%}.competency-dropdown ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.competency-dropdown ::ng-deep .mat-form-field-flex{padding:0 16px 0 20px;height:48px;align-items:center;transition:all .3s ease;display:flex;justify-content:space-between}.competency-dropdown ::ng-deep .mat-form-field-flex:hover{border-color:#1b4ca1}.competency-dropdown ::ng-deep .mat-form-field-outline,.competency-dropdown ::ng-deep .mat-form-field-outline-start,.competency-dropdown ::ng-deep .mat-form-field-outline-gap,.competency-dropdown ::ng-deep .mat-form-field-outline-end{display:none}.competency-dropdown ::ng-deep .mat-form-field-infix{padding:0;border:none;height:48px;display:flex;align-items:center;flex:1;width:auto}.competency-dropdown ::ng-deep .mat-select{height:100%;display:flex;align-items:center;font-family:Lato;font-size:14px;color:#333;width:100%;flex:1}.competency-dropdown ::ng-deep .mat-select-value{display:flex;align-items:center;height:100%;color:#333;font-weight:400;flex:1;width:100%;justify-content:flex-start}.competency-dropdown ::ng-deep .mat-select-placeholder{color:#00000080;width:100%;display:flex;align-items:center}.competency-dropdown ::ng-deep .mat-select-value-text{width:100%;display:flex;align-items:center;font-weight:400}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper{height:20px;display:flex;align-items:center;margin-left:8px;flex-shrink:0}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper .mat-select-arrow{color:#1b4ca1;border-top-color:#1b4ca1;margin:0}.competency-dropdown ::ng-deep .mat-form-field-label{display:none}.competency-dropdown ::ng-deep .mat-focused .mat-form-field-flex{border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.competency-dropdown ::ng-deep .mat-select-min-line{line-height:normal}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{padding:0}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-wrapper{margin:0;padding:0}.search-option{pointer-events:auto!important;opacity:1!important}.search-option ::ng-deep .mat-option-text{width:100%;padding:0}.search-field{width:100%;margin:0}.search-field ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.search-field ::ng-deep .mat-form-field-flex{height:36px;padding:0 12px;align-items:center}.search-field ::ng-deep .mat-form-field-infix{padding:0;border:none;height:36px;display:flex;align-items:center}.search-field ::ng-deep .mat-form-field-underline,.search-field ::ng-deep .mat-form-field-outline{display:none}.search-field ::ng-deep input{font-family:Lato;font-size:13px;color:#495057}.search-field ::ng-deep input::placeholder{color:#6c757d}::ng-deep .mat-select-panel{background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e0e0e0;max-height:320px;margin-top:4px}::ng-deep .mat-select-panel .mat-option{font-family:Lato;font-size:14px;padding:14px 16px;line-height:1.4;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.05)}::ng-deep .mat-select-panel .mat-option:last-child{border-bottom:none}::ng-deep .mat-select-panel .mat-option:hover{background-color:#1b4ca10f;color:#1b4ca1}::ng-deep .mat-select-panel .mat-option.mat-selected{background-color:#1b4ca11a;color:#1b4ca1;font-weight:500;position:relative}::ng-deep .mat-select-panel .mat-option.mat-selected:after{content:\"\\2713\";position:absolute;right:16px;color:#1b4ca1;font-weight:700}::ng-deep .mat-select-panel .mat-option.search-option{padding:12px;background-color:#f8f9fa;border-bottom:2px solid #e9ecef;position:sticky;top:0;z-index:10}::ng-deep .mat-select-panel .mat-option.search-option:hover{background-color:#f8f9fa}.enhanced-competency-section ::ng-deep mat-select{border-radius:0!important;background-color:transparent!important}.enhanced-competency-section ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.enhanced-competency-section ::ng-deep .mat-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;min-height:auto}.enhanced-competency-section ::ng-deep .mat-form-field-suffix{margin:0;padding:0;display:flex;align-items:center}.manual-input{border-radius:25px;border:2px solid #e0e0e0;padding:12px 16px;width:100%;font-size:14px;font-family:Lato;background:#fff;height:48px;box-sizing:border-box;transition:all .3s ease;box-shadow:0 2px 4px #0000000d}.manual-input::placeholder{color:#00000080;font-family:Lato;font-size:14px}.manual-input:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.manual-input:hover{border-color:#1b4ca1;box-shadow:0 4px 8px #1b4ca11a}.add-button-section{display:flex;justify-content:flex-start;margin-top:20px;padding-top:20px;border-top:2px solid rgba(27,76,161,.1)}.add-competency-btn{border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;border:none;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #0000001a;min-width:140px}.add-competency-btn.btn-active{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff}.add-competency-btn.btn-active:hover{background:linear-gradient(135deg,#164080,#0f2f5f);box-shadow:0 4px 16px #1b4ca14d;transform:translateY(-1px)}.add-competency-btn.btn-active:active{transform:translateY(0);box-shadow:0 2px 8px #1b4ca133}.add-competency-btn.btn-disable{background:#e9ecef;color:#6c757d;cursor:not-allowed;opacity:.7;box-shadow:none;border:1px solid #ccc}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:30px;align-items:center;padding:0 16px;background:#fff}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i13.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
846
853
|
}
|
|
847
854
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditCbpPlanComponent, decorators: [{
|
|
848
855
|
type: Component,
|
|
849
|
-
args: [{ selector: 'app-edit-cbp-plan', template: "<div class=\"view-cbp-plan\" #dialogContent>\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Edit Role Mapping</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"cbpForm\">\n\n <!-- <div class=\"section-header mt-4\">\n <input type=\"text\" formControlName=\"designation_name\" [value]=\"planData?.designation_name\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n\n\n </div> -->\n\n <mat-form-field appearance=\"outline\" class=\"mt-4 margin-top-s w-full required-select\" style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n <mat-select #designation formControlName=\"designation_name\"\n placeholder=\"Select designation\" (closed)=\"onDesignationDropdownClosed()\"\n panelClass=\"search-panel\" (openedChange)=\"setupScrollListener($event)\"\n >\n\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input type=\"text\" placeholder=\"Search designation\" style=\"width:100%\"\n formControlName=\"searchDesignation\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n <!-- (keyup)=\"designationSearch($event)\" -->\n <div *ngIf=\"searchDesignationControl?.value\" type=\"button\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch($event)\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <!-- Options list -->\n <mat-option [value]=\"designation?.name\" *ngFor=\"let designation of masterData?.designation\">\n {{designation?.name}}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Load More...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\" disabled class=\"no-data-option\">\n\n Designation Not Found.\n\n </mat-option>\n </mat-select>\n <!-- <mat-error class=\"text-xs\"\n *ngIf=\"designationForm?.get('designation_name')?.touched && designationForm?.get('designation_name')?.invalid\">\n Please select at least one designation.\n </mat-error> -->\n </mat-form-field>\n\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"inside-layer\">\n Behavioral Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.behavioral}}\n </div>\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"inside-layer\">\n Functional Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.functional}}\n </div>\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"inside-layer\">\n Domain Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.domain}}\n </div>\n </div>\n </div>\n <div class=\"mt-4 section\">\n <div class=\"sub-heading\">\n <p>Wing/Division</p>\n </div>\n <div class=\"mt-4\">\n <input type=\"text\" formControlName=\"wing_division_section\" [value]=\"planData?.wing_division_section\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width:100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Roles & Responsibilities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"role_responsibilities_text\" rows=\"5\"\n placeholder=\"Roles & Responsibilities\"\n [value]=\"planData?.role_responsibilities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Activities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"activities_text\" rows=\"5\"\n placeholder=\"Activities\" [value]=\"planData?.activities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Competency</p>\n </div>\n <div class=\"enhanced-competency-section mt-2\">\n <!-- Step 1: Select Competency Type -->\n <div class=\"competency-step\">\n <label class=\"step-label\">1. Select Core Competency Type</label>\n <div class=\"competency-dropdown-container\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyType\" placeholder=\"Select Competency Type\"\n (selectionChange)=\"onCompetencyTypeChange($event.value)\">\n <mat-option value=\"Behavioral\">Behavioral</mat-option>\n <mat-option value=\"Functional\">Functional</mat-option>\n <mat-option value=\"Domain\">Domain</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <!-- Step 2: Theme Selection (Behavioral/Functional from JSON, Domain manual) -->\n <div class=\"competency-step\" *ngIf=\"selectedCompetencyType\">\n <label class=\"step-label\">2. Select/Enter Theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown from JSON -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyTheme\" placeholder=\"Search and select theme\"\n (selectionChange)=\"onThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search themes...\" formControlName=\"themeSearch\"\n (input)=\"filterThemes($event.target?.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Theme options -->\n <mat-option *ngFor=\"let theme of filteredThemes\" [value]=\"theme.name\">\n {{theme.name}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredThemes.length === 0 && themeSearchText\" disabled>\n No themes found matching \"{{themeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualThemeInput\" placeholder=\"Enter Theme manually\"\n class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Step 3: Sub-theme Selection -->\n <div class=\"competency-step\" *ngIf=\"selectedTheme || (selectedCompetencyType === 'Domain')\">\n <label class=\"step-label\">3. Select/Enter Sub-theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown based on selected theme -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencySubTheme\"\n placeholder=\"Search and select sub-theme\"\n (selectionChange)=\"onSubThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search sub-themes...\"\n formControlName=\"subThemeSearch\"\n (input)=\"filterSubThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Sub-theme options -->\n <mat-option *ngFor=\"let subTheme of filteredSubThemes\" [value]=\"subTheme\">\n {{subTheme}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredSubThemes.length === 0 && subThemeSearchText\" disabled>\n No sub-themes found matching \"{{subThemeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualSubThemeInput\"\n placeholder=\"Enter Sub-theme manually\" class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Add Button -->\n <div class=\"add-button-section\" *ngIf=\"selectedCompetencyType \">\n <button type=\"button\" *ngIf=\"!editDomainCompetencyFlag\" class=\"add-competency-btn\"\n [disabled]=\"!canAddCompetency()\"\n [ngClass]=\"canAddCompetency() ? 'btn-active' : 'btn-disable'\" (click)=\"addCompetency()\">\n Add Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n (click)=\"updateCompetency()\">\n Update Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n style=\"margin-left: 5px;\" (click)=\"cancelUpdate()\">\n Cancel </button>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Behavioral')?.length\">\n Behavioral Competencies\n </div>\n\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Behavioral')\">\n <span class=\"competency-text-behavioral\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Functional')?.length\">\n Functional Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Functional')\">\n <span class=\"competency-text-functional\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\">Domain Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item domain-pill\" *ngFor=\"let comp of getCompetenciesByType('Domain')\">\n <span class=\"competency-text-domain\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer edit\" (click)=\"editCompetency(comp)\">\n <mat-icon>edit</mat-icon>\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Save\" (click)=\"saveRoleMapping()\" />\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep .legacy-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;gap:10px}.legacy-search-filter{display:none}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:18px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}.edit .mat-icon{height:24px!important;width:24px!important;overflow:visible;vertical-align:middle}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}::ng-deep .filter-section .mat-form-field-appearance-fill .mat-form-field-flex{padding:.5em .75em 0!important}.competency-grid{display:flex;flex-wrap:wrap;gap:12px}.competency-item{flex:0 0 calc(33.333% - 12px);box-sizing:border-box;background-color:#f5f5f5;padding:4px 10px;border-radius:6px;display:flex;justify-content:space-between;align-items:center}.snackbar-success{background-color:#4caf50!important;color:#fff!important;font-weight:500;font-size:14px;border-radius:4px}.enhanced-competency-section{display:flex;flex-direction:column;gap:24px;padding:24px;background:linear-gradient(135deg,#1b4ca105,#1b4ca10f);border-radius:12px;border:1px solid rgba(27,76,161,.15);box-shadow:0 2px 8px #1b4ca114}.competency-step{display:flex;flex-direction:column;gap:12px}.step-label{color:#1b4ca1;font-family:Lato;font-size:15px;font-weight:600;margin-bottom:8px;display:flex;align-items:center}.step-label:before{content:\"\";width:4px;height:16px;background:#1b4ca1;border-radius:2px;margin-right:8px}.competency-dropdown-container,.manual-input-container{width:100%;position:relative}.competency-dropdown{width:100%}.competency-dropdown ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.competency-dropdown ::ng-deep .mat-form-field-flex{padding:0 16px 0 20px;height:48px;align-items:center;transition:all .3s ease;display:flex;justify-content:space-between}.competency-dropdown ::ng-deep .mat-form-field-flex:hover{border-color:#1b4ca1}.competency-dropdown ::ng-deep .mat-form-field-outline,.competency-dropdown ::ng-deep .mat-form-field-outline-start,.competency-dropdown ::ng-deep .mat-form-field-outline-gap,.competency-dropdown ::ng-deep .mat-form-field-outline-end{display:none}.competency-dropdown ::ng-deep .mat-form-field-infix{padding:0;border:none;height:48px;display:flex;align-items:center;flex:1;width:auto}.competency-dropdown ::ng-deep .mat-select{height:100%;display:flex;align-items:center;font-family:Lato;font-size:14px;color:#333;width:100%;flex:1}.competency-dropdown ::ng-deep .mat-select-value{display:flex;align-items:center;height:100%;color:#333;font-weight:400;flex:1;width:100%;justify-content:flex-start}.competency-dropdown ::ng-deep .mat-select-placeholder{color:#00000080;width:100%;display:flex;align-items:center}.competency-dropdown ::ng-deep .mat-select-value-text{width:100%;display:flex;align-items:center;font-weight:400}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper{height:20px;display:flex;align-items:center;margin-left:8px;flex-shrink:0}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper .mat-select-arrow{color:#1b4ca1;border-top-color:#1b4ca1;margin:0}.competency-dropdown ::ng-deep .mat-form-field-label{display:none}.competency-dropdown ::ng-deep .mat-focused .mat-form-field-flex{border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.competency-dropdown ::ng-deep .mat-select-min-line{line-height:normal}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{padding:0}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-wrapper{margin:0;padding:0}.search-option{pointer-events:auto!important;opacity:1!important}.search-option ::ng-deep .mat-option-text{width:100%;padding:0}.search-field{width:100%;margin:0}.search-field ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.search-field ::ng-deep .mat-form-field-flex{height:36px;padding:0 12px;align-items:center}.search-field ::ng-deep .mat-form-field-infix{padding:0;border:none;height:36px;display:flex;align-items:center}.search-field ::ng-deep .mat-form-field-underline,.search-field ::ng-deep .mat-form-field-outline{display:none}.search-field ::ng-deep input{font-family:Lato;font-size:13px;color:#495057}.search-field ::ng-deep input::placeholder{color:#6c757d}::ng-deep .mat-select-panel{background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e0e0e0;max-height:320px;margin-top:4px}::ng-deep .mat-select-panel .mat-option{font-family:Lato;font-size:14px;padding:14px 16px;line-height:1.4;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.05)}::ng-deep .mat-select-panel .mat-option:last-child{border-bottom:none}::ng-deep .mat-select-panel .mat-option:hover{background-color:#1b4ca10f;color:#1b4ca1}::ng-deep .mat-select-panel .mat-option.mat-selected{background-color:#1b4ca11a;color:#1b4ca1;font-weight:500;position:relative}::ng-deep .mat-select-panel .mat-option.mat-selected:after{content:\"\\2713\";position:absolute;right:16px;color:#1b4ca1;font-weight:700}::ng-deep .mat-select-panel .mat-option.search-option{padding:12px;background-color:#f8f9fa;border-bottom:2px solid #e9ecef;position:sticky;top:0;z-index:10}::ng-deep .mat-select-panel .mat-option.search-option:hover{background-color:#f8f9fa}.enhanced-competency-section ::ng-deep mat-select{border-radius:0!important;background-color:transparent!important}.enhanced-competency-section ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.enhanced-competency-section ::ng-deep .mat-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;min-height:auto}.enhanced-competency-section ::ng-deep .mat-form-field-suffix{margin:0;padding:0;display:flex;align-items:center}.manual-input{border-radius:25px;border:2px solid #e0e0e0;padding:12px 16px;width:100%;font-size:14px;font-family:Lato;background:#fff;height:48px;box-sizing:border-box;transition:all .3s ease;box-shadow:0 2px 4px #0000000d}.manual-input::placeholder{color:#00000080;font-family:Lato;font-size:14px}.manual-input:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.manual-input:hover{border-color:#1b4ca1;box-shadow:0 4px 8px #1b4ca11a}.add-button-section{display:flex;justify-content:flex-start;margin-top:20px;padding-top:20px;border-top:2px solid rgba(27,76,161,.1)}.add-competency-btn{border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;border:none;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #0000001a;min-width:140px}.add-competency-btn.btn-active{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff}.add-competency-btn.btn-active:hover{background:linear-gradient(135deg,#164080,#0f2f5f);box-shadow:0 4px 16px #1b4ca14d;transform:translateY(-1px)}.add-competency-btn.btn-active:active{transform:translateY(0);box-shadow:0 2px 8px #1b4ca133}.add-competency-btn.btn-disable{background:#e9ecef;color:#6c757d;cursor:not-allowed;opacity:.7;box-shadow:none;border:1px solid #ccc}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:30px;align-items:center;padding:0 16px;background:#fff}\n"] }]
|
|
856
|
+
args: [{ selector: 'app-edit-cbp-plan', template: "<div class=\"view-cbp-plan\" #dialogContent>\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Edit Role Mapping</div>\n </div>\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n <div class=\"section-container\" [formGroup]=\"cbpForm\">\n\n <!-- <div class=\"section-header mt-4\">\n <input type=\"text\" formControlName=\"designation_name\" [value]=\"planData?.designation_name\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n\n\n </div> -->\n\n <mat-form-field appearance=\"outline\" class=\"mt-4 margin-top-s w-full required-select\" style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width: 100%;font-size: 14px;font-family: 'Lato';\">\n <mat-select #designation formControlName=\"designation_name\"\n placeholder=\"Select designation\" (closed)=\"onDesignationDropdownClosed()\"\n panelClass=\"search-panel\" (openedChange)=\"setupScrollListener($event)\"\n >\n\n <!-- Sticky search input container -->\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"search-input-wrapper\">\n <input type=\"text\" placeholder=\"Search designation\" style=\"width:100%\"\n formControlName=\"searchDesignation\" class=\"search-input\"\n (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n <!-- (keyup)=\"designationSearch($event)\" -->\n <div *ngIf=\"searchDesignationControl?.value\" type=\"button\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch($event)\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <!-- Options list -->\n <mat-option [value]=\"designation?.name\" *ngFor=\"let designation of masterData?.designation\">\n {{designation?.name}}\n </mat-option>\n <!-- Loading indicator -->\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n Load More...\n </div>\n <!-- No results message -->\n <mat-option *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\" disabled class=\"no-data-option\">\n\n Designation Not Found.\n\n </mat-option>\n \n </mat-select>\n <!-- <mat-error class=\"text-xs\"\n *ngIf=\"designationForm?.get('designation_name')?.touched && designationForm?.get('designation_name')?.invalid\">\n Please select at least one designation.\n </mat-error> -->\n </mat-form-field>\n\n <div class=\"competency-container mt-4\">\n <div class=\"outside-layer-total\">\n <div class=\"inside-layer\">\n Total Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.total}}\n </div>\n </div>\n <div class=\"outside-layer-behavioral\">\n <div class=\"inside-layer\">\n Behavioral Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.behavioral}}\n </div>\n </div>\n <div class=\"outside-layer-functional\">\n <div class=\"inside-layer\">\n Functional Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.functional}}\n </div>\n </div>\n <div class=\"outside-layer-domain\">\n <div class=\"inside-layer\">\n Domain Competencies\n </div>\n <div class=\"count\">\n {{competenciesCount?.domain}}\n </div>\n </div>\n </div>\n <div class=\"mt-4 section\">\n <div class=\"sub-heading\">\n <p>Wing/Division</p>\n </div>\n <div class=\"mt-4\">\n <input type=\"text\" formControlName=\"wing_division_section\" [value]=\"planData?.wing_division_section\"\n style=\"border-radius: 25px; border: 1px solid #ccc; padding: 8px 12px; width:100%;font-size: 14px;font-family: 'Lato';\">\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Roles & Responsibilities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"role_responsibilities_text\" rows=\"5\"\n placeholder=\"Roles & Responsibilities\"\n [value]=\"planData?.role_responsibilities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Activities</p>\n </div>\n <div class=\"mt-4 additional-details\">\n <textarea class=\"custom-textarea\" formControlName=\"activities_text\" rows=\"5\"\n placeholder=\"Activities\" [value]=\"planData?.activities?.join('\\n')\"></textarea>\n </div>\n </div>\n <div class=\"mt-2 section\">\n <div class=\"sub-heading\">\n <p>Competency</p>\n </div>\n <div #editSection class=\"enhanced-competency-section mt-2\">\n <!-- Step 1: Select Competency Type -->\n <div class=\"competency-step\">\n <label class=\"step-label\">1. Select Core Competency Type</label>\n <div class=\"competency-dropdown-container\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyType\" placeholder=\"Select Competency Type\"\n (selectionChange)=\"onCompetencyTypeChange($event.value)\">\n <mat-option value=\"Behavioral\">Behavioral</mat-option>\n <mat-option value=\"Functional\">Functional</mat-option>\n <mat-option value=\"Domain\">Domain</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <!-- Step 2: Theme Selection (Behavioral/Functional from JSON, Domain manual) -->\n <div class=\"competency-step\" *ngIf=\"selectedCompetencyType\">\n <label class=\"step-label\">2. Select/Enter Theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown from JSON -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencyTheme\" placeholder=\"Search and select theme\"\n (selectionChange)=\"onThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search themes...\" formControlName=\"themeSearch\"\n (input)=\"filterThemes($event.target?.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Theme options -->\n <mat-option *ngFor=\"let theme of filteredThemes\" [value]=\"theme.name\">\n {{theme.name}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredThemes.length === 0 && themeSearchText\" disabled>\n No themes found matching \"{{themeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualThemeInput\" placeholder=\"Enter Theme manually\"\n class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Step 3: Sub-theme Selection -->\n <div class=\"competency-step\" *ngIf=\"selectedTheme || (selectedCompetencyType === 'Domain')\">\n <label class=\"step-label\">3. Select/Enter Sub-theme</label>\n\n <!-- For Behavioral and Functional: Searchable Dropdown based on selected theme -->\n <div class=\"competency-dropdown-container\"\n *ngIf=\"selectedCompetencyType === 'Behavioral' || selectedCompetencyType === 'Functional'\">\n <mat-form-field appearance=\"outline\" class=\"competency-dropdown\">\n <mat-select formControlName=\"competencySubTheme\"\n placeholder=\"Search and select sub-theme\"\n (selectionChange)=\"onSubThemeChange($event.value)\">\n <!-- Search input inside dropdown -->\n <mat-option class=\"search-option\" disabled>\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <input matInput placeholder=\"Search sub-themes...\"\n formControlName=\"subThemeSearch\"\n (input)=\"filterSubThemes($event.target.value)\"\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\n </mat-form-field>\n </mat-option>\n\n <!-- Sub-theme options -->\n <mat-option *ngFor=\"let subTheme of filteredSubThemes\" [value]=\"subTheme\">\n {{subTheme}}\n </mat-option>\n\n <!-- No results message -->\n <mat-option *ngIf=\"filteredSubThemes.length === 0 && subThemeSearchText\" disabled>\n No sub-themes found matching \"{{subThemeSearchText}}\"\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- For Domain: Manual input -->\n <div class=\"manual-input-container\" *ngIf=\"selectedCompetencyType === 'Domain'\">\n <input type=\"text\" formControlName=\"manualSubThemeInput\"\n placeholder=\"Enter Sub-theme manually\" class=\"manual-input\" />\n </div>\n </div>\n\n <!-- Add Button -->\n <div class=\"add-button-section\" *ngIf=\"selectedCompetencyType \">\n <button type=\"button\" *ngIf=\"!editDomainCompetencyFlag\" class=\"add-competency-btn\"\n [disabled]=\"!canAddCompetency()\"\n [ngClass]=\"canAddCompetency() ? 'btn-active' : 'btn-disable'\" (click)=\"addCompetency()\">\n Add Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n (click)=\"updateCompetency()\">\n Update Competency\n </button>\n <button type=\"button\" *ngIf=\"editDomainCompetencyFlag\" class=\"add-competency-btn btn-active\"\n style=\"margin-left: 5px;\" (click)=\"cancelUpdate()\">\n Cancel </button>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Behavioral')?.length\">\n Behavioral Competencies\n </div>\n\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item behavioural-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Behavioral')\">\n <span class=\"competency-text-behavioral\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\" *ngIf=\"getCompetenciesByType('Functional')?.length\">\n Functional Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item functional-pill\"\n *ngFor=\"let comp of getCompetenciesByType('Functional')\">\n <span class=\"competency-text-functional\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n <div class=\"mt-4\">\n <div class=\"competency-sub-heading mt-2\">Domain Competencies</div>\n <div class=\"competency-grid mt-2\">\n <div class=\"competency-item domain-pill\" *ngFor=\"let comp of getCompetenciesByType('Domain')\">\n <span class=\"competency-text-domain\">\n {{ comp.theme }} - {{ comp.sub_theme }}\n </span>\n <span class=\"cursor-pointer edit\" (click)=\"editCompetency(comp)\">\n <mat-icon>edit</mat-icon>\n </span>\n <span class=\"cursor-pointer close\" (click)=\"deleteCompetency(comp)\">\n <mat-icon>close</mat-icon>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Save\" (click)=\"saveRoleMapping()\" />\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n</div>", styles: ["@charset \"UTF-8\";.container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}::ng-deep .legacy-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}::ng-deep .mat-select-panel{background-color:#fff!important}::ng-deep .mat-select-panel .mat-option{border-radius:0!important}::ng-deep mat-form-field .mat-form-field-underline{display:none!important}::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;gap:10px}.legacy-search-filter{display:none}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:18px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:2px 8px;justify-content:center;align-items:center;gap:10px;border-radius:8px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;font-weight:700;flex-shrink:0}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 24px;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-text-behavioral{color:#654321;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-functional{color:#b01669;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-text-domain{color:#301934;font-family:Lato;font-size:14px;font-style:normal;line-height:normal;font-weight:550}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}.edit .mat-icon{height:24px!important;width:24px!important;overflow:visible;vertical-align:middle}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}::ng-deep .filter-section .mat-form-field-appearance-fill .mat-form-field-flex{padding:.5em .75em 0!important}.competency-grid{display:flex;flex-wrap:wrap;gap:12px}.competency-item{flex:0 0 calc(33.333% - 12px);box-sizing:border-box;background-color:#f5f5f5;padding:4px 10px;border-radius:6px;display:flex;justify-content:space-between;align-items:center}.snackbar-success{background-color:#4caf50!important;color:#fff!important;font-weight:500;font-size:14px;border-radius:4px}.enhanced-competency-section{display:flex;flex-direction:column;gap:24px;padding:24px;background:linear-gradient(135deg,#1b4ca105,#1b4ca10f);border-radius:12px;border:1px solid rgba(27,76,161,.15);box-shadow:0 2px 8px #1b4ca114}.competency-step{display:flex;flex-direction:column;gap:12px}.step-label{color:#1b4ca1;font-family:Lato;font-size:15px;font-weight:600;margin-bottom:8px;display:flex;align-items:center}.step-label:before{content:\"\";width:4px;height:16px;background:#1b4ca1;border-radius:2px;margin-right:8px}.competency-dropdown-container,.manual-input-container{width:100%;position:relative}.competency-dropdown{width:100%}.competency-dropdown ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.competency-dropdown ::ng-deep .mat-form-field-flex{padding:0 16px 0 20px;height:48px;align-items:center;transition:all .3s ease;display:flex;justify-content:space-between}.competency-dropdown ::ng-deep .mat-form-field-flex:hover{border-color:#1b4ca1}.competency-dropdown ::ng-deep .mat-form-field-outline,.competency-dropdown ::ng-deep .mat-form-field-outline-start,.competency-dropdown ::ng-deep .mat-form-field-outline-gap,.competency-dropdown ::ng-deep .mat-form-field-outline-end{display:none}.competency-dropdown ::ng-deep .mat-form-field-infix{padding:0;border:none;height:48px;display:flex;align-items:center;flex:1;width:auto}.competency-dropdown ::ng-deep .mat-select{height:100%;display:flex;align-items:center;font-family:Lato;font-size:14px;color:#333;width:100%;flex:1}.competency-dropdown ::ng-deep .mat-select-value{display:flex;align-items:center;height:100%;color:#333;font-weight:400;flex:1;width:100%;justify-content:flex-start}.competency-dropdown ::ng-deep .mat-select-placeholder{color:#00000080;width:100%;display:flex;align-items:center}.competency-dropdown ::ng-deep .mat-select-value-text{width:100%;display:flex;align-items:center;font-weight:400}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper{height:20px;display:flex;align-items:center;margin-left:8px;flex-shrink:0}.competency-dropdown ::ng-deep .mat-select-arrow-wrapper .mat-select-arrow{color:#1b4ca1;border-top-color:#1b4ca1;margin:0}.competency-dropdown ::ng-deep .mat-form-field-label{display:none}.competency-dropdown ::ng-deep .mat-focused .mat-form-field-flex{border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.competency-dropdown ::ng-deep .mat-select-min-line{line-height:normal}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix{padding:0}.competency-dropdown ::ng-deep .mat-form-field-appearance-outline .mat-form-field-wrapper{margin:0;padding:0}.search-option{pointer-events:auto!important;opacity:1!important}.search-option ::ng-deep .mat-option-text{width:100%;padding:0}.search-field{width:100%;margin:0}.search-field ::ng-deep .mat-form-field-wrapper{padding:0;margin:0}.search-field ::ng-deep .mat-form-field-flex{height:36px;padding:0 12px;align-items:center}.search-field ::ng-deep .mat-form-field-infix{padding:0;border:none;height:36px;display:flex;align-items:center}.search-field ::ng-deep .mat-form-field-underline,.search-field ::ng-deep .mat-form-field-outline{display:none}.search-field ::ng-deep input{font-family:Lato;font-size:13px;color:#495057}.search-field ::ng-deep input::placeholder{color:#6c757d}::ng-deep .mat-select-panel{background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e0e0e0;max-height:320px;margin-top:4px}::ng-deep .mat-select-panel .mat-option{font-family:Lato;font-size:14px;padding:14px 16px;line-height:1.4;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.05)}::ng-deep .mat-select-panel .mat-option:last-child{border-bottom:none}::ng-deep .mat-select-panel .mat-option:hover{background-color:#1b4ca10f;color:#1b4ca1}::ng-deep .mat-select-panel .mat-option.mat-selected{background-color:#1b4ca11a;color:#1b4ca1;font-weight:500;position:relative}::ng-deep .mat-select-panel .mat-option.mat-selected:after{content:\"\\2713\";position:absolute;right:16px;color:#1b4ca1;font-weight:700}::ng-deep .mat-select-panel .mat-option.search-option{padding:12px;background-color:#f8f9fa;border-bottom:2px solid #e9ecef;position:sticky;top:0;z-index:10}::ng-deep .mat-select-panel .mat-option.search-option:hover{background-color:#f8f9fa}.enhanced-competency-section ::ng-deep mat-select{border-radius:0!important;background-color:transparent!important}.enhanced-competency-section ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}.enhanced-competency-section ::ng-deep .mat-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;min-height:auto}.enhanced-competency-section ::ng-deep .mat-form-field-suffix{margin:0;padding:0;display:flex;align-items:center}.manual-input{border-radius:25px;border:2px solid #e0e0e0;padding:12px 16px;width:100%;font-size:14px;font-family:Lato;background:#fff;height:48px;box-sizing:border-box;transition:all .3s ease;box-shadow:0 2px 4px #0000000d}.manual-input::placeholder{color:#00000080;font-family:Lato;font-size:14px}.manual-input:focus{outline:none;border-color:#1b4ca1;box-shadow:0 0 0 3px #1b4ca11a}.manual-input:hover{border-color:#1b4ca1;box-shadow:0 4px 8px #1b4ca11a}.add-button-section{display:flex;justify-content:flex-start;margin-top:20px;padding-top:20px;border-top:2px solid rgba(27,76,161,.1)}.add-competency-btn{border-radius:25px;padding:12px 24px;font-family:Lato;font-size:14px;font-weight:600;border:none;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #0000001a;min-width:140px}.add-competency-btn.btn-active{background:linear-gradient(135deg,#1b4ca1,#164080);color:#fff}.add-competency-btn.btn-active:hover{background:linear-gradient(135deg,#164080,#0f2f5f);box-shadow:0 4px 16px #1b4ca14d;transform:translateY(-1px)}.add-competency-btn.btn-active:active{transform:translateY(0);box-shadow:0 2px 8px #1b4ca133}.add-competency-btn.btn-disable{background:#e9ecef;color:#6c757d;cursor:not-allowed;opacity:.7;box-shadow:none;border:1px solid #ccc}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:30px;align-items:center;padding:0 16px;background:#fff}\n"] }]
|
|
850
857
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
851
858
|
type: Inject,
|
|
852
859
|
args: [MAT_DIALOG_DATA]
|
|
@@ -856,5 +863,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
856
863
|
}], designationRef: [{
|
|
857
864
|
type: ViewChild,
|
|
858
865
|
args: ['designation', { read: ElementRef }]
|
|
866
|
+
}], editSection: [{
|
|
867
|
+
type: ViewChild,
|
|
868
|
+
args: ['editSection']
|
|
859
869
|
}] } });
|
|
860
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFROUIsTUFBTSxPQUFPLG9CQUFvQjtJQStDL0IsWUFDUyxTQUE2QyxFQUNwQixJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUNyQixJQUFnQixFQUNqQixLQUFxQjtRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxD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MkIsQ0FBQztRQUNqRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBRVQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDbEMsdUJBQXVCLENBQ1QsQ0FBQztRQUVqQixJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsUUFBUSxFQUNSLElBQUksQ0FBQyw4QkFBOEIsQ0FDcEMsQ0FBQztTQUNIO0lBQ0gsQ0FBQzsrR0E1bUNVLG9CQUFvQiw4Q0FpRHJCLGVBQWU7bUdBakRkLG9CQUFvQixvUEFxQ0csVUFBVSw2QkNuRDlDLDY5aUJBOFNNOzs0RkRoU08sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBcUQxQixNQUFNOzJCQUFDLGVBQWU7a05BYkcsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNzQixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcydcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZWRpdC1jYnAtcGxhbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRDYnBQbGFuQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHNlbGVjdGVkVmFsdWUgPSAnJ1xuICBzZWFyY2hUZXh0ID0gJydcbiAgcGxhbkRhdGE6IGFueVxuICBjb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9XG4gIGNicEZvcm06IEZvcm1Hcm91cDtcbiAgbG9hZGluZyA9IGZhbHNlXG5cbiAgLy8gRW5oYW5jZWQgY29tcGV0ZW5jeSBzZWxlY3Rpb24gcHJvcGVydGllc1xuICBjb21wZXRlbmNpZXNEYXRhOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVUaGVtZXM6IGFueVtdID0gW107XG4gIGF2YWlsYWJsZVN1YlRoZW1lczogYW55W10gPSBbXTtcbiAgZmlsdGVyZWRUaGVtZXM6IGFueVtdID0gW107XG4gIGZpbHRlcmVkU3ViVGhlbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZENvbXBldGVuY3lUeXBlID0gJyc7XG4gIHNlbGVjdGVkVGhlbWUgPSAnJztcbiAgc2VsZWN0ZWRTdWJUaGVtZSA9ICcnO1xuICBtYW51YWxUaGVtZSA9ICcnO1xuICBtYW51YWxTdWJUaGVtZSA9ICcnO1xuICB0aGVtZVNlYXJjaFRleHQgPSAnJztcbiAgc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gIGVkaXREb21haW5Db21wZXRlbmN5RmxhZyA9IGZhbHNlXG4gIGVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICBvcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycjogYW55ID0gW11cbiAgZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZVxuICBpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gIGRlc2lnbmF0aW9uT2Zmc2V0ID0gMFxuICBvZGNzRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IDUwXG4gIGRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudCA9IDUwXG4gIG5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gIGRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnXG4gIGRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICBzY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2VcbiAgQFZpZXdDaGlsZCgnZGlhbG9nQ29udGVudCcpIGRpYWxvZ0NvbnRlbnQhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkZXNpZ25hdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkZXNpZ25hdGlvblJlZj86IEVsZW1lbnRSZWZcbiAgbWFzdGVyRGF0YTogYW55ID0ge31cbiAgcG9ydGFsRGF0YTogYW55XG4gIGFjdGl2ZVJvd0VsZW1lbnQ6IGFueVxuICByZXF1ZXN0RGF0YTogYW55XG4gIHJlcXVlc3RSb3dEYXRhOiBhbnlcbiAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbEJvdW5kID1cbiAgICB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwuYmluZCh0aGlzKTtcbiAgc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MFxuICBtYXRjaGVkRGVzaWduYXRpb25JZHMgPSBbXVxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RWRpdENicFBsYW5Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhPy5lbGVtZW50XG4gICAgICB0aGlzLnJlcXVlc3RSb3dEYXRhID0gZGF0YT8ucmVxdWVzdERhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRhdGE/LmZyb21MaWJyYXJ5KSB7XG4gICAgICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhPy5lbGVtZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBkYXRhOicsIHRoaXMucGxhbkRhdGEpO1xuICAgIC8vIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoY29tcGV0ZW5jaWVzOmFueSk9PntcbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ3RvdGFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50Wyd0b3RhbCddICsgMSBcbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnQmVoYXZpb3JhbCcpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnYmVoYXZpb3JhbCddICsxXG4gICAgLy8gICB9XG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0Z1bmN0aW9uYWwnKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2Z1bmN0aW9uYWwnXSArMVxuICAgIC8vICAgfVxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2RvbWFpbiddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZG9tYWluJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyB9KVxuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZygndGhpcy5kYXRhPy5tYXRjaGVkX3JvbGVfbWFwcGluZ3MnLCB0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncylcbiAgICB0aGlzLm1hdGNoZWREZXNpZ25hdGlvbklkcyA9IHRoaXMuZGF0YT8ubWF0Y2hlZF9yb2xlX21hcHBpbmdzPy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWdvdF9kZXNpZ25hdGlvbl9pZCkgfHwgW11cbiAgICB0aGlzLmxvYWRDb21wZXRlbmNpZXNEYXRhKCk7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIGlmIChcbiAgdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSAmJlxuICAhdGhpcy5wbGFuRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZFxuKSB7XG4gIHRoaXMuZ2V0RGVzaWduYXRpb24odGhpcy5wbGFuRGF0YS5kZXNpZ25hdGlvbl9uYW1lLCAwKTtcbn1cbiAgICBjb25zdCBzZWFyY2hDb250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcblxuICAgIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHQ7XG5cbiAgICAgICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgICAgICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgICAgICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMCk7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuXG4gICAgY29uc29sZS5sb2coJ3JlcXVlc3RJZCcsIHJlcXVlc3RJZClcbiAgfVxuXG4gIGxvYWRDb21wZXRlbmNpZXNEYXRhKCkge1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRDb21wZXRlbmN5SnNvbigpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0RhdGEgPSBkYXRhO1xuICAgICAgICBjb25zb2xlLmxvZygnQ29tcGV0ZW5jaWVzIGRhdGEgbG9hZGVkOicsIHRoaXMuY29tcGV0ZW5jaWVzRGF0YSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNvbXBldGVuY2llcyBkYXRhOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKSB7XG4gICAgY29uc3QgY29tcHMgPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlO1xuICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfTtcbiAgICBjb21wcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudC50b3RhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3JhbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuYmVoYXZpb3JhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZnVuY3Rpb25hbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuZnVuY3Rpb25hbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZG9tYWluJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5kb21haW4rKztcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuY2JwRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW3RoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgd2luZ19kaXZpc2lvbl9zZWN0aW9uOiBbdGhpcy5wbGFuRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0OiBbdGhpcy5wbGFuRGF0YT8ucm9sZV9yZXNwb25zaWJpbGl0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBhY3Rpdml0aWVzX3RleHQ6IFt0aGlzLnBsYW5EYXRhPy5hY3Rpdml0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBjb21wZXRlbmN5U2VhcmNoVGV4dDogWycnXSxcbiAgICAgIGNvbXBldGVuY3lUeXBlOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVRoZW1lOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiBbJyddLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogWycnXSxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6IFsnJ10sXG4gICAgICB0aGVtZVNlYXJjaDogWycnXSxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiBbJyddLFxuICAgICAgY29tcGV0ZW5jaWVzOiB0aGlzLmZiLmFycmF5KHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcyB8fCBbXSksIC8vIG9wdGlvbmFsIGN1c3RvbWl6YXRpb24sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IFt0aGlzLnBsYW5EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnXVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10pIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG5cbiAgZ2V0IHJvbGVSZXNwb25zaWJpbGl0aWVzKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuY2JwRm9ybS5nZXQoJ3JvbGVfcmVzcG9uc2liaWxpdGllcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG5cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuXG4gIH1cblxuICBnZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSB8fCBbXSkuZmlsdGVyKGMgPT4gYy50eXBlID09PSB0eXBlKTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBzYXZlUm9sZU1hcHBpbmcoKSB7XG4gICAgY29uc29sZS5sb2coXCJzYXZlZCBmdW5jdGlvbiBjYWxsZWQuLi5cIilcbiAgICBpZiAodGhpcy5jYnBGb3JtLmludmFsaWQpIHJldHVybjtcblxuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5jYnBGb3JtLnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdTdWJtaXR0ZWQgRGF0YTonLCBmb3JtRGF0YSk7XG4gICAgbGV0IGNicFBsYW5EYXRhOiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqO1xuICAgIGNvbnNvbGUubG9nKCdjYnBQbGFuRGF0YScsIGNicFBsYW5EYXRhKVxuICAgIGNvbnNvbGUubG9nKFxuICAnQmFja3VwIGVudHJ5OicsXG4gIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5maW5kKFxuICAgICh4OiBhbnkpID0+XG4gICAgICB4Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lPy50b0xvd2VyQ2FzZSgpXG4gIClcbik7XG5cbmNvbnNvbGUubG9nKFxuICAnVmlzaWJsZSBlbnRyeTonLFxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24uZmluZChcbiAgICAoeDogYW55KSA9PlxuICAgICAgeC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgZm9ybURhdGEuZGVzaWduYXRpb25fbmFtZT8udG9Mb3dlckNhc2UoKVxuICApXG4pO1xuICAgIGNvbnN0IHJvbGVSZXNwb25zaWJpbGl0aWVzQXJyYXkgPSB0aGlzLmNicEZvcm0udmFsdWUucm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lKTtcbiAgICBjb25zdCBhY3Rpdml0aWVzID0gdGhpcy5jYnBGb3JtLnZhbHVlLmFjdGl2aXRpZXNfdGV4dFxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKVxuICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICBsZXQgcmVxID1cbiAgICB7XG4gICAgICBcInNlY3Rvcl9uYW1lXCI6IGNicFBsYW5EYXRhPy5zZWN0b3JzPy5qb2luKFwiLFwiKSxcbiAgICAgIFwiaW5zdHJ1Y3Rpb25cIjogY2JwUGxhbkRhdGE/Lmluc3RydWN0aW9uID8gY2JwUGxhbkRhdGEuaW5zdHJ1Y3Rpb24gOiAnJyxcbiAgICAgIFwid2luZ19kaXZpc2lvbl9zZWN0aW9uXCI6IGZvcm1EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb24sXG4gICAgICBcInJvbGVfcmVzcG9uc2liaWxpdGllc1wiOiByb2xlUmVzcG9uc2liaWxpdGllc0FycmF5LFxuICAgICAgXCJhY3Rpdml0aWVzXCI6IGFjdGl2aXRpZXMsXG4gICAgICBcImNvbXBldGVuY2llc1wiOiBmb3JtRGF0YS5jb21wZXRlbmNpZXNcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ21hc3RlckRhdGE/LmRlc2lnbmF0aW9uJywgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbilcblxuICAgIGlmIChmb3JtRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZCkge1xuICAgICAgcmVxW1wiaWdvdF9kZXNpZ25hdGlvbl9pZFwiXSA9IGZvcm1EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnLFxuICAgICAgICByZXFbXCJkZXNpZ25hdGlvbl9uYW1lXCJdID0gZm9ybURhdGE/LmRlc2lnbmF0aW9uX25hbWUgPyBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lIDogJydcbiAgICB9IGVsc2Uge1xuICAgICAgXG4gICAgICBjb25zb2xlLmxvZygnbWFzdGVyRGF0YT8uZGVzaWduYXRpb24nLCB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uKVxuXG4gICAgICByZXFbXCJkZXNpZ25hdGlvbl9uYW1lXCJdID0gZm9ybURhdGE/LmRlc2lnbmF0aW9uX25hbWUgPyBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lIDogJydcbiAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICdTZWFyY2hpbmcgaW4gYmFja3VwOicsXG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuZmluZChcbiAgICAgICAgKHg6IGFueSkgPT5cbiAgICAgICAgICB4Lm5hbWU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgIGZvcm1EYXRhLmRlc2lnbmF0aW9uX25hbWU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uPy5maW5kKFxuICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgIGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1EYXRhPy5kZXNpZ25hdGlvbl9uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuY29uc3QgYmFja3VwRGVzaWduYXRpb24gPVxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuZmluZChcbiAgICAoeDogYW55KSA9PlxuICAgICAgeC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgZm9ybURhdGEuZGVzaWduYXRpb25fbmFtZT8udG9Mb3dlckNhc2UoKVxuICApO1xuXG5jb25zb2xlLmxvZygnYmFja3VwRGVzaWduYXRpb24nLCBiYWNrdXBEZXNpZ25hdGlvbik7XG4gICAgICByZXFbXCJpZ290X2Rlc2lnbmF0aW9uX2lkXCJdID0gc2VsZWN0ZWREZXNpZ25hdGlvbj8uaWdvdF9kZXNpZ25hdGlvbl9pZCB8fCAnJztcbmNvbnNvbGUubG9nKCdkZXNpZ25hdGlvbl9uYW1lIDEyMyAnLCBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lKTtcbmNvbnNvbGUubG9nKCdzZWxlY3RlZERlc2lnbmF0aW9uIDEyMycsIHNlbGVjdGVkRGVzaWduYXRpb24pO1xuY29uc29sZS5sb2coJ2lnb3RfZGVzaWduYXRpb25faWQgMTIzJywgcmVxWydpZ290X2Rlc2lnbmF0aW9uX2lkJ10pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkgeyBcbiAgICAgIHJlcVsncmVxdWVzdF9pZCddID0gdGhpcy5yZXF1ZXN0Um93RGF0YT8uaWRcbiAgICAgIHJlcVsnaXRlbV9pZCddID0gdGhpcy5wbGFuRGF0YT8uaWRcbiAgICB9XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JvbGUgTWFwcGluZyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIC8vIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxGb3JtKCkge1xuICAgIC8vIE1hcmsgYWxsIGNvbnRyb2xzIGFzIHByaXN0aW5lIGFuZCB1bnRvdWNoZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmFsdWVzXG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgIC8vIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUgPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jaWVzQXJyYXknLHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgLy8gQWxzbywgaWYgeW91IHdhbnQgdG8gbWFyayBhbGwgY2hpbGQgY29udHJvbHMgKEZvcm1Db250cm9scyAvIEZvcm1BcnJheXMgLyBGb3JtR3JvdXBzKSBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkXG4gICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQodGhpcy5jYnBGb3JtKTtcbiAgICAvLyBpZih0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPiAtMSkge1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3R5cGUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddXG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXVxuICAgIC8vIH1cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSkge1xuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChjb250cm9sKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjb21wZXRlbmNpZXNBcnJheSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdjb21wZXRlbmNpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICAvLyBSZXNldCBmb3JtIGNvbnRyb2xzXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVRoZW1lOiAnJyxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiAnJyxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6ICcnLFxuICAgICAgdGhlbWVTZWFyY2g6ICcnLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6ICcnXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgICAgLy8gTG9hZCB0aGVtZXMgZnJvbSBKU09OIGZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsXG4gICAgICBjb25zdCBjb21wZXRlbmN5Q2F0ZWdvcnkgPSB0aGlzLmNvbXBldGVuY2llc0RhdGEuZmluZChjYXQgPT5cbiAgICAgICAgY2F0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdHlwZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICh0eXBlID09PSAnQmVoYXZpb3JhbCcgJiYgY2F0Lm5hbWUgPT09ICdCZWhhdmlvdXJhbCcpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29tcGV0ZW5jeUNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gY29tcGV0ZW5jeUNhdGVnb3J5LmNvbXBldGVuY3lfdGhlbWUgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVUaGVtZXNdO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgRG9tYWluLCBubyB0aGVtZXMgYXJlIGxvYWRlZCAtIHVzZXIgd2lsbCBlbnRlciBtYW51YWxseVxuICB9XG5cbiAgb25UaGVtZUNoYW5nZSh0aGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9IHRoZW1lTmFtZTtcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgdGhlbWUgYW5kIGxvYWQgaXRzIHN1Yi10aGVtZXNcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1lT2JqID0gdGhpcy5hdmFpbGFibGVUaGVtZXMuZmluZCh0aGVtZSA9PiB0aGVtZS5uYW1lID09PSB0aGVtZU5hbWUpO1xuICAgIGlmIChzZWxlY3RlZFRoZW1lT2JqKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IHNlbGVjdGVkVGhlbWVPYmouY29tcGV0ZW5jeV9zdWJfdGhlbWUgfHwgW107XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9XG4gIH1cblxuICBvblN1YlRoZW1lQ2hhbmdlKHN1YlRoZW1lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lO1xuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgQmVoYXZpb3JhbC9GdW5jdGlvbmFsLCB1c2UgZHJvcGRvd24gc2VsZWN0aW9uc1xuICAgICAgdGhlbWUgPSB0aGlzLnNlbGVjdGVkVGhlbWU7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuc2VsZWN0ZWRTdWJUaGVtZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZS5zb21lKGMgPT5cbiAgICAgICAgYy50aGVtZSA9PT0gdGhlbWUgJiYgYy5zdWJfdGhlbWUgPT09IHN1YlRoZW1lICYmIGMudHlwZSA9PT0gdHlwZVxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG5cbiAgcmVzZXRDb21wZXRlbmN5Rm9ybSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gW107XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnJyxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbHRlcih0aGVtZSA9PlxuICAgICAgICB0aGVtZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTdWJUaGVtZXMoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgIGlmICghc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVTdWJUaGVtZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMuZmlsdGVyKHN1YlRoZW1lID0+XG4gICAgICAgIHN1YlRoZW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjYW5BZGRDb21wZXRlbmN5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJykge1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgY29uc3Qgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgcmV0dXJuICEhKHRoZW1lICYmIHN1YlRoZW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICEhKHRoaXMuc2VsZWN0ZWRUaGVtZSAmJiB0aGlzLnNlbGVjdGVkU3ViVGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbXBldGVuY3koY29tcCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wudmFsdWUudGhlbWUgPT09IGNvbXAudGhlbWUgJiYgY29udHJvbC52YWx1ZS50eXBlID09PSBjb21wLnR5cGVcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZWRpdENvbXBldGVuY3koY29tcCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gdHJ1ZVxuICAgIHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA9IC0xXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVR5cGU6ICdEb21haW4nLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogY29tcD8udGhlbWUsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBjb21wPy5zdWJfdGhlbWVcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuZmluZEluZGV4KGMgPT5cbiAgICAgIGMudGhlbWUgPT09IGNvbXA/LnRoZW1lICYmXG4gICAgICBjLnN1Yl90aGVtZSA9PT0gY29tcD8uc3ViX3RoZW1lICYmXG4gICAgICBjLnR5cGUgPT09IFwiRG9tYWluXCJcbiAgICApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSBpbmRleFxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfSwgNTAwKVxuICB9XG5cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gZmFsc2VcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpXG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5KCkge1xuICAgIGxldCB0eXBlID0gdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlO1xuICAgIGxldCB0aGVtZSA9ICcnO1xuICAgIGxldCBzdWJUaGVtZSA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgICAvLyBGb3IgRG9tYWluLCB1c2UgbWFudWFsIGlucHV0XG4gICAgICB0aGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxTdWJUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlKSlcbiAgICB9XG4gICAgY29uc29sZS5sb2coJyB0aGlzLmNvbXBldGVuY2llc0FycmF5JywgdGhpcy5jb21wZXRlbmNpZXNBcnJheSlcbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4LS0nLCB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXgpXG4gICAgICBpZiAodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0eXBlXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoZW1lXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ10gPSBzdWJUaGVtZVxuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWV4aXN0cykge1xuICAgICAgLy8gICBjb25zdCBuZXdDb21wID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAvLyAgICAgdHlwZTogW3R5cGVdLFxuICAgICAgLy8gICAgIHRoZW1lOiBbdGhlbWVdLFxuICAgICAgLy8gICAgIHN1Yl90aGVtZTogW3N1YlRoZW1lXVxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5wdXNoKG5ld0NvbXApO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBDbGVhciBpbnB1dCBmaWVsZHMgYWZ0ZXIgYWRkaW5nXG4gICAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyJywgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycilcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7IGNvbXBldGVuY2llczogWy4uLmN1cnJlbnRWYWx1ZXNdIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSk7XG4gIH1cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZGVidWcgaG9va3NcbiAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgY29uc3QgcmVxT2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSA/IG9mZnNldCA6IHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICBsZXQgcmVxTGltaXQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHJlcUxpbWl0ID4gMCA/IE1hdGguZmxvb3IocmVxT2Zmc2V0IC8gcmVxTGltaXQpIDogMFxuICAgIC8vIGlmIHdlJ3JlIHJlcXVlc3RpbmcgZnJvbSBmaXJzdCBwYWdlLCBjbGVhciB0aGUgbm8tbW9yZS1kYXRhIGd1YXJkXG4gICAgaWYgKHBhZ2VJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgcmVxTGltaXQgPSA1MFxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgZmlsdGVyQ3JpdGVyaWFNYXA6IHtcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW10sXG4gICAgICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgfVxuICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHNlYXJjaFRleHRcbiAgICAgIC8vIHdoZW4gc2VhcmNoaW5nLCBzdGFydCBmcm9tIGZpcnN0IHBhZ2VcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VOdW1iZXIgPSAwXG4gICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgcmVxdWVzdEJvZHkucGFnZVNpemUgPSBwYWdlSW5kZXggPT09IDAgPyA1MCA6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAvLyByZXNldCBndWFyZCB3aGVuIHBlcmZvcm1pbmcgYSBmcmVzaCBzZWFyY2hcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpbmRpY2F0ZSBsb2FkaW5nIHN0YXRlIHNvIHNjcm9sbCBoYW5kbGVycyBkb24ndCB0cmlnZ2VyIHBhcmFsbGVsIGNhbGxzXG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQuZGF0YScsIFtdKTtcbiAgICAgICAgICAgaWYoY29udGVudD8ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2U7XG4gIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZWRJZHMgPSBuZXcgU2V0KHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzKTtcblxuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnRcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIW1hdGNoZWRJZHMuaGFzKGl0ZW0/LmlkKSlcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0/LmlkLFxuICAgICAgICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX2lkOiBpdGVtPy5pZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbT8uZGVzaWduYXRpb24gfHwgJycsXG4gICAgICAgICAgICAgIHN0YXR1czogaXRlbT8uc3RhdHVzIHx8ICdBY3RpdmUnLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICdNYW5hZ2luZyBEaXJlY3RvciBmcm9tIEFQSSA9PT09JyxcbiAgbWFwcGVkLmZpbHRlcihcbiAgICAoeDogYW55KSA9PlxuICAgICAgeC5uYW1lPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ21hbmFnaW5nIGRpcmVjdG9yJ1xuICApXG4pO1xuY29uc29sZS5sb2coXG4gICdUb3RhbCBtYXBwZWQgZGVzaWduYXRpb25zID09PT0nLFxuICBtYXBwZWQubGVuZ3RoXG4pO1xuXG4gICAgICAgICAgY29uc3QgdG90YWwgPSBfLmdldChcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICdyZXN1bHQucmVzdWx0LnRvdGFsY291bnQnLFxuICAgICAgICAgICAgXy5nZXQoXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQuZGF0YS50b3RhbENvdW50JyxcbiAgICAgICAgICAgICAgXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IHRvdGFsO1xuXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgIC8vIFNFQVJDSCBNT0RFXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcblxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IG1hcHBlZDtcblxuICAvLyBJTVBPUlRBTlQ6IG1lcmdlIHNlYXJjaGVkIHJlc3VsdCBpbnRvIGJhY2t1cFxuICBjb25zdCBjb21iaW5lZCA9IFtcbiAgICAuLi4odGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKSxcbiAgICAuLi5tYXBwZWRcbiAgXTtcblxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgPSBfLnVuaXFCeShcbiAgICBjb21iaW5lZCxcbiAgICAoaXQ6IGFueSkgPT4gKGl0Py5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gICk7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgKTtcblxuICBjb25zb2xlLmxvZyhcbiAgICAnQmFja3VwIGFmdGVyIHNlYXJjaCcsXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLmZpbmQoXG4gICAgICAoeDogYW55KSA9PlxuICAgICAgICB4Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdtYW5hZ2luZyBkaXJlY3RvcidcbiAgICApXG4gICk7XG5cbiAgcmV0dXJuO1xufVxuXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgIC8vIE5PUk1BTCBNT0RFXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgcmVxT2Zmc2V0ID09PSAwKSB7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IG1hcHBlZDtcblxuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID1cbiAgICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkuY29uY2F0KG1hcHBlZCk7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IF8udW5pcUJ5KFxuICBjb21iaW5lZCxcbiAgKGl0OiBhbnkpID0+XG4gICAgYCR7KGl0Py5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpfV8ke2l0Py5pZ290X2Rlc2lnbmF0aW9uX2lkfWBcbilcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuc2xpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gc2VsZWN0ZWQgdmFsdWUgcHJlc2VydmVcbiAgICAgICAgICBjb25zdCBkZXNpZ25hdGlvbkNvbnRyb2wgPVxuICAgICAgICAgICAgdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuXG4gICAgICAgICAgaWYgKGRlc2lnbmF0aW9uQ29udHJvbCkge1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID1cbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnZhbHVlIHx8IFtdO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudFZhbHVlcycsIGN1cnJlbnRWYWx1ZXMpXG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gY3VycmVudFZhbHVlc1xuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNvbWUoXG4gICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWUgPT09IGN1cnJlbnRWYWx1ZXNcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc29sZS5sb2codmFsaWRWYWx1ZXMpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXApXG5cbiAgICAgICAgICAgIC8vICBpZiAodmFsaWRWYWx1ZXMubGVuZ3RoICE9PSBjdXJyZW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gbm8gbW9yZSBkYXRhXG4gICAgICAgICAgaWYgKCFtYXBwZWQgfHwgbWFwcGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmxlbmd0aCA+PVxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgLy8gU3RvcCBmdXJ0aGVyIGF1dG9tYXRpYyBjYWxscyBvbiByZXBlYXRlZCBlcnJvcnMgdG8gYXZvaWQgdGlnaHQgbG9vcHNcbiAgICAgICAgICAvLyBsb2FkaW5nIGZsYWcgY2xlYXJlZCBpbiBmaW5hbGl6ZSgpXG4gICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICAgICAgLy8gdGhpcy5tYXRTbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZmV0Y2ggZGVzaWduYXRpb24gZGV0YWlscywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgZW5zdXJlU2VsZWN0ZWREZXNpZ25hdGlvbkV4aXN0cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWU7XG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddPy5zb21lKFxuICAgICAgKGQ6IGFueSkgPT4gZC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICBjb25zdCBjdXN0b21PYmogPSB7XG4gICAgICAgIG5hbWU6IHNlbGVjdGVkLFxuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX25hbWU6IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IHRoaXMucGxhbkRhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQsXG4gICAgICB9O1xuXG4gICAgICAvLyDinIUgQWRkIGF0IFRPUCBzbyBpdCdzIHZpc2libGUgaW1tZWRpYXRlbHlcbiAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IFtcbiAgICAgICAgY3VzdG9tT2JqLFxuICAgICAgICAuLi4odGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKVxuICAgICAgXTtcblxuICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbiddID0gW1xuICAgICAgICBjdXN0b21PYmosXG4gICAgICAgIC4uLih0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uJ10gfHwgW10pXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZERlc2lnbmF0aW9uOiBzdHJpbmcgPVxuICAgICAgKHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuXG4gICAgaWYgKCFzZWxlY3RlZERlc2lnbmF0aW9uKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSByZXR1cm47XG5cbiAgICBjb25zdCBub3JtYWxpemUgPSAodjogc3RyaW5nKSA9PiAodiB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBiYWNrdXAgPSBbLi4udGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwXTtcbmNvbnNvbGUubG9nKFxuICAnQWxsIG1hdGNoaW5nIHJlY29yZHMnLFxuICBiYWNrdXAuZmlsdGVyKFxuICAgIChpdGVtOiBhbnkpID0+XG4gICAgICBub3JtYWxpemUoaXRlbT8ubmFtZSkgPT09IG5vcm1hbGl6ZShzZWxlY3RlZERlc2lnbmF0aW9uKVxuICApXG4pO1xuY29uc3QgZXhpc3RpbmdJbmRleCA9IGJhY2t1cC5maW5kSW5kZXgoXG4gIChpdGVtOiBhbnkpID0+XG4gICAgbm9ybWFsaXplKGl0ZW0/Lm5hbWUpID09PSBub3JtYWxpemUoc2VsZWN0ZWREZXNpZ25hdGlvbikgJiZcbiAgICBpdGVtPy5pZ290X2Rlc2lnbmF0aW9uX2lkXG4pO1xuXG4gICAgbGV0IHNlbGVjdGVkT2JqOiBhbnk7XG5cbiAgICAvLyBJZiBleGlzdHMg4oaSIHJlbW92ZSBpdCBhbmQgcmV1c2VcbiAgICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgICBzZWxlY3RlZE9iaiA9IGJhY2t1cC5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSlbMF07XG4gICAgfVxuICAgIC8vIElmIG5vdCBleGlzdHMg4oaSIGNyZWF0ZSBuZXdcbiAgICBlbHNlIHtcbiAgICAgIHNlbGVjdGVkT2JqID0ge1xuICAgICAgICBuYW1lOiBzZWxlY3RlZERlc2lnbmF0aW9uLFxuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgICBpZDogJycsXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25fbmFtZTogc2VsZWN0ZWREZXNpZ25hdGlvbixcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogJycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIPCflKUgTW92ZSB0byB0b3BcbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgPSBbXG4gICAgICBzZWxlY3RlZE9iaixcbiAgICAgIC4uLmJhY2t1cFxuICAgIF07XG5cbiAgICAvLyBBbHNvIHVwZGF0ZSB2aXNpYmxlIGxpc3QgKHNhbWUgb3JkZXIgbG9naWMpXG4gICAgY29uc3QgdmlzaWJsZSA9IFsuLi4odGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uIHx8IFtdKV07XG5cbiAgICBjb25zdCB2aXNpYmxlSW5kZXggPSB2aXNpYmxlLmZpbmRJbmRleChcbiAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgIG5vcm1hbGl6ZShpdGVtPy5uYW1lKSA9PT0gbm9ybWFsaXplKHNlbGVjdGVkRGVzaWduYXRpb24pXG4gICAgKTtcblxuICAgIGlmICh2aXNpYmxlSW5kZXggPiAtMSkge1xuICAgICAgdmlzaWJsZS5zcGxpY2UodmlzaWJsZUluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBbXG4gICAgICBzZWxlY3RlZE9iaixcbiAgICAgIC4uLnZpc2libGVcbiAgICBdO1xuXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIGJ1dCBjbGVhciB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpIS52YWx1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50RGVzaWduYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuICAgICAgICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKGN1cnJlbnREZXNpZ25hdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgfVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkKSByZXR1cm47XG4gICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyDinIUgT25seSByZXNldCBwYWdpbmF0aW9uIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXRcbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOKchSBSZXN0b3JlIGZyb20gYmFja3VwIHdpdGhvdXQgcmVzZXR0aW5nIG9mZnNldFxuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAwLCB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgfVxuXG4gICAgLy8gZm9jdXMgc2VhcmNoIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHNlYXJjaElucHV0ID1cbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgfSwgMjAwKTtcblxuICAgIC8vIGF0dGFjaCBzY3JvbGxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLm1hdC1zZWxlY3QtcGFuZWwuc2VhcmNoLXBhbmVsJ1xuICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSRU1PVkUgT0xEIExJU1RFTkVSXG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsIGFzIGFueVxuICAgICAgKTtcblxuICAgICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpLFxuICAgICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICAgKTtcblxuICAgIH0sIDMwMCk7XG4gIH1cblxuICAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQ/LnRhcmdldDtcblxuICAgIGNvbnN0IHJlYWNoZWRCb3R0b20gPVxuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodCA+PVxuICAgICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgLSA1O1xuXG4gICAgaWYgKCFyZWFjaGVkQm90dG9tIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBTRUFSQ0ggTU9ERVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBpZiAodGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSkge1xuXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ICs9IDUwO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnRcbiAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG5cbiAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG5cbiAgICAgIH0sIDMwMCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTk9STUFMIE1PREVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAvLyBsb2NhbCBwYWdpbmF0aW9uXG4gICAgaWYgKFxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoID5cbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24/Lmxlbmd0aFxuICAgICkge1xuXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCArPVxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG5cbiAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG5cbiAgICAgIH0sIDMwMCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzZXJ2ZXIgcGFnaW5hdGlvblxuICAgIGNvbnN0IGxvYWRlZExlZ2FjeSA9XG4gICAgICAodGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkubGVuZ3RoO1xuXG4gICAgaWYgKFxuICAgICAgIXRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zICYmXG4gICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ICYmXG4gICAgICBsb2FkZWRMZWdhY3kgPCB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgKSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPVxuICAgICAgICAodGhpcy5kZXNpZ25hdGlvbk9mZnNldCB8fCAwKSArXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCArPVxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIHRoaXMuZGVzaWduYXRpb25PZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2woKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgY2xlYXJEZXNpZ25hdGlvblNlYXJjaChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG5cbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuc2xpY2UoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICApO1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5tYXQtbWRjLXNlbGVjdC1wYW5lbCdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKHBhbmVsKSB7XG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsQm91bmRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIiAjZGlhbG9nQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5FZGl0IFJvbGUgTWFwcGluZzwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiY2JwRm9ybVwiPlxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlciBtdC00XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25fbmFtZVwiIFt2YWx1ZV09XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuXG5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtdC00IG1hcmdpbi10b3AtcyB3LWZ1bGwgcmVxdWlyZWQtc2VsZWN0XCIgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNkZXNpZ25hdGlvbiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkZXNpZ25hdGlvblwiIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBzdHlsZT1cIndpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaERlc2lnbmF0aW9uXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChrZXl1cCk9XCJkZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb25Db250cm9sPy52YWx1ZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRlc2lnbmF0aW9uU2VhcmNoKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImRlc2lnbmF0aW9uPy5uYW1lXCIgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uIG9mIG1hc3RlckRhdGE/LmRlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24/Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zXCIgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkIE1vcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMCB8fCBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnNcIiBkaXNhYmxlZCBjbGFzcz1cIm5vLWRhdGEtb3B0aW9uXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzaWduYXRpb24gTm90IEZvdW5kLlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1lcnJvciBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGVzaWduYXRpb25Gb3JtPy5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udG91Y2hlZCAmJiBkZXNpZ25hdGlvbkZvcm0/LmdldCgnZGVzaWduYXRpb25fbmFtZScpPy5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgZGVzaWduYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj4gLS0+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jb250YWluZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py50b3RhbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3JhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uYmVoYXZpb3JhbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWZ1bmN0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uZnVuY3Rpb25hbH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBEb21haW4gQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LmRvbWFpbn19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPldpbmcvRGl2aXNpb248L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwid2luZ19kaXZpc2lvbl9zZWN0aW9uXCIgW3ZhbHVlXT1cInBsYW5EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAyNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA4cHggMTJweDsgd2lkdGg6MTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5Sb2xlcyAmIFJlc3BvbnNpYmlsaXRpZXM8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIGZvcm1Db250cm9sTmFtZT1cInJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0XCIgcm93cz1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSb2xlcyAmIFJlc3BvbnNpYmlsaXRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBsYW5EYXRhPy5yb2xlX3Jlc3BvbnNpYmlsaXRpZXM/LmpvaW4oJ1xcbicpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5BY3Rpdml0aWVzPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJhY3Rpdml0aWVzX3RleHRcIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFjdGl2aXRpZXNcIiBbdmFsdWVdPVwicGxhbkRhdGE/LmFjdGl2aXRpZXM/LmpvaW4oJ1xcbicpXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmN5PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbmhhbmNlZC1jb21wZXRlbmN5LXNlY3Rpb24gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMTogU2VsZWN0IENvbXBldGVuY3kgVHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RlcC1sYWJlbFwiPjEuIFNlbGVjdCBDb3JlIENvbXBldGVuY3kgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVR5cGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDb21wZXRlbmN5IFR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQmVoYXZpb3JhbFwiPkJlaGF2aW9yYWw8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkZ1bmN0aW9uYWxcIj5GdW5jdGlvbmFsPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJEb21haW5cIj5Eb21haW48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAyOiBUaGVtZSBTZWxlY3Rpb24gKEJlaGF2aW9yYWwvRnVuY3Rpb25hbCBmcm9tIEpTT04sIERvbWFpbiBtYW51YWwpIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+Mi4gU2VsZWN0L0VudGVyIFRoZW1lPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbDogU2VhcmNoYWJsZSBEcm9wZG93biBmcm9tIEpTT04gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdGdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VGhlbWVcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IHRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25UaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdGhlbWVzLi4uXCIgZm9ybUNvbnRyb2xOYW1lPVwidGhlbWVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlclRoZW1lcygkZXZlbnQudGFyZ2V0Py52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGhlbWUgb3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0aGVtZSBvZiBmaWx0ZXJlZFRoZW1lc1wiIFt2YWx1ZV09XCJ0aGVtZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGVtZS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cImZpbHRlcmVkVGhlbWVzLmxlbmd0aCA9PT0gMCAmJiB0aGVtZVNlYXJjaFRleHRcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyB0aGVtZXMgZm91bmQgbWF0Y2hpbmcgXCJ7e3RoZW1lU2VhcmNoVGV4dH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgRG9tYWluOiBNYW51YWwgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFudWFsLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJtYW51YWxUaGVtZUlucHV0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBUaGVtZSBtYW51YWxseVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFudWFsLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMzogU3ViLXRoZW1lIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiICpuZ0lmPVwic2VsZWN0ZWRUaGVtZSB8fCAoc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+My4gU2VsZWN0L0VudGVyIFN1Yi10aGVtZTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIEJlaGF2aW9yYWwgYW5kIEZ1bmN0aW9uYWw6IFNlYXJjaGFibGUgRHJvcGRvd24gYmFzZWQgb24gc2VsZWN0ZWQgdGhlbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdGdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVN1YlRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFuZCBzZWxlY3Qgc3ViLXRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TdWJUaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3ViLXRoZW1lcy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdWJUaGVtZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyU3ViVGhlbWVzKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN1Yi10aGVtZSBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN1YlRoZW1lIG9mIGZpbHRlcmVkU3ViVGhlbWVzXCIgW3ZhbHVlXT1cInN1YlRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdWJUaGVtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmaWx0ZXJlZFN1YlRoZW1lcy5sZW5ndGggPT09IDAgJiYgc3ViVGhlbWVTZWFyY2hUZXh0XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gc3ViLXRoZW1lcyBmb3VuZCBtYXRjaGluZyBcInt7c3ViVGhlbWVTZWFyY2hUZXh0fX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBEb21haW46IE1hbnVhbCBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYW51YWwtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbnVhbFN1YlRoZW1lSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFN1Yi10aGVtZSBtYW51YWxseVwiIGNsYXNzPVwibWFudWFsLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtYnV0dG9uLXNlY3Rpb25cIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5BZGRDb21wZXRlbmN5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNhbkFkZENvbXBldGVuY3koKSA/ICdidG4tYWN0aXZlJyA6ICdidG4tZGlzYWJsZSdcIiAoY2xpY2spPVwiYWRkQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCIgKGNsaWNrKT1cImNhbmNlbFVwZGF0ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW9yYWwnKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvcmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gYmVoYXZpb3VyYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvcmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1iZWhhdmlvcmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGZ1bmN0aW9uYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1mdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGRvbWFpbi1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0XCIgKGNsaWNrKT1cImVkaXRDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRm9ybSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiU2F2ZVwiIChjbGljayk9XCJzYXZlUm9sZU1hcHBpbmcoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
|
|
870
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFROUIsTUFBTSxPQUFPLG9CQUFvQjtJQWdEL0IsWUFDUyxTQUE2QyxFQUNwQixJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUNyQixJQUFnQixFQUNqQixLQUFxQjtRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxD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QUMsZUFBZTtrTkFkRyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ3NCLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFVcEIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQXJyYXksIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWVkaXQtY2JwLXBsYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Q2JwUGxhbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBzZWxlY3RlZFZhbHVlID0gJydcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIHBsYW5EYXRhOiBhbnlcbiAgY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfVxuICBjYnBGb3JtOiBGb3JtR3JvdXA7XG4gIGxvYWRpbmcgPSBmYWxzZVxuXG4gIC8vIEVuaGFuY2VkIGNvbXBldGVuY3kgc2VsZWN0aW9uIHByb3BlcnRpZXNcbiAgY29tcGV0ZW5jaWVzRGF0YTogYW55W10gPSBbXTtcbiAgYXZhaWxhYmxlVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVTdWJUaGVtZXM6IGFueVtdID0gW107XG4gIGZpbHRlcmVkVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZFN1YlRoZW1lczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9ICcnO1xuICBzZWxlY3RlZFRoZW1lID0gJyc7XG4gIHNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgbWFudWFsVGhlbWUgPSAnJztcbiAgbWFudWFsU3ViVGhlbWUgPSAnJztcbiAgdGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gIHN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICBlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWcgPSBmYWxzZVxuICBlZGl0Q29tcGV0ZW5jeUluZGV4ID0gLTFcbiAgb3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnI6IGFueSA9IFtdXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbk9mZnNldCA9IDBcbiAgb2Rjc0Rlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBkZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQgPSA1MFxuICBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJ1xuICBkZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0NvbnRlbnQnKSBkaWFsb2dDb250ZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZGVzaWduYXRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZGVzaWduYXRpb25SZWY/OiBFbGVtZW50UmVmXG4gIG1hc3RlckRhdGE6IGFueSA9IHt9XG4gIHBvcnRhbERhdGE6IGFueVxuICBhY3RpdmVSb3dFbGVtZW50OiBhbnlcbiAgcmVxdWVzdERhdGE6IGFueVxuICByZXF1ZXN0Um93RGF0YTogYW55XG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGxCb3VuZCA9XG4gICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsLmJpbmQodGhpcyk7XG4gIHNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTBcbiAgbWF0Y2hlZERlc2lnbmF0aW9uSWRzID0gW11cbiAgQFZpZXdDaGlsZCgnZWRpdFNlY3Rpb24nKSBlZGl0U2VjdGlvbiE6IEVsZW1lbnRSZWY7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFZGl0Q2JwUGxhbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge1xuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGE/LmVsZW1lbnRcbiAgICAgIHRoaXMucmVxdWVzdFJvd0RhdGEgPSBkYXRhPy5yZXF1ZXN0RGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGF0YT8uZnJvbUxpYnJhcnkpIHtcbiAgICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGE/LmVsZW1lbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIGRhdGE6JywgdGhpcy5wbGFuRGF0YSk7XG4gICAgLy8gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubWFwKChjb21wZXRlbmNpZXM6YW55KT0+e1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsndG90YWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ3RvdGFsJ10gKyAxIFxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdCZWhhdmlvcmFsJykge1xuICAgIC8vICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50WydiZWhhdmlvcmFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50WydiZWhhdmlvcmFsJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnRnVuY3Rpb25hbCcpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZnVuY3Rpb25hbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZnVuY3Rpb25hbCddICsxXG4gICAgLy8gICB9XG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0RvbWFpbicpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZG9tYWluJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50Wydkb21haW4nXSArMVxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gIH1cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncycsIHRoaXMuZGF0YT8ubWF0Y2hlZF9yb2xlX21hcHBpbmdzKVxuICAgIHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzID0gdGhpcy5kYXRhPy5tYXRjaGVkX3JvbGVfbWFwcGluZ3M/Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5pZ290X2Rlc2lnbmF0aW9uX2lkKSB8fCBbXVxuICAgIHRoaXMubG9hZENvbXBldGVuY2llc0RhdGEoKTtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSAmJlxuICAgICAgIXRoaXMucGxhbkRhdGE/Lmlnb3RfZGVzaWduYXRpb25faWRcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odGhpcy5wbGFuRGF0YS5kZXNpZ25hdGlvbl9uYW1lLCAwKTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoQ29udHJvbCA9IHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG5cbiAgICBpZiAoc2VhcmNoQ29udHJvbCkge1xuICAgICAgc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICBjb25zdCB0eHQgPSByZXM/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJztcblxuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0O1xuXG4gICAgICAgICAgLy8gUkVTRVQgU0VBUkNIIFBBR0lOQVRJT05cbiAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG5cbiAgICAgICAgICBpZiAodHh0Py5sZW5ndGgpIHtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIEFQSSBTRUFSQ0ggT05MWVxuICAgICAgICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApO1xuXG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID1cbiAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uU2FmZSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKVxuXG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ3JlcXVlc3RfaWQnKTtcblxuICAgIGNvbnNvbGUubG9nKCdyZXF1ZXN0SWQnLCByZXF1ZXN0SWQpXG4gIH1cblxuICBsb2FkQ29tcGV0ZW5jaWVzRGF0YSgpIHtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q29tcGV0ZW5jeUpzb24oKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNEYXRhID0gZGF0YTtcbiAgICAgICAgY29uc29sZS5sb2coJ0NvbXBldGVuY2llcyBkYXRhIGxvYWRlZDonLCB0aGlzLmNvbXBldGVuY2llc0RhdGEpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjb21wZXRlbmNpZXMgZGF0YTonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5Q291bnRzKCkge1xuICAgIGNvbnN0IGNvbXBzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50ID0geyB0b3RhbDogMCwgYmVoYXZpb3JhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH07XG4gICAgY29tcHMuZm9yRWFjaChjID0+IHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQudG90YWwrKztcbiAgICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2JlaGF2aW9yYWwnKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LmJlaGF2aW9yYWwrKztcbiAgICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2Z1bmN0aW9uYWwnKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LmZ1bmN0aW9uYWwrKztcbiAgICAgIGlmIChjLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2RvbWFpbicpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuZG9tYWluKys7XG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplRm9ybSgpIHtcbiAgICB0aGlzLmNicEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRlc2lnbmF0aW9uX25hbWU6IFt0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHdpbmdfZGl2aXNpb25fc2VjdGlvbjogW3RoaXMucGxhbkRhdGE/LndpbmdfZGl2aXNpb25fc2VjdGlvbiB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByb2xlX3Jlc3BvbnNpYmlsaXRpZXNfdGV4dDogW3RoaXMucGxhbkRhdGE/LnJvbGVfcmVzcG9uc2liaWxpdGllcz8uam9pbignXFxuJykgfHwgJyddLFxuICAgICAgYWN0aXZpdGllc190ZXh0OiBbdGhpcy5wbGFuRGF0YT8uYWN0aXZpdGllcz8uam9pbignXFxuJykgfHwgJyddLFxuICAgICAgY29tcGV0ZW5jeVNlYXJjaFRleHQ6IFsnJ10sXG4gICAgICBjb21wZXRlbmN5VHlwZTogWycnXSxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogWycnXSxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogWycnXSxcbiAgICAgIG1hbnVhbFRoZW1lSW5wdXQ6IFsnJ10sXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBbJyddLFxuICAgICAgdGhlbWVTZWFyY2g6IFsnJ10sXG4gICAgICBzdWJUaGVtZVNlYXJjaDogWycnXSxcbiAgICAgIGNvbXBldGVuY2llczogdGhpcy5mYi5hcnJheSh0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXMgfHwgW10pLCAvLyBvcHRpb25hbCBjdXN0b21pemF0aW9uLFxuICAgICAgc2VhcmNoRGVzaWduYXRpb246IFsnJ10sXG4gICAgICBpZ290X2Rlc2lnbmF0aW9uX2lkOiBbdGhpcy5wbGFuRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZCB8fCAnJ11cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddKSB7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uU2FmZSgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXNpZ25hdGlvblNhZmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSB0cnVlXG4gICAgdGhpcy5nZXREZXNpZ25hdGlvbigpXG4gIH1cblxuXG4gIGdldCByb2xlUmVzcG9uc2liaWxpdGllcygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdyb2xlX3Jlc3BvbnNpYmlsaXRpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBzZWFyY2hEYXRhKCkge1xuXG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcblxuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGU6IHN0cmluZyk6IGFueVtdIHtcbiAgICByZXR1cm4gKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUgfHwgW10pLmZpbHRlcihjID0+IGMudHlwZSA9PT0gdHlwZSk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgc2F2ZVJvbGVNYXBwaW5nKCkge1xuICAgIGNvbnNvbGUubG9nKFwic2F2ZWQgZnVuY3Rpb24gY2FsbGVkLi4uXCIpXG4gICAgaWYgKHRoaXMuY2JwRm9ybS5pbnZhbGlkKSByZXR1cm47XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuY2JwRm9ybS52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnU3VibWl0dGVkIERhdGE6JywgZm9ybURhdGEpO1xuICAgIGxldCBjYnBQbGFuRGF0YTogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iajtcbiAgICBjb25zb2xlLmxvZygnY2JwUGxhbkRhdGEnLCBjYnBQbGFuRGF0YSlcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdCYWNrdXAgZW50cnk6JyxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5maW5kKFxuICAgICAgICAoeDogYW55KSA9PlxuICAgICAgICAgIHgubmFtZT8udG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgICAgICBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1Zpc2libGUgZW50cnk6JyxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbi5maW5kKFxuICAgICAgICAoeDogYW55KSA9PlxuICAgICAgICAgIHgubmFtZT8udG9Mb3dlckNhc2UoKSA9PT1cbiAgICAgICAgICBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCByb2xlUmVzcG9uc2liaWxpdGllc0FycmF5ID0gdGhpcy5jYnBGb3JtLnZhbHVlLnJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0XG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSk7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IHRoaXMuY2JwRm9ybS52YWx1ZS5hY3Rpdml0aWVzX3RleHRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgbGV0IHJlcSA9XG4gICAge1xuICAgICAgXCJzZWN0b3JfbmFtZVwiOiBjYnBQbGFuRGF0YT8uc2VjdG9ycz8uam9pbihcIixcIiksXG4gICAgICBcImluc3RydWN0aW9uXCI6IGNicFBsYW5EYXRhPy5pbnN0cnVjdGlvbiA/IGNicFBsYW5EYXRhLmluc3RydWN0aW9uIDogJycsXG4gICAgICBcIndpbmdfZGl2aXNpb25fc2VjdGlvblwiOiBmb3JtRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uLFxuICAgICAgXCJyb2xlX3Jlc3BvbnNpYmlsaXRpZXNcIjogcm9sZVJlc3BvbnNpYmlsaXRpZXNBcnJheSxcbiAgICAgIFwiYWN0aXZpdGllc1wiOiBhY3Rpdml0aWVzLFxuICAgICAgXCJjb21wZXRlbmNpZXNcIjogZm9ybURhdGEuY29tcGV0ZW5jaWVzXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbicsIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24pXG5cbiAgICBpZiAoZm9ybURhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQpIHtcbiAgICAgIHJlcVtcImlnb3RfZGVzaWduYXRpb25faWRcIl0gPSBmb3JtRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZCB8fCAnJyxcbiAgICAgICAgcmVxW1wiZGVzaWduYXRpb25fbmFtZVwiXSA9IGZvcm1EYXRhPy5kZXNpZ25hdGlvbl9uYW1lID8gZm9ybURhdGEuZGVzaWduYXRpb25fbmFtZSA6ICcnXG4gICAgfSBlbHNlIHtcblxuICAgICAgY29uc29sZS5sb2coJ21hc3RlckRhdGE/LmRlc2lnbmF0aW9uJywgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbilcblxuICAgICAgcmVxW1wiZGVzaWduYXRpb25fbmFtZVwiXSA9IGZvcm1EYXRhPy5kZXNpZ25hdGlvbl9uYW1lID8gZm9ybURhdGEuZGVzaWduYXRpb25fbmFtZSA6ICcnXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ1NlYXJjaGluZyBpbiBiYWNrdXA6JyxcbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLmZpbmQoXG4gICAgICAgICAgKHg6IGFueSkgPT5cbiAgICAgICAgICAgIHgubmFtZT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lPy50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24/LmZpbmQoXG4gICAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gZm9ybURhdGE/LmRlc2lnbmF0aW9uX25hbWU/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgICBjb25zdCBiYWNrdXBEZXNpZ25hdGlvbiA9XG4gICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+XG4gICAgICAgICAgICB4Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgIGNvbnNvbGUubG9nKCdiYWNrdXBEZXNpZ25hdGlvbicsIGJhY2t1cERlc2lnbmF0aW9uKTtcbiAgICAgIHJlcVtcImlnb3RfZGVzaWduYXRpb25faWRcIl0gPSBzZWxlY3RlZERlc2lnbmF0aW9uPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnO1xuICAgICAgY29uc29sZS5sb2coJ2Rlc2lnbmF0aW9uX25hbWUgMTIzICcsIGZvcm1EYXRhLmRlc2lnbmF0aW9uX25hbWUpO1xuICAgICAgY29uc29sZS5sb2coJ3NlbGVjdGVkRGVzaWduYXRpb24gMTIzJywgc2VsZWN0ZWREZXNpZ25hdGlvbik7XG4gICAgICBjb25zb2xlLmxvZygnaWdvdF9kZXNpZ25hdGlvbl9pZCAxMjMnLCByZXFbJ2lnb3RfZGVzaWduYXRpb25faWQnXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICByZXFbJ3JlcXVlc3RfaWQnXSA9IHRoaXMucmVxdWVzdFJvd0RhdGE/LmlkXG4gICAgICByZXFbJ2l0ZW1faWQnXSA9IHRoaXMucGxhbkRhdGE/LmlkXG4gICAgfVxuICAgIGxldCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UudXBkYXRlUm9sZU1hcHBpbmcocm9sZV9tYXBwaW5nX2lkLCByZXEpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdSb2xlIE1hcHBpbmcgU2F2ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfSk7XG4gICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICAvLyB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAvLyBhbGVydCgnQ29uZmxpY3QgZGV0ZWN0ZWQ6IFRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBvciBhY3Rpb24gY29uZmxpY3RzLicpO1xuICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsRm9ybSgpIHtcbiAgICAvLyBNYXJrIGFsbCBjb250cm9scyBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZhbHVlc1xuICAgIHRoaXMuY2JwRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuY2JwRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAvLyB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmNvbXBldGVuY2llc0FycmF5Jyx0aGlzLmNvbXBldGVuY2llc0FycmF5KVxuICAgIC8vIEFsc28sIGlmIHlvdSB3YW50IHRvIG1hcmsgYWxsIGNoaWxkIGNvbnRyb2xzIChGb3JtQ29udHJvbHMgLyBGb3JtQXJyYXlzIC8gRm9ybUdyb3VwcykgYXMgcHJpc3RpbmUgYW5kIHVudG91Y2hlZFxuICAgIHRoaXMubWFya0Zvcm1Hcm91cFByaXN0aW5lVW50b3VjaGVkKHRoaXMuY2JwRm9ybSk7XG4gICAgLy8gaWYodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndHlwZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ11cbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoaXMub3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnJbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXSA9IHRoaXMub3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnJbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ11cbiAgICAvLyB9XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQoZm9ybUdyb3VwOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXkpIHtcbiAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNba2V5XTtcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQoY29udHJvbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgY29tcGV0ZW5jaWVzQXJyYXkoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jYnBGb3JtLmdldCgnY29tcGV0ZW5jaWVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgb25Db21wZXRlbmN5VHlwZUNoYW5nZSh0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5hdmFpbGFibGVUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy50aGVtZVNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgLy8gUmVzZXQgZm9ybSBjb250cm9sc1xuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgaWYgKHR5cGUgPT09ICdCZWhhdmlvcmFsJyB8fCB0eXBlID09PSAnRnVuY3Rpb25hbCcpIHtcbiAgICAgIC8vIExvYWQgdGhlbWVzIGZyb20gSlNPTiBmb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbFxuICAgICAgY29uc3QgY29tcGV0ZW5jeUNhdGVnb3J5ID0gdGhpcy5jb21wZXRlbmNpZXNEYXRhLmZpbmQoY2F0ID0+XG4gICAgICAgIGNhdC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHR5cGUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnICYmIGNhdC5uYW1lID09PSAnQmVoYXZpb3VyYWwnKVxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbXBldGVuY3lDYXRlZ29yeSkge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IGNvbXBldGVuY3lDYXRlZ29yeS5jb21wZXRlbmN5X3RoZW1lIHx8IFtdO1xuICAgICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRm9yIERvbWFpbiwgbm8gdGhlbWVzIGFyZSBsb2FkZWQgLSB1c2VyIHdpbGwgZW50ZXIgbWFudWFsbHlcbiAgfVxuXG4gIG9uVGhlbWVDaGFuZ2UodGhlbWVOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSB0aGVtZU5hbWU7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBzdWJUaGVtZVNlYXJjaDogJydcbiAgICB9KTtcblxuICAgIC8vIEZpbmQgdGhlIHNlbGVjdGVkIHRoZW1lIGFuZCBsb2FkIGl0cyBzdWItdGhlbWVzXG4gICAgY29uc3Qgc2VsZWN0ZWRUaGVtZU9iaiA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbmQodGhlbWUgPT4gdGhlbWUubmFtZSA9PT0gdGhlbWVOYW1lKTtcbiAgICBpZiAoc2VsZWN0ZWRUaGVtZU9iaikge1xuICAgICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBzZWxlY3RlZFRoZW1lT2JqLmNvbXBldGVuY3lfc3ViX3RoZW1lIHx8IFtdO1xuICAgICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFsuLi50aGlzLmF2YWlsYWJsZVN1YlRoZW1lc107XG4gICAgfVxuICB9XG5cbiAgb25TdWJUaGVtZUNoYW5nZShzdWJUaGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRTdWJUaGVtZSA9IHN1YlRoZW1lTmFtZTtcbiAgfVxuXG4gIGFkZENvbXBldGVuY3koKSB7XG4gICAgbGV0IHR5cGUgPSB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGU7XG4gICAgbGV0IHRoZW1lID0gJyc7XG4gICAgbGV0IHN1YlRoZW1lID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0RvbWFpbicpIHtcbiAgICAgIC8vIEZvciBEb21haW4sIHVzZSBtYW51YWwgaW5wdXRcbiAgICAgIHRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICAgIHN1YlRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFN1YlRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIEJlaGF2aW9yYWwvRnVuY3Rpb25hbCwgdXNlIGRyb3Bkb3duIHNlbGVjdGlvbnNcbiAgICAgIHRoZW1lID0gdGhpcy5zZWxlY3RlZFRoZW1lO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLnNlbGVjdGVkU3ViVGhlbWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgJiYgdGhlbWUgJiYgc3ViVGhlbWUpIHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuc29tZShjID0+XG4gICAgICAgIGMudGhlbWUgPT09IHRoZW1lICYmIGMuc3ViX3RoZW1lID09PSBzdWJUaGVtZSAmJiBjLnR5cGUgPT09IHR5cGVcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICB0eXBlOiBbdHlwZV0sXG4gICAgICAgICAgdGhlbWU6IFt0aGVtZV0sXG4gICAgICAgICAgc3ViX3RoZW1lOiBbc3ViVGhlbWVdXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnB1c2gobmV3Q29tcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGlucHV0IGZpZWxkcyBhZnRlciBhZGRpbmdcbiAgICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlO1xuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHsgY29tcGV0ZW5jaWVzOiBbLi4uY3VycmVudFZhbHVlc10gfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNicEZvcm0/LmdldCgnY29tcGV0ZW5jaWVzJyk/LnZhbHVlKTtcbiAgfVxuXG4gIHJlc2V0Q29tcGV0ZW5jeUZvcm0oKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBjb21wZXRlbmN5VHlwZTogJycsXG4gICAgICBjb21wZXRlbmN5VGhlbWU6ICcnLFxuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIG1hbnVhbFRoZW1lSW5wdXQ6ICcnLFxuICAgICAgbWFudWFsU3ViVGhlbWVJbnB1dDogJycsXG4gICAgICB0aGVtZVNlYXJjaDogJycsXG4gICAgICBzdWJUaGVtZVNlYXJjaDogJydcbiAgICB9KTtcbiAgfVxuXG4gIGZpbHRlclRoZW1lcyhzZWFyY2hUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgaWYgKCFzZWFyY2hUZXh0LnRyaW0oKSkge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFsuLi50aGlzLmF2YWlsYWJsZVRoZW1lc107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSB0aGlzLmF2YWlsYWJsZVRoZW1lcy5maWx0ZXIodGhlbWUgPT5cbiAgICAgICAgdGhlbWUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyU3ViVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzLmZpbHRlcihzdWJUaGVtZSA9PlxuICAgICAgICBzdWJUaGVtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2FuQWRkQ29tcGV0ZW5jeSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbicpIHtcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICAgIGNvbnN0IHN1YlRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFN1YlRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICAgIHJldHVybiAhISh0aGVtZSAmJiBzdWJUaGVtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAhISh0aGlzLnNlbGVjdGVkVGhlbWUgJiYgdGhpcy5zZWxlY3RlZFN1YlRoZW1lKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVDb21wZXRlbmN5KGNvbXApIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkuY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLnZhbHVlLnRoZW1lID09PSBjb21wLnRoZW1lICYmIGNvbnRyb2wudmFsdWUudHlwZSA9PT0gY29tcC50eXBlXG4gICAgKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGVkaXRDb21wZXRlbmN5KGNvbXApIHtcbiAgICB0aGlzLmVkaXREb21haW5Db21wZXRlbmN5RmxhZyA9IHRydWVcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnRG9tYWluJyxcbiAgICAgIG1hbnVhbFRoZW1lSW5wdXQ6IGNvbXA/LnRoZW1lLFxuICAgICAgbWFudWFsU3ViVGhlbWVJbnB1dDogY29tcD8uc3ViX3RoZW1lXG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlLmZpbmRJbmRleChjID0+XG4gICAgICBjLnRoZW1lID09PSBjb21wPy50aGVtZSAmJlxuICAgICAgYy5zdWJfdGhlbWUgPT09IGNvbXA/LnN1Yl90aGVtZSAmJlxuICAgICAgYy50eXBlID09PSBcIkRvbWFpblwiXG4gICAgKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID0gaW5kZXhcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID0gJ0RvbWFpbidcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zb2xlLmxvZygnc2Nyb2xsVG9wIGJlZm9yZScsIHRoaXMuZGlhbG9nQ29udGVudC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRoaXMuZWRpdFNlY3Rpb24ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICBibG9jazogJ3N0YXJ0J1xuICAgIH0pO1xuICB9KTtcbiAgfVxuXG4gIGNhbmNlbFVwZGF0ZSgpIHtcbiAgICB0aGlzLmVkaXREb21haW5Db21wZXRlbmN5RmxhZyA9IGZhbHNlXG4gICAgdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID0gLTFcbiAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKVxuICB9XG5cbiAgdXBkYXRlQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZSkpXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcgdGhpcy5jb21wZXRlbmNpZXNBcnJheScsIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgaWYgKHR5cGUgJiYgdGhlbWUgJiYgc3ViVGhlbWUpIHtcblxuICAgICAgY29uc29sZS5sb2coJ3RoaXMuZWRpdENvbXBldGVuY3lJbmRleC0tJywgdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4KVxuICAgICAgaWYgKHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndHlwZSddID0gdHlwZVxuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3RoZW1lJ10gPSB0aGVtZVxuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gc3ViVGhlbWVcbiAgICAgIH1cblxuICAgICAgLy8gaWYgKCFleGlzdHMpIHtcbiAgICAgIC8vICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgLy8gICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgIC8vICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgIC8vICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIC8vIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycicsIHRoaXMub3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnIpXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG4gIGdldERlc2lnbmF0aW9uKHNlYXJjaFRleHQ/OiBzdHJpbmcsIG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuXG4gICAgLy8gY2xlYXIgYW55IHByZXZpb3VzIGRlYnVnIGhvb2tzXG4gICAgaWYgKCFzZWFyY2hUZXh0IHx8IHNlYXJjaFRleHQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIGNvbnN0IHJlcU9mZnNldCA9ICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJykgPyBvZmZzZXQgOiB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0XG4gICAgbGV0IHJlcUxpbWl0ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICBjb25zdCBwYWdlSW5kZXggPSByZXFMaW1pdCA+IDAgPyBNYXRoLmZsb29yKHJlcU9mZnNldCAvIHJlcUxpbWl0KSA6IDBcbiAgICAvLyBpZiB3ZSdyZSByZXF1ZXN0aW5nIGZyb20gZmlyc3QgcGFnZSwgY2xlYXIgdGhlIG5vLW1vcmUtZGF0YSBndWFyZFxuICAgIGlmIChwYWdlSW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICAgIHJlcUxpbWl0ID0gNTBcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgIH0sXG4gICAgICByZXF1ZXN0ZWRGaWVsZHM6IFtdLFxuICAgICAgcGFnZU51bWJlcjogcGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHJlcUxpbWl0LFxuICAgIH1cbiAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Qm9keVsnc2VhcmNoU3RyaW5nJ10gPSBzZWFyY2hUZXh0XG4gICAgICAvLyB3aGVuIHNlYXJjaGluZywgc3RhcnQgZnJvbSBmaXJzdCBwYWdlXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlTnVtYmVyID0gMFxuICAgICAgLy8gYWxsb3cgbGFyZ2VyIHBhZ2UgZm9yIHNlYXJjaCBpZiBuZWVkZWRcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VTaXplID0gcGFnZUluZGV4ID09PSAwID8gNTAgOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgLy8gcmVzZXQgZ3VhcmQgd2hlbiBwZXJmb3JtaW5nIGEgZnJlc2ggc2VhcmNoXG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gaW5kaWNhdGUgbG9hZGluZyBzdGF0ZSBzbyBzY3JvbGwgaGFuZGxlcnMgZG9uJ3QgdHJpZ2dlciBwYXJhbGxlbCBjYWxsc1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWVcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWFyY2hQdWJsaWNEZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkucGlwZShmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LmRhdGEnLCBbXSk7XG4gICAgICAgICAgaWYgKGNvbnRlbnQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtYXRjaGVkSWRzID0gbmV3IFNldCh0aGlzLm1hdGNoZWREZXNpZ25hdGlvbklkcyk7XG5cbiAgICAgICAgICBjb25zdCBtYXBwZWQgPSBjb250ZW50XG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+ICFtYXRjaGVkSWRzLmhhcyhpdGVtPy5pZCkpXG4gICAgICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIGlkOiBpdGVtPy5pZCxcbiAgICAgICAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogaXRlbT8uaWQsXG4gICAgICAgICAgICAgIG5hbWU6IGl0ZW0/LmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICBzdGF0dXM6IGl0ZW0/LnN0YXR1cyB8fCAnQWN0aXZlJyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICdNYW5hZ2luZyBEaXJlY3RvciBmcm9tIEFQSSA9PT09JyxcbiAgICAgICAgICAgIG1hcHBlZC5maWx0ZXIoXG4gICAgICAgICAgICAgICh4OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgeC5uYW1lPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ21hbmFnaW5nIGRpcmVjdG9yJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAnVG90YWwgbWFwcGVkIGRlc2lnbmF0aW9ucyA9PT09JyxcbiAgICAgICAgICAgIG1hcHBlZC5sZW5ndGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdG90YWwgPSBfLmdldChcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICdyZXN1bHQucmVzdWx0LnRvdGFsY291bnQnLFxuICAgICAgICAgICAgXy5nZXQoXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQuZGF0YS50b3RhbENvdW50JyxcbiAgICAgICAgICAgICAgXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IHRvdGFsO1xuXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgIC8vIFNFQVJDSCBNT0RFXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hdGNoZWRJZHMtLScsIHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzKVxuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IG1hcHBlZDtcblxuICAgICAgICAgICAgLy8gSU1QT1JUQU5UOiBtZXJnZSBzZWFyY2hlZCByZXN1bHQgaW50byBiYWNrdXBcbiAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gW1xuICAgICAgICAgICAgICAuLi4odGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKSxcbiAgICAgICAgICAgICAgLi4ubWFwcGVkXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgPSBfLnVuaXFCeShcbiAgICAgICAgICAgICAgY29tYmluZWQsXG4gICAgICAgICAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkLnNsaWNlKFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uLS0tLScsdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uKVxuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdCYWNrdXAgYWZ0ZXIgc2VhcmNoJyxcbiAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLmZpbmQoXG4gICAgICAgICAgICAgICAgKHg6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIHgubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ21hbmFnaW5nIGRpcmVjdG9yJ1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgIC8vIE5PUk1BTCBNT0RFXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgcmVxT2Zmc2V0ID09PSAwKSB7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IG1hcHBlZDtcblxuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID1cbiAgICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkuY29uY2F0KG1hcHBlZCk7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IF8udW5pcUJ5KFxuICAgICAgICAgICAgICBjb21iaW5lZCxcbiAgICAgICAgICAgICAgKGl0OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgYCR7KGl0Py5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpfV8ke2l0Py5pZ290X2Rlc2lnbmF0aW9uX2lkfWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuc2xpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gc2VsZWN0ZWQgdmFsdWUgcHJlc2VydmVcbiAgICAgICAgICBjb25zdCBkZXNpZ25hdGlvbkNvbnRyb2wgPVxuICAgICAgICAgICAgdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuXG4gICAgICAgICAgaWYgKGRlc2lnbmF0aW9uQ29udHJvbCkge1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID1cbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnZhbHVlIHx8IFtdO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudFZhbHVlcycsIGN1cnJlbnRWYWx1ZXMpXG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gY3VycmVudFZhbHVlc1xuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNvbWUoXG4gICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWUgPT09IGN1cnJlbnRWYWx1ZXNcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc29sZS5sb2codmFsaWRWYWx1ZXMpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXApXG5cbiAgICAgICAgICAgIC8vICBpZiAodmFsaWRWYWx1ZXMubGVuZ3RoICE9PSBjdXJyZW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gbm8gbW9yZSBkYXRhXG4gICAgICAgICAgaWYgKCFtYXBwZWQgfHwgbWFwcGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmxlbmd0aCA+PVxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgLy8gU3RvcCBmdXJ0aGVyIGF1dG9tYXRpYyBjYWxscyBvbiByZXBlYXRlZCBlcnJvcnMgdG8gYXZvaWQgdGlnaHQgbG9vcHNcbiAgICAgICAgICAvLyBsb2FkaW5nIGZsYWcgY2xlYXJlZCBpbiBmaW5hbGl6ZSgpXG4gICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICAgICAgLy8gdGhpcy5tYXRTbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZmV0Y2ggZGVzaWduYXRpb24gZGV0YWlscywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgZW5zdXJlU2VsZWN0ZWREZXNpZ25hdGlvbkV4aXN0cygpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWU7XG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddPy5zb21lKFxuICAgICAgKGQ6IGFueSkgPT4gZC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICBjb25zdCBjdXN0b21PYmogPSB7XG4gICAgICAgIG5hbWU6IHNlbGVjdGVkLFxuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX25hbWU6IHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IHRoaXMucGxhbkRhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQsXG4gICAgICB9O1xuXG4gICAgICAvLyDinIUgQWRkIGF0IFRPUCBzbyBpdCdzIHZpc2libGUgaW1tZWRpYXRlbHlcbiAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IFtcbiAgICAgICAgY3VzdG9tT2JqLFxuICAgICAgICAuLi4odGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKVxuICAgICAgXTtcblxuICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbiddID0gW1xuICAgICAgICBjdXN0b21PYmosXG4gICAgICAgIC4uLih0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uJ10gfHwgW10pXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZERlc2lnbmF0aW9uOiBzdHJpbmcgPVxuICAgICAgKHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuXG4gICAgaWYgKCFzZWxlY3RlZERlc2lnbmF0aW9uKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSByZXR1cm47XG5cbiAgICBjb25zdCBub3JtYWxpemUgPSAodjogc3RyaW5nKSA9PiAodiB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBiYWNrdXAgPSBbLi4udGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwXTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdBbGwgbWF0Y2hpbmcgcmVjb3JkcycsXG4gICAgICBiYWNrdXAuZmlsdGVyKFxuICAgICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAgIG5vcm1hbGl6ZShpdGVtPy5uYW1lKSA9PT0gbm9ybWFsaXplKHNlbGVjdGVkRGVzaWduYXRpb24pXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gYmFja3VwLmZpbmRJbmRleChcbiAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgIG5vcm1hbGl6ZShpdGVtPy5uYW1lKSA9PT0gbm9ybWFsaXplKHNlbGVjdGVkRGVzaWduYXRpb24pICYmXG4gICAgICAgIGl0ZW0/Lmlnb3RfZGVzaWduYXRpb25faWRcbiAgICApO1xuXG4gICAgbGV0IHNlbGVjdGVkT2JqOiBhbnk7XG5cbiAgICAvLyBJZiBleGlzdHMg4oaSIHJlbW92ZSBpdCBhbmQgcmV1c2VcbiAgICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgICBzZWxlY3RlZE9iaiA9IGJhY2t1cC5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSlbMF07XG4gICAgfVxuICAgIC8vIElmIG5vdCBleGlzdHMg4oaSIGNyZWF0ZSBuZXdcbiAgICBlbHNlIHtcbiAgICAgIHNlbGVjdGVkT2JqID0ge1xuICAgICAgICBuYW1lOiBzZWxlY3RlZERlc2lnbmF0aW9uLFxuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgICBpZDogJycsXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25fbmFtZTogc2VsZWN0ZWREZXNpZ25hdGlvbixcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogJycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIPCflKUgTW92ZSB0byB0b3BcbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgPSBbXG4gICAgICBzZWxlY3RlZE9iaixcbiAgICAgIC4uLmJhY2t1cFxuICAgIF07XG5cbiAgICAvLyBBbHNvIHVwZGF0ZSB2aXNpYmxlIGxpc3QgKHNhbWUgb3JkZXIgbG9naWMpXG4gICAgY29uc3QgdmlzaWJsZSA9IFsuLi4odGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uIHx8IFtdKV07XG5cbiAgICBjb25zdCB2aXNpYmxlSW5kZXggPSB2aXNpYmxlLmZpbmRJbmRleChcbiAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgIG5vcm1hbGl6ZShpdGVtPy5uYW1lKSA9PT0gbm9ybWFsaXplKHNlbGVjdGVkRGVzaWduYXRpb24pXG4gICAgKTtcblxuICAgIGlmICh2aXNpYmxlSW5kZXggPiAtMSkge1xuICAgICAgdmlzaWJsZS5zcGxpY2UodmlzaWJsZUluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBbXG4gICAgICBzZWxlY3RlZE9iaixcbiAgICAgIC4uLnZpc2libGVcbiAgICBdO1xuXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIGJ1dCBjbGVhciB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpIS52YWx1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50RGVzaWduYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuICAgICAgICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKGN1cnJlbnREZXNpZ25hdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgfVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkKSByZXR1cm47XG4gICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyDinIUgT25seSByZXNldCBwYWdpbmF0aW9uIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXRcbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOKchSBSZXN0b3JlIGZyb20gYmFja3VwIHdpdGhvdXQgcmVzZXR0aW5nIG9mZnNldFxuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAwLCB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgfVxuXG4gICAgLy8gZm9jdXMgc2VhcmNoIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHNlYXJjaElucHV0ID1cbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgfSwgMjAwKTtcblxuICAgIC8vIGF0dGFjaCBzY3JvbGxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLm1hdC1zZWxlY3QtcGFuZWwuc2VhcmNoLXBhbmVsJ1xuICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSRU1PVkUgT0xEIExJU1RFTkVSXG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsIGFzIGFueVxuICAgICAgKTtcblxuICAgICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpLFxuICAgICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICAgKTtcblxuICAgIH0sIDMwMCk7XG4gIH1cblxuIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBldmVudD8udGFyZ2V0O1xuXG4gIGNvbnN0IHJlYWNoZWRCb3R0b20gPVxuICAgIGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICBlbGVtZW50LnNjcm9sbEhlaWdodCAtIDEwO1xuXG4gIGlmICghcmVhY2hlZEJvdHRvbSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zb2xlLmxvZygnPT09IFNjcm9sbCBUcmlnZ2VyZWQgPT09Jyk7XG4gIGNvbnNvbGUubG9nKCdWaXNpYmxlOicsIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24/Lmxlbmd0aCk7XG4gIGNvbnNvbGUubG9nKCdCYWNrdXA6JywgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoKTtcbiAgY29uc29sZS5sb2coJ1RvdGFsOicsIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQpO1xuICBjb25zb2xlLmxvZygnT2Zmc2V0OicsIHRoaXMuZGVzaWduYXRpb25PZmZzZXQpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTRUFSQ0ggTU9ERVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUpIHtcblxuICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgKz0gNTA7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkIHx8IFtdKS5zbGljZShcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudFxuICAgICAgKTtcblxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExPQ0FMIFBBR0lOQVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09XG4gIGlmIChcbiAgICAodGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkubGVuZ3RoID5cbiAgICAodGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbiB8fCBbXSkubGVuZ3RoXG4gICkge1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICk7XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBUEkgUEFHSU5BVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT1cbiAgY29uc3QgbG9hZGVkQ291bnQgPVxuICAgICh0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5sZW5ndGg7XG5cbiAgaWYgKHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zICYmIHRoaXMuc2VhcmNoVGV4dCkge1xuICAgIGNvbnNvbGUubG9nKCdObyBtb3JlIGRhdGEnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoXG4gICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA+IDAgJiZcbiAgICBsb2FkZWRDb3VudCA+PSB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICkge1xuXG4gICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuXG4gICAgY29uc29sZS5sb2coJ0FsbCByZWNvcmRzIGxvYWRlZCcpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCArPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICBjb25zb2xlLmxvZyhcbiAgICAnTG9hZGluZyBuZXh0IHBhZ2UgPT4gb2Zmc2V0OicsXG4gICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldFxuICApO1xuXG4gIHRoaXMuZ2V0RGVzaWduYXRpb24odW5kZWZpbmVkLCB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0KTtcbn1cblxuICBnZXQgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGNsZWFyRGVzaWduYXRpb25TZWFyY2goZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpO1xuXG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAwLFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICAgKTtcblxuICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcubWF0LW1kYy1zZWxlY3QtcGFuZWwnXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChwYW5lbCkge1xuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbEJvdW5kXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3LWNicC1wbGFuXCIgI2RpYWxvZ0NvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+RWRpdCBSb2xlIE1hcHBpbmc8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXJcIiBbZm9ybUdyb3VwXT1cImNicEZvcm1cIj5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uX25hbWVcIiBbdmFsdWVdPVwicGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cblxuXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibXQtNCBtYXJnaW4tdG9wLXMgdy1mdWxsIHJlcXVpcmVkLXNlbGVjdFwiICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDogMTAwJTtmb250LXNpemU6IDE0cHg7Zm9udC1mYW1pbHk6ICdMYXRvJztcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjZGVzaWduYXRpb24gZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGVzaWduYXRpb25cIiAoY2xvc2VkKT1cIm9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCIgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3RpY2t5IHNlYXJjaCBpbnB1dCBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1zZWFyY2gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGRlc2lnbmF0aW9uXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoa2V5dXApPVwiZGVzaWduYXRpb25TZWFyY2goJGV2ZW50KVwiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaERlc2lnbmF0aW9uQ29udHJvbD8udmFsdWVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbGVhci1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyBsaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJkZXNpZ25hdGlvbj8ubmFtZVwiICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Rlc2lnbmF0aW9uPy5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9uc1wiIGNsYXNzPVwibG9hZGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZCBNb3JlLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIobWFzdGVyRGF0YT8uZGVzaWduYXRpb24pPy5sZW5ndGggPT09IDAgfHwgbm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zXCIgZGlzYWJsZWQgY2xhc3M9XCJuby1kYXRhLW9wdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIE5vdCBGb3VuZC5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRlc2lnbmF0aW9uRm9ybT8uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnRvdWNoZWQgJiYgZGVzaWduYXRpb25Gb3JtPy5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8uaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+IC0tPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY29udGFpbmVyIG10LTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci10b3RhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8udG90YWx9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1iZWhhdmlvcmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LmJlaGF2aW9yYWx9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1mdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LmZ1bmN0aW9uYWx9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0c2lkZS1sYXllci1kb21haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRG9tYWluIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5kb21haW59fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cD5XaW5nL0RpdmlzaW9uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIndpbmdfZGl2aXNpb25fc2VjdGlvblwiIFt2YWx1ZV09XCJwbGFuRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOjEwMCU7Zm9udC1zaXplOiAxNHB4O2ZvbnQtZmFtaWx5OiAnTGF0byc7XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+Um9sZXMgJiBSZXNwb25zaWJpbGl0aWVzPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJyb2xlX3Jlc3BvbnNpYmlsaXRpZXNfdGV4dFwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUm9sZXMgJiBSZXNwb25zaWJpbGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwbGFuRGF0YT8ucm9sZV9yZXNwb25zaWJpbGl0aWVzPy5qb2luKCdcXG4nKVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+QWN0aXZpdGllczwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZpdGllc190ZXh0XCIgcm93cz1cIjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBY3Rpdml0aWVzXCIgW3ZhbHVlXT1cInBsYW5EYXRhPy5hY3Rpdml0aWVzPy5qb2luKCdcXG4nKVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jeTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICAjZWRpdFNlY3Rpb24gY2xhc3M9XCJlbmhhbmNlZC1jb21wZXRlbmN5LXNlY3Rpb24gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMTogU2VsZWN0IENvbXBldGVuY3kgVHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RlcC1sYWJlbFwiPjEuIFNlbGVjdCBDb3JlIENvbXBldGVuY3kgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImNvbXBldGVuY3ktZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVR5cGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDb21wZXRlbmN5IFR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQmVoYXZpb3JhbFwiPkJlaGF2aW9yYWw8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkZ1bmN0aW9uYWxcIj5GdW5jdGlvbmFsPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJEb21haW5cIj5Eb21haW48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAyOiBUaGVtZSBTZWxlY3Rpb24gKEJlaGF2aW9yYWwvRnVuY3Rpb25hbCBmcm9tIEpTT04sIERvbWFpbiBtYW51YWwpIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+Mi4gU2VsZWN0L0VudGVyIFRoZW1lPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbDogU2VhcmNoYWJsZSBEcm9wZG93biBmcm9tIEpTT04gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdGdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VGhlbWVcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IHRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25UaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdGhlbWVzLi4uXCIgZm9ybUNvbnRyb2xOYW1lPVwidGhlbWVTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlclRoZW1lcygkZXZlbnQudGFyZ2V0Py52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGhlbWUgb3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0aGVtZSBvZiBmaWx0ZXJlZFRoZW1lc1wiIFt2YWx1ZV09XCJ0aGVtZS5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGVtZS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cImZpbHRlcmVkVGhlbWVzLmxlbmd0aCA9PT0gMCAmJiB0aGVtZVNlYXJjaFRleHRcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyB0aGVtZXMgZm91bmQgbWF0Y2hpbmcgXCJ7e3RoZW1lU2VhcmNoVGV4dH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgRG9tYWluOiBNYW51YWwgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFudWFsLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJtYW51YWxUaGVtZUlucHV0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBUaGVtZSBtYW51YWxseVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFudWFsLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgMzogU3ViLXRoZW1lIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3RlcFwiICpuZ0lmPVwic2VsZWN0ZWRUaGVtZSB8fCAoc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+My4gU2VsZWN0L0VudGVyIFN1Yi10aGVtZTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIEJlaGF2aW9yYWwgYW5kIEZ1bmN0aW9uYWw6IFNlYXJjaGFibGUgRHJvcGRvd24gYmFzZWQgb24gc2VsZWN0ZWQgdGhlbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93bi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdGdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVN1YlRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFuZCBzZWxlY3Qgc3ViLXRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TdWJUaGVtZUNoYW5nZSgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBpbnB1dCBpbnNpZGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaC1vcHRpb25cIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInNlYXJjaC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3ViLXRoZW1lcy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdWJUaGVtZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyU3ViVGhlbWVzKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN1Yi10aGVtZSBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN1YlRoZW1lIG9mIGZpbHRlcmVkU3ViVGhlbWVzXCIgW3ZhbHVlXT1cInN1YlRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdWJUaGVtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gcmVzdWx0cyBtZXNzYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJmaWx0ZXJlZFN1YlRoZW1lcy5sZW5ndGggPT09IDAgJiYgc3ViVGhlbWVTZWFyY2hUZXh0XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gc3ViLXRoZW1lcyBmb3VuZCBtYXRjaGluZyBcInt7c3ViVGhlbWVTZWFyY2hUZXh0fX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBEb21haW46IE1hbnVhbCBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYW51YWwtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbnVhbFN1YlRoZW1lSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFN1Yi10aGVtZSBtYW51YWxseVwiIGNsYXNzPVwibWFudWFsLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtYnV0dG9uLXNlY3Rpb25cIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5BZGRDb21wZXRlbmN5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNhbkFkZENvbXBldGVuY3koKSA/ICdidG4tYWN0aXZlJyA6ICdidG4tZGlzYWJsZSdcIiAoY2xpY2spPVwiYWRkQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIENvbXBldGVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWdcIiBjbGFzcz1cImFkZC1jb21wZXRlbmN5LWJ0biBidG4tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA1cHg7XCIgKGNsaWNrKT1cImNhbmNlbFVwZGF0ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW9yYWwnKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvcmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gYmVoYXZpb3VyYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvcmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1iZWhhdmlvcmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGZ1bmN0aW9uYWwtcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dC1mdW5jdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmcgbXQtMlwiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktZ3JpZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1pdGVtIGRvbWFpbi1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWRvbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wLnRoZW1lIH19IC0ge3sgY29tcC5zdWJfdGhlbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0XCIgKGNsaWNrKT1cImVkaXRDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZVwiIChjbGljayk9XCJkZWxldGVDb21wZXRlbmN5KGNvbXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIiAoY2xpY2spPVwiY2FuY2VsRm9ybSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiU2F2ZVwiIChjbGljayk9XCJzYXZlUm9sZU1hcHBpbmcoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuPC9kaXY+Il19
|